aws-sdk-go

The official Go SDK for calling AWS services like S3, DynamoDB, and EC2 — now in end-of-support status as AWS steers users to SDK v2.

SDK
Go
vv1.55.8
8,675stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
55/100Fair
Development Activity0
Maintenance44
Community76
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
72/100Good
Architecture80
Code Quality78
Innovation60
Learning Curve70

aws-sdk-go is the original AWS SDK for the Go programming language, providing typed clients for effectively every AWS service — S3, DynamoDB, EC2, Lambda, and hundreds more — generated from AWS’s own API models under service/. It bundles session and credential management, request signing, retries, and pagination behind a consistent client pattern, plus utilities like s3manager for chunked, concurrent multipart uploads and downloads.

AWS marked the module end-of-support on July 31, 2025, and every package now carries a deprecation notice pointing to aws-sdk-go-v2. It still works and remains deeply embedded in existing Go codebases, but new projects should target v2, which brings modular per-service modules, native context support, and ongoing feature updates.

What You Get

  • 383 service clients - typed Go packages under service/ for virtually every AWS API, from S3 and DynamoDB to niche services like AppFabric and ApplicationSignals, all generated from AWS’s API models.
  • Session and credential chain - aws/session and aws/credentials resolve credentials from environment variables, shared config files, EC2/ECS roles, SSO, or STS-assumed roles without extra wiring.
  • s3manager transfer utilities - concurrent, chunked multipart upload and download helpers in service/s3/s3manager for moving large objects efficiently.
  • Request middleware pipeline - aws/request exposes a handler-list architecture for injecting custom logic into signing, retries, validation, and error unmarshaling.

Common Use Cases

  • Uploading large files to S3 - applications use s3manager.Uploader to stream multi-gigabyte files to S3 with automatic multipart chunking and concurrency.
  • Reading and writing DynamoDB items - backend services use the dynamodb client with dynamodbattribute marshaling to persist Go structs directly as items.
  • Assuming cross-account IAM roles - services running in one AWS account use stscreds.AssumeRoleProvider to obtain temporary credentials for resources in another account.
  • Maintaining legacy Go services on AWS - teams with existing codebases built on the v1 API keep using aws-sdk-go for stability while planning a migration to v2.

Under The Hood

Architecture Code-generated per-service clients live under service/<name>/ (383 packages), each pairing a client file with a generated api.go of operations and typed structs. The shared aws/ package supplies cross-cutting concerns: session.Session assembles a Config (region, credentials, endpoint) once, and each service client embeds a request-building Client. A single outbound call flows Session to NewClient to NewRequest to a Handlers pipeline (Validate, Build, Sign, Send, Unmarshal/UnmarshalError) defined in aws/request, with aws/corehandlers and aws/signer/v4 installed as default stages and a pluggable Retryer handling backoff. s3manager (service/s3/s3manager/upload.go, download.go) sits on top of the s3 client as a higher-level concurrent transfer layer. The result is a modular monolith: hundreds of independently generated leaf packages sharing one core request/session pipeline, so a change to the shared Handlers or Config path ripples across every one of the 383 service clients.

Tech Stack go.mod declares module github.com/aws/aws-sdk-go on Go 1.19 with a single external dependency, github.com/jmespath/go-jmespath, used for JMESPath-based response filtering in waiters. There’s no web framework since this is a client library; HTTP transport runs over net/http with a custom RoundTripper for TLS and CA-bundle customization. Build tooling is a Makefile plus buildspec.yml for AWS CodeBuild-based CI, and service clients plus their typed models are code-generated from JSON API definitions under models/apis/. No database access is involved — the SDK is purely an outbound API client vendored into other Go binaries.

Code Quality The test suite is extensive: dozens of *_test.go files sit alongside implementation files throughout aws/ and each service package, including Go-version-gated variants (request_1_5_test.go, request_1_7_test.go) that exercise behavior across supported compiler versions. Tests use the standard library testing package plus a homegrown awstesting helper package rather than a third-party assertion library. Error handling is explicit and typed via awserr.Error, which wraps every SDK and service error with a code, message, and original error, and generated service packages export named error constants callers can switch on instead of string-matching. Naming is consistent, idiomatic Go throughout. CI runs through AWS CodeBuild (buildspec.yml) rather than GitHub Actions, so lint/format enforcement isn’t visible directly from the repository.

