minio-go

The official Go client SDK for MinIO and any Amazon S3 compatible object storage service.

SDK
Go
vv7.4.1
3,010 stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
93 /100 Excellent
Development Activity 96
Maintenance 96
Community 80
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
81 /100 Excellent
Architecture 88
Code Quality 90
Innovation 70
Learning Curve 75

minio-go is the official Go SDK for MinIO, providing a single client API that works against MinIO, AWS S3, and any other S3-compatible object storage backend. It wraps the full S3 REST API surface — bucket and object CRUD, multipart and streaming uploads, presigned URLs, server-side encryption, object locking, lifecycle and replication policies, bucket notifications, and MinIO-specific extensions like SELECT-object-content and object annotations — behind a single Client type built around context.Context.

The library is designed for production use at scale: request signing (V2 and V4), automatic retries with jittered exponential backoff, health-check driven failover, connection pooling via a shared http.Transport, and streaming I/O throughout so large objects never need to be buffered fully in memory. A lower-level Core type is also exposed for callers who need direct access to multipart upload primitives instead of the higher-level streaming helpers.

As the reference Go client for the MinIO ecosystem, it is the natural dependency for any Go service that reads or writes object storage — file uploads, backups, data lake ingestion, or building tools on top of MinIO/S3 directly.

What You Get

  • A Client type covering the full S3 API surface: MakeBucket, ListObjects, PutObject, GetObject, CopyObject, RemoveObject(s), and dozens more, all context.Context-aware
  • Streaming and multipart upload/download helpers (PutObject, FPutObject, GetObject, FGetObject) that never require buffering a whole object in memory
  • Presigned URL generation (PresignedGetObject, PresignedPutObject, PresignedPostPolicy) for browser/client-side uploads and downloads without exposing credentials
  • Bucket-level policy, lifecycle, encryption, versioning, tagging, notification, and replication configuration APIs
  • A lower-level Core type exposing raw multipart primitives for callers building their own upload strategies
  • Pluggable credential providers (pkg/credentials) supporting static keys, IAM, STS, and chained providers, plus V2/V4 request signing

Common Use Cases

  • Uploading and serving user-generated files (images, documents, media) from a Go backend to MinIO or S3
  • Building backup and archival pipelines that write to any S3-compatible object store
  • Generating presigned upload/download URLs so browsers or mobile clients can transfer directly to storage without proxying through the API server
  • Object storage as a data lake sink — writing and listing large volumes of objects for downstream analytics
  • Implementing self-hosted, S3-compatible file storage for applications that need to avoid vendor lock-in to AWS

Under The Hood

Architecture

The library centers on a single Client struct (api.go) constructed via minio.New(endpoint, *Options), holding the parsed endpoint, credential provider, HTTP client/transport, region and bucket-location caches, and signing configuration. Every S3 operation is a method on Client that builds a request through shared internal helpers, applies V2/V4 signing from pkg/signer, and executes it through a pluggable http.RoundTripper, with retry.go wrapping calls in jittered exponential backoff and healthcheck state tracking endpoint availability. A separate Core type (core.go) re-exposes the same transport but with raw multipart primitives (PutObjectPart, ListMultipartUploads) for callers who want to manage multipart uploads themselves rather than use the higher-level streaming helpers — the two share the same underlying Client, so Core is additive rather than a parallel implementation. Domain concerns are split into single-purpose files by API area (api-bucket-policy.go, api-object-lock.go, api-put-object-multipart.go, etc.) rather than one large client file, and supporting concerns (credentials, signing, S3 utilities, an LRU-style key/value cache) live in dedicated pkg/ subpackages so they can be imported independently. An optional RDMA transport (rdma.go, built only with -tags=rdma) dispatches PutObject/GetObject to a native libminiocpp.so when the caller supplies an RDMA buffer, with a no-op stub (rdma_stub.go) satisfying the same struct shape in normal builds.

Tech Stack

