MinIO — Dependencies#

Module info#

  • Module: github.com/minio/minio
  • Go version: 1.24.0 (toolchain go1.24.8)
  • Direct dependencies: 95 (first require block, excluding // indirect entries)
  • 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#

DependencyVersionPurpose
github.com/minio/cliv1.24.2MinIO’s own CLI framework — a fork of urfave/cli v1 with MinIO-specific extensions
github.com/minio/pkg/v3v3.1.3Shared MinIO utilities: console output, env helpers, trie, color JSON
go.uber.org/zapv1.27.0Structured, high-performance logging
go.uber.org/atomicv1.11.0Atomic value types (supplements sync/atomic)
github.com/tinylib/msgpv1.4.0MessagePack serialization code generator — used heavily for internal binary serialization
github.com/philhofer/fwdv1.2.0Buffered I/O writer required by msgp
github.com/dustin/go-humanizev1.0.1Human-readable byte sizes and durations
github.com/fatih/colorv1.18.0Terminal color output
github.com/cheggaaa/pbv1.0.29Progress bar (for server startup/heal display)
github.com/beevik/ntpv1.4.3NTP time validation — MinIO requires synchronized clocks
github.com/coreos/go-systemd/v22v22.5.0systemd socket activation and journal logging
github.com/mitchellh/go-homedirv1.1.0Cross-platform home directory detection
github.com/shirou/gopsutil/v3v3.24.5System stats (CPU, memory, disk for diagnostics)
github.com/minio/selfupdatev0.6.0Self-update binary mechanism
github.com/minio/dperfv0.6.3Disk I/O performance benchmarking tool
gopkg.in/yaml.v2v2.4.0Legacy YAML parsing (kept for config compatibility)
gopkg.in/yaml.v3v3.0.1Current YAML parsing
github.com/alecthomas/participlev0.7.1Parser combinator — used for S3 Select SQL query parsing

Networking/HTTP#

DependencyPurpose
github.com/minio/muxMinIO’s custom HTTP router — fork of gorilla/mux with performance patches and S3-specific routing
github.com/rs/corsCORS middleware for the S3/Admin HTTP servers
github.com/gobwas/wsLow-level WebSocket implementation — used by internal/grid for the custom multiplexed RPC layer
github.com/miekg/dnsDNS client library — used for MinIO’s DNS-based distributed discovery
github.com/minio/dnscacheDNS caching layer to reduce DNS lookup overhead in distributed deployments
aead.dev/mtlsMutual TLS certificate management utilities
golang.org/x/oauth2OAuth2 client — used for GCS and Google API authentication
golang.org/x/net (indirect)Extended net primitives (HTTP/2, IDNA)

Data/Storage#

DependencyPurpose
github.com/klauspost/reedsolomonCore erasure coding engine — Reed-Solomon encoding/decoding for data protection
github.com/klauspost/compressComprehensive compression library (zstd, snappy, brotli, deflate, S2)
github.com/klauspost/pgzipParallel gzip for high-throughput compression
github.com/klauspost/readaheadConcurrent read-ahead buffering for sequential I/O
github.com/klauspost/cpuid/v2CPU feature detection for SIMD-optimized paths
github.com/klauspost/filepathxExtended filepath glob patterns
github.com/minio/highwayhashHighwayHash — fast, hardware-accelerated content hashing for data integrity
github.com/cespare/xxhash/v2xxHash — fast non-cryptographic hashing
github.com/zeebo/xxh3XXH3 variant for fast hashing
github.com/dchest/siphashSipHash — keyed hashing for hash table protection
github.com/minio/sioSecure I/O — authenticated encryption for object data at rest
github.com/secure-io/sio-goSIO stream encryption (wraps AES-GCM/ChaCha20)
github.com/minio/simdjson-goSIMD-accelerated JSON parsing (for S3 Select)
github.com/json-iterator/goHigh-performance JSON (drop-in encoding/json replacement)
github.com/buger/jsonparserZero-allocation JSON field extraction
github.com/minio/xxmlMinIO’s XML parser — optimized for S3 XML protocol messages
github.com/minio/csvparserCSV parsing for S3 Select
github.com/fraugster/parquet-goApache Parquet format support for S3 Select
github.com/minio/zipindexZIP file index for byte-range object retrieval
github.com/cosnicolaou/pbzip2Parallel bzip2 decompression
github.com/pierrec/lz4/v4LZ4 compression (used by Kafka/Parquet)
github.com/valyala/bytebufferpoolReusable byte buffer pool for zero-GC hot paths
github.com/puzpuzpuz/xsync/v3Lock-free concurrent maps and queues
github.com/ncw/directioDirect I/O (O_DIRECT) — bypasses page cache for large object writes
github.com/pkg/xattrExtended file attributes (xattr) for storing per-object metadata on POSIX filesystems
github.com/google/uuidRFC 4122 UUID generation
github.com/lithammer/shortuuid/v4URL-safe compact UUIDs

Authentication/Security#

DependencyPurpose
github.com/coreos/go-oidc/v3OpenID Connect identity provider integration (for federated auth)
github.com/golang-jwt/jwt/v4JWT token signing and verification
github.com/go-ldap/ldap/v3LDAP/Active Directory authentication
github.com/minio/kms-go/kesKES (Key Encryption Service) client — MinIO’s own KMS sidecar
github.com/minio/kms-go/kmsMinIO KMS client for cloud key management
github.com/xdg/scramSCRAM-SHA authentication (used by Kafka SASL)
golang.org/x/cryptoAES, ChaCha20, SSH key parsing, bcrypt
aead.dev/mtlsMutual TLS utilities

Cloud provider clients (tiering/gateway)#

DependencyPurpose
cloud.google.com/go/storageGoogle Cloud Storage client (warm/cold tiering targets)
github.com/Azure/azure-sdk-for-go/sdk/storage/azblobAzure Blob Storage client (warm/cold tiering)
github.com/Azure/azure-sdk-for-go/sdk/azcoreAzure SDK core (auth, retry, transport)
github.com/Azure/azure-sdk-for-go/sdk/azidentityAzure identity/credential management
google.golang.org/apiGoogle 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:

DependencyTarget
github.com/IBM/saramaApache Kafka
github.com/eclipse/paho.mqtt.golangMQTT broker
github.com/elastic/go-elasticsearch/v7Elasticsearch
github.com/go-sql-driver/mysqlMySQL
github.com/lib/pqPostgreSQL
github.com/gomodule/redigoRedis
github.com/nats-io/nats.go + nats-server/v2 + stan.goNATS (client + embedded server + streaming)
github.com/nsqio/go-nsqNSQ
github.com/rabbitmq/amqp091-goRabbitMQ/AMQP

Distributed coordination#

DependencyPurpose
go.etcd.io/etcd/api/v3etcd API types (used for DNS-based service discovery)
go.etcd.io/etcd/client/v3etcd client for distributed state in some deployments
github.com/minio/madmin-go/v3MinIO admin client library (used internally for site replication)
github.com/minio/minio-go/v7MinIO S3 client (used for tiering, batch replication)

Observability#

DependencyPurpose
github.com/prometheus/client_golangPrometheus metrics exposition
github.com/prometheus/client_modelPrometheus protobuf model types
github.com/prometheus/commonPrometheus shared utilities
github.com/prometheus/procfsLinux /proc filesystem reader for system metrics
github.com/felixge/fgprofFull-stack CPU profiler (wall-clock profiling)

Protocols (FTP/SFTP)#

DependencyPurpose
github.com/pkg/sftpSFTP server implementation (MinIO exposes an SFTP endpoint)
goftp.io/server/v2FTP 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#

DependencyPurpose
github.com/go-openapi/loadsOpenAPI 2.0 spec loading (for admin API schema validation)
github.com/pkg/errorsError wrapping (pkg/errors style — some legacy code)
github.com/rcrowley/go-metricsCodahale-style metrics (used by Kafka/sarama)
golang.org/x/timeRate limiting (token bucket)

Stdlib reliance#

MinIO is a heavy stdlib user. Across the cmd/ package (453 files), the most-used stdlib packages are:

PackageImport count (cmd/)
context197
time173
fmt169
strings140
net/http130
bytes128
errors124
io109
sync79
strconv73
os68
net/url56
runtime52
encoding/json49
path42

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:

DependencyContext
go.uber.org/zapShared with Kubernetes, etcd, many production Go services
github.com/prometheus/client_golangNear-universal in production Go services
golang.org/x/cryptoUbiquitous in any security-aware project
golang.org/x/syncUsed by almost all concurrent Go projects
gopkg.in/yaml.v3Standard YAML in the ecosystem
github.com/google/uuidCommon UUID library
go.etcd.io/etcd/client/v3Shared with etcd project itself
github.com/prometheus/common + procfsShared with Prometheus project
github.com/klauspost/compressWidely 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/errorsCommon 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#

  1. 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.

  2. MinIO forks its own critical dependencies. Rather than using gorilla/mux, MinIO maintains minio/mux. Rather than urfave/cli, they maintain minio/cli. Rather than any upstream XML parser, they wrote minio/xxml. This pattern of controlled forking for performance-critical paths is a hallmark of the project’s “own the critical path” philosophy.

  3. 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.

  4. 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.

  5. 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), and minio/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.

  6. No DI framework. With 95 direct dependencies, the absence of uber/dig, uber/fx, or google/wire is notable. MinIO uses manual constructor-based wiring throughout — consistent with its single-package cmd/ architecture where all components are co-located and wired in initialization functions.

  7. 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) and internal/grid (custom WebSocket RPC). etcd is optional infrastructure, not the coordination backbone.