minio-go

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

SDK
Go
vv7.3.0
2,998stars
Apache License 2.0

Repository Health

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

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
81/100Excellent
Architecture88
Code Quality90
Innovation70
Learning Curve75

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 14 apps in this directory

Go
72%
GPL 3.0

1Panel

Devops · Hosting Control Panel · Monitoring

36,721

The only open-source VPS control panel with native AI agent runtime — deploy websites, Docker stacks, and local LLMs from one web interface.

View details
90
Repo Health
76
Technical
68
Dependency
Built with
Go72%
Vue28%
Updated 2 days ago
Go
85%
Apache 2.0

Argo Workflows

Devops · Data Engineering

16,943

The most popular Kubernetes-native workflow engine for orchestrating containerized DAGs, ML pipelines, CI/CD, and parallel batch jobs at scale.

View details
95
Repo Health
90
Technical
68
Dependency
Built with
Go85%
TypeScript11%
Updated yesterday
Go
55%
Apache 2.0

Authgear

Authentication

2,014

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
69
Dependency
Built with
Go55%
HTML25%
TypeScript17%
Updated 4 days ago
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
38%
MIT

ezBookkeeping

Invoicing Finance

5,494

Lightweight self-hosted personal finance manager with AI receipt scanning, multi-currency support, and MCP integration for complete data privacy.

View details
88
Repo Health
80
Technical
74
Dependency
Built with
Go38%
Vue33%
TypeScript25%
Updated yesterday
Go
83%
MIT

Gitea

Devops · Developer Tools · Project Management

57,677

Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.

View details
93
Repo Health
79
Technical
66
Dependency
Built with
Go83%
Updated today
Go
97%
Apache 2.0

kopia

File Storage

13,990

Fast, encrypted, deduplicated backups to any cloud or local storage with full client-side control.

View details
90
Repo Health
83
Technical
70
Dependency
Built with
Go97%
Updated 5 days ago
TypeScript
51%
Other

Mattermost

Team Chat · Collaboration · Devops

38,940

Open core, self-hosted team collaboration with chat, AI agents, voice calling, and deep DevOps integrations — all under your control.

View details
96
Repo Health
87
Technical
65
Dependency
Built with
TypeScript51%
Go40%
Updated yesterday
Go
99%
AGPL 3.0

MinIO

File Storage

61,375

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
60
Repo Health
85
Technical
66
Dependency
Built with
Go99%
Updated 4 months 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