API Design The defining design choice is wholesale code generation from AWS’s service API models: every one of the 383 service packages exposes an identical shape (constructor, PascalCase operation methods, typed Input/Output structs, and WithContext variants) generated mechanically, which is what let AWS keep pace with hundreds of services without hand-writing each client. The Handlers-pipeline extensibility point is a deliberately public seam most hand-rolled API clients don’t expose, letting callers inject custom signing, logging, or retry logic without forking the SDK. Measured against modern idioms — context-first APIs, generics-based option builders — the design now reads as dated, which is precisely why AWS built SDK v2; but for a single generator producing one consistent client shape and one shared request pipeline across an enormous multi-service surface, the pattern was a deliberate and effective engineering choice for its era.

Used by 10 apps in this directory

Go
73%
Other

Convoy

Developer Tools · Devops

2,862

Convoy is an open-source, cloud-native webhooks gateway that ingests events over HTTP or straight from Kafka, SQS, Google Pub/Sub, and RabbitMQ, then reliably delivers them to subscriber endpoints with signed payloads, automatic retries, circuit breaking, and JavaScript-based transformations.

View details
89
Repo Health
81
Technical
66
Dependency
Built with
Go73%
TypeScript13%
HTML12%
Updated yesterday
Go
65%
AGPL 3.0

Fider

Product Management · Customer Support

4,483

Open-source feedback portal where customers submit, vote on, and track feature requests so product teams build what actually matters.

View details
86
Repo Health
85
Technical
73
Dependency
Built with
Go65%
TypeScript29%
Updated 3 weeks ago
Go
51%
AGPL 3.0

Filestash

File Storage

14,560

A self-hosted file management platform that unifies access to S3, SFTP, SMB, FTP, WebDAV, NFS, Git, SharePoint, and 20+ other storage backends through a single extensible web interface.

View details
79
Repo Health
67
Technical
66
Dependency
Built with
Go51%
JavaScript35%
Updated 3 days ago
Go
61%
Apache 2.0

Harness Open Source

Developer Tools · Devops · Code Editors

38,169

A unified open source DevOps platform combining Git hosting, CI/CD pipelines, cloud development environments, and artifact registries in a single self-hosted system.

View details
89
Repo Health
79
Technical
64
Dependency
Built with
Go61%
TypeScript34%
Updated 2 days ago
Go
97%
Apache 2.0

infracost

Devops · Developer Tools

12,499

Infracost shows cloud cost estimates for Terraform, CloudFormation, and AWS CDK before you deploy — in your terminal, editor, AI coding agent, and pull requests.

View details
79
Repo Health
78
Technical
68
Dependency
Built with
Go97%
Updated 6 days ago
Go
74%
Other

Notifuse

Marketing

2,089

Open-source, self-hosted alternative to Mailchimp, Brevo, and Klaviyo — send newsletters and transactional emails without per-email pricing or vendor lock-in.

View details
83
Repo Health
80
Technical
66
Dependency
Built with
Go74%
TypeScript23%
Updated yesterday
TypeScript
55%
Other

OpenReplay

Analytics

12,605

Self-hosted session replay and product analytics suite that lets you see exactly what users do on your web app — without sending data to third parties.

View details
90
Repo Health
77
Technical
71
Dependency
Built with
TypeScript55%
Go12%
Python10%
Updated 3 days ago
Go
93%
MIT

Plandex

AI Code Assistants

15,598

An open-source, terminal-based AI coding agent built for large tasks and real codebases — with its own version control for plans, a 2M-token effective context window, and self-hosted or cloud deployment.

View details
49
Repo Health
70
Technical
68
Dependency
Built with
Go93%
Updated 11 months ago
Go
98%
Apache 2.0

Space Cloud

Devops · Authentication

3,998

Kubernetes-native serverless platform that generates instant GraphQL and REST APIs for any database with built-in auth and real-time subscriptions

View details
50
Repo Health
74
Technical
63
Dependency
Built with
Go98%
Updated 2 years ago

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