AWS SDK for Go v2

The official AWS SDK for Go — type-safe, modular clients for every AWS service.

SDK
Go
vv1.43.6
3,628stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
95/100Excellent
Development Activity100
Maintenance96
Community84
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
86/100Excellent
Architecture90
Code Quality88
Innovation82
Learning Curve85

aws-sdk-go-v2 is the base module of AWS’s official Go SDK, providing the shared Config, CredentialsProvider, Retryer, and middleware primitives that every generated AWS service client builds on. Rather than one monolithic package, the SDK ships as a monorepo of 400+ independently versioned service modules (S3, DynamoDB, EC2, Lambda, and hundreds more) that all compose this base module’s request signing, credential resolution, and retry logic through a shared smithy-go middleware pipeline.

Developers use it to authenticate against AWS (via environment variables, shared config files, IAM roles, SSO, or STS AssumeRole), configure region and retry behavior once via config.LoadDefaultConfig, and then construct any service client with a uniform NewFromConfig(cfg) pattern — giving Go applications a consistent, idiomatic way to call AWS APIs without hand-rolling HTTP signing or credential plumbing.

What You Get

  • A unified aws.Config type carrying region, credentials, HTTP client, retry, and endpoint settings shared across all AWS service clients
  • config.LoadDefaultConfig, which resolves credentials and settings from environment variables, shared config/credentials files, IMDS, and functional options in one call
  • A pluggable credentials chain (credentials/stscreds, ssocreds, ec2rolecreds, endpointcreds, processcreds) covering static keys, IAM roles, SSO, and STS AssumeRole
  • Built-in SigV4/SigV4A request signing and a configurable Retryer (standard and adaptive retry modes) wired into every service client automatically
  • A smithy-go-based middleware pipeline (user-agent, recursion detection, request-ID tracking) that generated service clients extend rather than reimplement

Common Use Cases

  • Bootstrapping a Go application’s AWS access once with config.LoadDefaultConfig, then sharing that Config across multiple service clients (S3, DynamoDB, SQS, etc.)
  • Assuming cross-account or cross-role AWS access in server-side Go services via credentials/stscreds.NewAssumeRoleProvider
  • Running Go workloads on EC2, ECS, or Lambda that need automatic IAM role credential resolution without hardcoded keys
  • Building CLI tools or backend services that need consistent retry/backoff behavior across many AWS API calls

Under The Hood

Architecture — The base aws-sdk-go-v2 module provides the shared runtime that every generated service client builds on: the aws package (aws/config.go, aws/credentials.go, aws/retryer.go) defines the core Config, CredentialsProvider, and Retryer abstractions; aws/middleware wraps smithy-go’s middleware stack to inject user-agent, recursion-detection, and request-ID handling into every request; internal/auth and internal/v4a handle SigV4/SigV4A request signing; the config package (config/load_options.go, config/config.go) implements LoadDefaultConfig, resolving region/credentials/retry settings from environment variables, shared config/credentials files, IMDS, and functional options; and credentials (credentials/stscreds, ssocreds, ec2rolecreds, endpointcreds, processcreds) supplies the pluggable CredentialsProvider chain. Each of the 427 subdirectories under service/ is an independently versioned Go module generated from Smithy models (see codegen/) that composes these primitives — NewFromConfig(cfg) on a service client pulls Region/Credentials/HTTPClient/Retryer straight from the shared aws.Config and wires them into a smithy-go request/response middleware pipeline, so the base module’s job is purely to be the common substrate the generated service code depends on.

Tech Stack — The module declares only one direct dependency in its own go.mod — github.com/aws/smithy-go v1.27.3, AWS’s shared client-runtime library — and requires Go 1.24, tracking upstream Go’s release/support policy per the README. The wider repository is a monorepo where config/, credentials/, and each service/<name> directory ships its own go.mod/go.sum so consumers only pull in the AWS services they actually import, and internal/repotools plus codegen/ (backed by a Smithy/Java toolchain) drive automatic regeneration of all service clients and the CHANGELOG from AWS’s service models. There is no runtime framework dependency beyond the Go standard library’s net/http and smithy-go — the SDK deliberately keeps its core dependency graph minimal so it can be vendored into hundreds of downstream service modules without version conflicts.