Written in Go (module targets Go 1.25) with a deliberately small dependency footprint: github.com/minio/md5-simd and github.com/minio/crc64nvme/klauspost/crc32 for accelerated checksums, google/uuid and rs/xid for identifiers, dustin/go-humanize for human-readable sizes, tinylib/msgp and go.yaml.in/yaml for serialization, and golang.org/x/net/golang.org/x/crypto for transport and TLS extras — no web framework or ORM, since this is a pure client library. Builds and releases run through a Makefile and GitHub Actions across Linux, Windows, and an ARM/AMD64 RDMA-tagged build that links against a companion minio-cpp native library and vcpkg-provisioned dependencies.

Code Quality

Testing is extensive: 25 _test.go files alongside their implementation files (unit tests colocated per API area) plus a large functional_tests.go integration suite that exercises the client against a live MinIO/S3 endpoint. Errors are handled explicitly and typed — s3-error.go defines named S3 error-code constants (NoSuchBucket, AccessDenied, etc.) that callers can compare against rather than parsing strings. Linting is enforced via golangci-lint (pinned as a Go tool dependency) with a broad rule set (gocritic, revive, staticcheck, unused, ineffassign), and CI runs a dedicated govulncheck workflow in addition to standard build/test workflows for Linux, Windows, and the RDMA variant.

What Makes It Unique

Beyond standard S3 compatibility, the library exposes several MinIO-specific extensions not found in the stock AWS SDK: ListenBucketNotification/ListenNotification for real-time bucket event streams, SelectObjectContent for server-side SQL-like filtering of object contents, object annotation APIs, and an experimental RDMA transport path for high-throughput transfers to MinIO clusters over RDMA-capable networks. Combined with its dual Client/Core design, it serves both simple upload/download use cases and advanced callers who need low-level multipart control, while remaining a single dependency that works identically against MinIO or AWS S3.

Used by 15 apps in this directory

Go
99%
AGPL 3.0

MinIO

File Storage

61,301

High-performance, S3-compatible object storage built for AI/ML and analytics workloads — run it anywhere from a laptop to a petabyte-scale cluster.

View details
58
Repo Health
85
Technical
65
Dependency
Built with
Go 99%
Updated 6 months ago
Go
90%
AGPL 3.0

Pyroscope

Developer Tools · Devops · Monitoring

11,703

An open-source, horizontally scalable continuous profiling platform that pinpoints CPU, memory, and I/O bottlenecks down to the exact line of code, built by Grafana Labs alongside Loki, Tempo, and Mimir.

View details
92
Repo Health
89
Technical
65
Dependency
Built with
Go 90%
Updated 6 days ago
Go
57%
MPL 2.0

shaper

Analytics · Data Engineering

1,265

Build analytics dashboards, reports, and customer-facing analytics by writing pure SQL — powered by DuckDB and designed for self-hosted deployment.

View details
80
Repo Health
79
Technical
71
Dependency
Built with
Go 57%
TypeScript 42%
Updated 1 weeks ago
C
74%
AGPL 3.0

TDengine

Databases

25,168

A high-performance, open-source time-series database built in C for IoT, connected vehicles, and industrial monitoring workloads, with built-in stream processing, caching, and data subscription.

View details
97
Repo Health
71
Technical
65
Dependency
Built with
C 74%
C++ 19%
Updated 1 weeks ago
Go
97%
BSD 3

Weaviate

Databases · Search

16,908

Open-source vector database combining semantic search, hybrid queries, RAG, and image search in a single cloud-native system built for production scale.

View details
91
Repo Health
85
Technical
68
Dependency
Built with
Go 97%
Updated 1 weeks ago
Go
74%
AGPL 3.0

ZITADEL

Authentication

15,418

Open-source, API-first identity platform delivering multi-tenancy, Passkeys, OIDC, SAML, and SCIM without vendor lock-in.

View details
92
Repo Health
81
Technical
65
Dependency
Built with
Go 74%
TypeScript 12%
Updated 1 weeks 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