MinIO — Dependencies#
Module info#
- Module:
github.com/minio/minio - Go version: 1.24.0 (toolchain go1.24.8)
- Direct dependencies: 95 (first
requireblock, excluding// indirectentries) - Indirect dependencies: 164 additional entries in go.mod; 355 unique modules in go.sum (879 lines total — each module appears twice: hash + go.mod hash)
Dependency categories#
Core infrastructure#
| Dependency | Version | Purpose |
|---|---|---|
github.com/minio/cli | v1.24.2 | MinIO’s own CLI framework — a fork of urfave/cli v1 with MinIO-specific extensions |
github.com/minio/pkg/v3 | v3.1.3 | Shared MinIO utilities: console output, env helpers, trie, color JSON |
go.uber.org/zap | v1.27.0 | Structured, high-performance logging |
go.uber.org/atomic | v1.11.0 | Atomic value types (supplements sync/atomic) |
github.com/tinylib/msgp | v1.4.0 | MessagePack serialization code generator — used heavily for internal binary serialization |
github.com/philhofer/fwd | v1.2.0 | Buffered I/O writer required by msgp |
github.com/dustin/go-humanize | v1.0.1 | Human-readable byte sizes and durations |
github.com/fatih/color | v1.18.0 | Terminal color output |
github.com/cheggaaa/pb | v1.0.29 | Progress bar (for server startup/heal display) |
github.com/beevik/ntp | v1.4.3 | NTP time validation — MinIO requires synchronized clocks |
github.com/coreos/go-systemd/v22 | v22.5.0 | systemd socket activation and journal logging |
github.com/mitchellh/go-homedir | v1.1.0 | Cross-platform home directory detection |
github.com/shirou/gopsutil/v3 | v3.24.5 | System stats (CPU, memory, disk for diagnostics) |
github.com/minio/selfupdate | v0.6.0 | Self-update binary mechanism |
github.com/minio/dperf | v0.6.3 | Disk I/O performance benchmarking tool |
gopkg.in/yaml.v2 | v2.4.0 | Legacy YAML parsing (kept for config compatibility) |
gopkg.in/yaml.v3 | v3.0.1 | Current YAML parsing |
github.com/alecthomas/participle | v0.7.1 | Parser combinator — used for S3 Select SQL query parsing |
Networking/HTTP#
| Dependency | Purpose |
|---|---|
github.com/minio/mux | MinIO’s custom HTTP router — fork of gorilla/mux with performance patches and S3-specific routing |
github.com/rs/cors | CORS middleware for the S3/Admin HTTP servers |
github.com/gobwas/ws | Low-level WebSocket implementation — used by internal/grid for the custom multiplexed RPC layer |
github.com/miekg/dns | DNS client library — used for MinIO’s DNS-based distributed discovery |
github.com/minio/dnscache | DNS caching layer to reduce DNS lookup overhead in distributed deployments |
aead.dev/mtls | Mutual TLS certificate management utilities |
golang.org/x/oauth2 | OAuth2 client — used for GCS and Google API authentication |
golang.org/x/net (indirect) | Extended net primitives (HTTP/2, IDNA) |
Data/Storage#
| Dependency | Purpose |
|---|---|
github.com/klauspost/reedsolomon | Core erasure coding engine — Reed-Solomon encoding/decoding for data protection |
github.com/klauspost/compress | Comprehensive compression library (zstd, snappy, brotli, deflate, S2) |
github.com/klauspost/pgzip | Parallel gzip for high-throughput compression |
github.com/klauspost/readahead | Concurrent read-ahead buffering for sequential I/O |
github.com/klauspost/cpuid/v2 | CPU feature detection for SIMD-optimized paths |
github.com/klauspost/filepathx | Extended filepath glob patterns |
github.com/minio/highwayhash | HighwayHash — fast, hardware-accelerated content hashing for data integrity |
github.com/cespare/xxhash/v2 | xxHash — fast non-cryptographic hashing |
github.com/zeebo/xxh3 | XXH3 variant for fast hashing |
github.com/dchest/siphash | SipHash — keyed hashing for hash table protection |
github.com/minio/sio | Secure I/O — authenticated encryption for object data at rest |
github.com/secure-io/sio-go | SIO stream encryption (wraps AES-GCM/ChaCha20) |
github.com/minio/simdjson-go | SIMD-accelerated JSON parsing (for S3 Select) |
github.com/json-iterator/go | High-performance JSON (drop-in encoding/json replacement) |
github.com/buger/jsonparser | Zero-allocation JSON field extraction |
github.com/minio/xxml | MinIO’s XML parser — optimized for S3 XML protocol messages |
github.com/minio/csvparser | CSV parsing for S3 Select |
github.com/fraugster/parquet-go | Apache Parquet format support for S3 Select |
github.com/minio/zipindex | ZIP file index for byte-range object retrieval |
github.com/cosnicolaou/pbzip2 | Parallel bzip2 decompression |
github.com/pierrec/lz4/v4 | LZ4 compression (used by Kafka/Parquet) |
github.com/valyala/bytebufferpool | Reusable byte buffer pool for zero-GC hot paths |
github.com/puzpuzpuz/xsync/v3 | Lock-free concurrent maps and queues |
github.com/ncw/directio | Direct I/O (O_DIRECT) — bypasses page cache for large object writes |
github.com/pkg/xattr | Extended file attributes (xattr) for storing per-object metadata on POSIX filesystems |
github.com/google/uuid | RFC 4122 UUID generation |
github.com/lithammer/shortuuid/v4 | URL-safe compact UUIDs |
Authentication/Security#
| Dependency | Purpose |
|---|---|
github.com/coreos/go-oidc/v3 | OpenID Connect identity provider integration (for federated auth) |
github.com/golang-jwt/jwt/v4 | JWT token signing and verification |
github.com/go-ldap/ldap/v3 | LDAP/Active Directory authentication |
github.com/minio/kms-go/kes | KES (Key Encryption Service) client — MinIO’s own KMS sidecar |
github.com/minio/kms-go/kms | MinIO KMS client for cloud key management |
github.com/xdg/scram | SCRAM-SHA authentication (used by Kafka SASL) |
golang.org/x/crypto | AES, ChaCha20, SSH key parsing, bcrypt |
aead.dev/mtls | Mutual TLS utilities |
Cloud provider clients (tiering/gateway)#
| Dependency | Purpose |
|---|---|
cloud.google.com/go/storage | Google Cloud Storage client (warm/cold tiering targets) |
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob | Azure Blob Storage client (warm/cold tiering) |
github.com/Azure/azure-sdk-for-go/sdk/azcore | Azure SDK core (auth, retry, transport) |
github.com/Azure/azure-sdk-for-go/sdk/azidentity | Azure identity/credential management |
google.golang.org/api | Google APIs client (GCS auth, service accounts) |
Event notification targets#
MinIO supports forwarding object events to 7+ external systems — all are direct dependencies, not optional plugins:
| Dependency | Target |
|---|---|
github.com/IBM/sarama | Apache Kafka |
github.com/eclipse/paho.mqtt.golang | MQTT broker |
github.com/elastic/go-elasticsearch/v7 | Elasticsearch |
github.com/go-sql-driver/mysql | MySQL |
github.com/lib/pq | PostgreSQL |
github.com/gomodule/redigo | Redis |
github.com/nats-io/nats.go + nats-server/v2 + stan.go | NATS (client + embedded server + streaming) |
github.com/nsqio/go-nsq | NSQ |
github.com/rabbitmq/amqp091-go | RabbitMQ/AMQP |
Distributed coordination#
| Dependency | Purpose |
|---|---|
go.etcd.io/etcd/api/v3 | etcd API types (used for DNS-based service discovery) |
go.etcd.io/etcd/client/v3 | etcd client for distributed state in some deployments |
github.com/minio/madmin-go/v3 | MinIO admin client library (used internally for site replication) |
github.com/minio/minio-go/v7 | MinIO S3 client (used for tiering, batch replication) |
Observability#
| Dependency | Purpose |
|---|---|
github.com/prometheus/client_golang | Prometheus metrics exposition |
github.com/prometheus/client_model | Prometheus protobuf model types |
github.com/prometheus/common | Prometheus shared utilities |
github.com/prometheus/procfs | Linux /proc filesystem reader for system metrics |
github.com/felixge/fgprof | Full-stack CPU profiler (wall-clock profiling) |
Protocols (FTP/SFTP)#
| Dependency | Purpose |
|---|---|
github.com/pkg/sftp | SFTP server implementation (MinIO exposes an SFTP endpoint) |
goftp.io/server/v2 | FTP server implementation |
Testing#
No dedicated test frameworks appear as direct dependencies. testify, gomock, and similar are pulled in only as transitive/indirect dependencies via minio-go and madmin-go.
Other notable#
| Dependency | Purpose |
|---|---|
github.com/go-openapi/loads | OpenAPI 2.0 spec loading (for admin API schema validation) |
github.com/pkg/errors | Error wrapping (pkg/errors style — some legacy code) |
github.com/rcrowley/go-metrics | Codahale-style metrics (used by Kafka/sarama) |
golang.org/x/time | Rate limiting (token bucket) |
Stdlib reliance#
MinIO is a heavy stdlib user. Across the cmd/ package (453 files), the most-used stdlib packages are:
| Package | Import count (cmd/) |
|---|---|
context | 197 |
time | 173 |
fmt | 169 |
strings | 140 |
net/http | 130 |
bytes | 128 |
errors | 124 |
io | 109 |
sync | 79 |
strconv | 73 |
os | 68 |
net/url | 56 |
runtime | 52 |
encoding/json | 49 |
path | 42 |
Notably, net/http is used directly for both client and server — MinIO builds its own HTTP handler stack on top of stdlib rather than delegating to a full framework. context ubiquity reflects MinIO’s thorough propagation of cancellation and deadline through all I/O paths. encoding/json is supplemented (not replaced) by json-iterator/go and simdjson-go on hot paths.
Shared dependencies#
These direct dependencies are commonly shared across many projects in the 50-project corpus, making them connection points for cross-project comparison:
| Dependency | Context |
|---|---|
go.uber.org/zap | Shared with Kubernetes, etcd, many production Go services |
github.com/prometheus/client_golang | Near-universal in production Go services |
golang.org/x/crypto | Ubiquitous in any security-aware project |
golang.org/x/sync | Used by almost all concurrent Go projects |
gopkg.in/yaml.v3 | Standard YAML in the ecosystem |
github.com/google/uuid | Common UUID library |
go.etcd.io/etcd/client/v3 | Shared with etcd project itself |
github.com/prometheus/common + procfs | Shared with Prometheus project |
github.com/klauspost/compress | Widely used (Hugo, Traefik, Caddy) |
github.com/gorilla/mux (indirect) | MinIO uses its own fork (minio/mux) but gorilla/mux pulls in as a transitive dep |
github.com/pkg/errors | Common in projects started pre-Go 1.13 |
Vendoring#
No vendor directory. MinIO uses the Go module proxy for dependency resolution. This is appropriate for a server application with many direct dependencies — the module cache provides reproducibility. The absence of vendoring is a conscious tradeoff: the source tree stays smaller and dependency updates are simpler, at the cost of requiring internet access (or a proxy) to build from scratch.
Notable dependency decisions#
The klauspost ecosystem is a dependency core. Klaus Post’s libraries —
reedsolomon,compress,pgzip,readahead,cpuid,filepathx— are woven throughout MinIO’s hot paths. He is both an external dependency author and a MinIO core contributor. This creates an unusually tight coupling between MinIO and a single contributor’s library suite, but that coupling is justified by the consistent SIMD-optimization philosophy and the co-evolution of the libraries.MinIO forks its own critical dependencies. Rather than using
gorilla/mux, MinIO maintainsminio/mux. Rather thanurfave/cli, they maintainminio/cli. Rather than any upstream XML parser, they wroteminio/xxml. This pattern of controlled forking for performance-critical paths is a hallmark of the project’s “own the critical path” philosophy.Event targets are always compiled in — no plugin model. All 9 notification target systems (Kafka, MQTT, Elasticsearch, MySQL, PostgreSQL, Redis, NATS, NSQ, RabbitMQ) are unconditional direct dependencies. MinIO chose compile-time inclusion over runtime plugins, trading binary size and build time for operational simplicity: no plugin loading, no ABI stability concerns.
Both yaml.v2 and yaml.v3 coexist. This is a legacy artifact — MinIO is a large, multi-year project that hasn’t fully migrated its YAML code. Seeing both versions in go.mod is a common pattern in mature Go projects and speaks to the cost of large-scale internal migrations.
Self-reliance via minio/ sub-projects.* MinIO depends on
minio-go/v7(its own S3 client),madmin-go/v3(its own admin client),minio/pkg/v3(shared utilities), andminio/console(the web UI). The project is effectively a mini-ecosystem, and the server binary consumes its own public APIs. This creates a useful dogfooding dynamic but also tight version coupling within the MinIO GitHub organization.No DI framework. With 95 direct dependencies, the absence of
uber/dig,uber/fx, orgoogle/wireis notable. MinIO uses manual constructor-based wiring throughout — consistent with its single-packagecmd/architecture where all components are co-located and wired in initialization functions.etcd appears but is not central. etcd client is a direct dep for DNS-based service discovery in some deployment modes, but MinIO’s primary distributed coordination uses its own
internal/dsync(quorum-based distributed RWMutex) andinternal/grid(custom WebSocket RPC). etcd is optional infrastructure, not the coordination backbone.