Code Quality — This base module carries unit tests alongside nearly every source file (credentials_test.go, retryer_test.go, endpoints_test.go, config_test.go, credential_cache_test.go plus a dedicated credential_cache_bench_test.go for benchmarking) — 47 _test.go files under aws/ alone — and the repo layout separates public API (aws/, config/, credentials/) from internal implementation detail (internal/v4a, internal/auth, internal/rand, internal/sync) using Go’s internal/ visibility convention. Exported types favor explicit interfaces (CredentialsProvider, HTTPClient, Retryer, EndpointResolverV2) over concrete structs, errors are wrapped with context via fmt.Errorf and dedicated error types, and .golangci.toml plus CI workflows (go.yml, codegen.yml) enforce linting and codegen-drift checks on every PR — process rigor typical of a foundational, widely-vendored SDK.

API Design — Getting started is two go get calls plus one config.LoadDefaultConfig(ctx, …) call — the functional-options pattern (config.WithRegion, config.WithCredentialsProvider, etc.) keeps the common path to a working client under ten lines, as shown in both the README and doc.go. Every generated service client follows the identical svc := <service>.NewFromConfig(cfg) constructor and Input/Output struct-pair convention, so learning the base module’s Config/Credentials/Retryer vocabulary transfers unchanged across all 427 service clients. The main friction is surface size and historical accretion — Config carries current fields (EndpointResolverV2, BaseEndpoint) alongside explicitly Deprecated ones (EndpointResolver, EndpointResolverWithOptions) with in-doc migration guidance, so new users must read comments carefully to avoid deprecated paths; thorough godoc coverage, a migration guide, and a developer guide offset this learning curve.

Used by 38 apps in this directory

Go
55%
Apache 2.0

Authgear

Authentication

1,989

Open-source, self-hostable authentication platform with passkeys, biometric login, SSO, MFA, and GraphQL admin API — a full Auth0/Clerk/Firebase alternative for SaaS and mobile apps.

View details
88
Repo Health
81
Technical
72
Dependency
Built with
Go55%
HTML26%
TypeScript17%
Updated yesterday
Go
82%
AGPL 3.0

Beta9

Developer Tools · AI Development · Data Engineering

1,746

Run AI workloads at scale with a Pythonic serverless runtime that handles GPU inference, background jobs, and sandboxes with zero infrastructure overhead.

View details
85
Repo Health
78
Technical
69
Dependency
Built with
Go82%
Python17%
Updated today
Go
52%
MIT

Bytebase

Devops

14,396

An open-source database CI/CD and DevSecOps platform — schema migration review, GitOps-driven changes, data masking, and access control across MySQL, PostgreSQL, Oracle, Snowflake, MongoDB, and more.

View details
92
Repo Health
73
Technical
69
Dependency
Built with
Go52%
TypeScript39%
Updated today
Go
76%
AGPL 3.0

Coder

Devops · Developer Tools · Code Editors

14,199

Self-hosted cloud development environments and AI coding agents — defined in Terraform, connected via WireGuard, automatically shut down when idle.

View details
93
Repo Health
90
Technical
71
Dependency
Built with
Go76%
TypeScript22%
Updated today
Go
75%
MIT

Digger

Devops · Automation · Developer Tools

5,023

Run Terraform and OpenTofu natively inside your existing CI pipeline — no separate runners, no third-party secrets, no extra compute costs.

View details
73
Repo Health
73
Technical
68
Dependency
Built with
Go75%
TypeScript15%
Updated 1 weeks ago
Go
97%
Apache 2.0

Docker (Moby)

Devops · Developer Tools

71,983

The open-source container engine at the heart of Docker — a modular toolkit of runtime, build, and networking components for assembling container-based systems.

View details
98
Repo Health
86
Technical
73
Dependency
Built with
Go97%
Updated yesterday
Go
79%
Apache 2.0

Dolt

Databases · Data Engineering · Developer Tools

24,221

The SQL database you can branch, merge, diff, and clone — Git for your data, MySQL-compatible and ready for multi-agent AI workflows.

View details
91
Repo Health
9
Technical
72
Dependency
Built with
Go79%
Shell20%
Updated today
Go
73%
Other

Flipt

Devops · Developer Tools

4,872

Git-native feature flag platform that stores, versions, and deploys feature toggles directly in your own Git repositories with no external database required.

View details
90
Repo Health
83
Technical
70
Dependency
Built with
Go73%
TypeScript26%
Updated today
Go
91%
Apache 2.0

Gatus

Monitoring · Devops

11,853

Developer-oriented health dashboard with active endpoint probing, multi-protocol checks, and 40+ alerting integrations so you know about failures before your users do.

View details
79
Repo Health
84
Technical
78
Dependency
Built with
Go91%
Updated yesterday

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search