minio/minio
Lore
This is the timeline of how MinIO got from a 2014 prototype to the codebase you see today. Dates are derived from git history (git log, tag dates, directory creation dates).
Eras
Genesis era (Oct 2014 – early 2016)
The first commit is 30 Oct 2014 ("Initial commit"). The project was an early Go object-storage prototype well before the minio/minio brand became a thing on the Go bucket scene. 2015 was the busiest year in the project's history with 1,986 commits, followed by 1,504 in 2016. The original layout included a contrib/linenoise/ vendored copy (an interactive shell helper) — a relic of the prototype days.
Most of the abstractions a contributor still touches today — ObjectLayer, the storage interface, the format file, S3 handlers — were laid down in this era and have been refactored ever since.
S3 fidelity era (2016 – 2018)
By 2016 the focus had shifted to becoming a credible drop-in S3 replacement. This is when bucket policy, lifecycle, versioning hooks, and the broad set of S3 verbs landed. 806 commits in 2017 and 836 in 2018 mark a more mature, slower-growing phase.
Distributed and enterprise era (2019 – 2022)
Activity accelerated again with 1,375 commits in 2020 and 1,405 in 2021 as the team built out distributed features:
- Erasure server pools (
cmd/erasure-server-pool.go): the abstraction that lets a single deployment grow by adding new pools. - Bucket replication (
cmd/bucket-replication.go): asynchronous, per-bucket replication to a peer S3 endpoint. - Site replication (
cmd/site-replication.go): cluster-to-cluster sync of buckets, IAM, and lifecycle. - ILM and tiering (
cmd/bucket-lifecycle.go,cmd/tier.go,cmd/warm-backend-*.go): expiration, transition, and warm tiers (Azure, GCS, S3, MinIO). - KMS abstraction (
internal/kms/,internal/crypto/): SSE-S3, SSE-KMS, SSE-C, with KES integration. - Decommission and rebalance (
cmd/erasure-server-pool-decom.go,cmd/erasure-server-pool-rebalance.go). xl.meta v2(cmd/xl-storage-format-v2.go): a single MessagePack-encoded file replacing the older split JSON metadata.
v3 metrics and console era (2023 – 2024)
2023 (1,141 commits) and 2024 (984 commits) brought the v3 metrics endpoints (cmd/metrics-v3*.go — 23 distinct collectors), broader admin API surface (cmd/admin-handlers-*.go), continued replication hardening, and tighter integration with the embedded MinIO Console UI from github.com/minio/console.
Maintenance wind-down (2025 – 2026)
2025 commit volume dropped sharply (201 commits). The README at README.md now states explicitly:
THIS REPOSITORY IS NO LONGER MAINTAINED.
It directs new users to AIStor (free) or AIStor Enterprise. The latest tag is RELEASE.2025-10-15T17-29-55Z (Oct 2025); the latest commit on master is from Feb 2026, mostly README clarifications.
Longest-standing features
A few subsystems have been continuously evolving since the early years:
ObjectLayer— the interface incmd/object-api-interface.gohas been the spine of the server since the first releases. Almost every refactor (server pools, sets, healing, tiering) preserves its shape.- Format file (
cmd/format-erasure.go,cmd/format-meta.go) — the on-disk format for "which drive belongs to which set" has been versioned and migrated multiple times but is fundamentally the same idea as on day one. - HighwayHash bitrot —
github.com/minio/highwayhashis used today exactly as it was when introduced for whole-file checksums.
Major rewrites
- xl.meta v1 → v2 (around 2020). The legacy split format (
cmd/xl-storage-format-v1.go) was replaced by a single MessagePack object (cmd/xl-storage-format-v2.go), withcmd/xl-storage-format-v2-legacy.gocarrying the migration code. - Storage REST → Grid. The legacy storage REST RPC (
cmd/storage-rest-*.go) is supplemented byinternal/grid/, a binary multiplex protocol for low-latency intra-cluster traffic. Both still ship. - Metrics v2 → v3.
cmd/metrics-v2.go(one giant file) was reorganised into ~23 focused collectors undercmd/metrics-v3-*.gofor the v3 endpoint family. - IAM backend pluggability. The IAM store grew from a single in-memory model to swappable backends in
cmd/iam-object-store.goandcmd/iam-etcd-store.go. - Embedded console. The standalone
mcplus a separate UI repo were unified intogithub.com/minio/console, mounted directly by the server (cmd/api-router.go).
Deprecated features
Things that were once front-and-centre but are now legacy or removed:
- Federation —
docs/federation/still exists but is documented as deprecated; the recommended path is site replication. - MinIO Gateway — older releases let MinIO front a remote S3, NAS, Azure, GCS, or HDFS backend. The gateway code was removed before the current
master. Tier backends (cmd/warm-backend-*.go) keep a more focused subset of that idea for ILM transitions only. - Linenoise contrib — an early vendored interactive shell library, gone for years.
- Deprecated server flags. Several flags in
cmd/server-main.go(e.g.--listeners,--shutdown-timeout) are markedHidden: trueand explicitly noted as deprecated.
Growth trajectory
- 2014: project starts (302 commits in two months).
- 2015–2016: peak feature development (3,490 combined commits).
- 2017–2019: maturity, ~800/year, S3 fidelity work.
- 2020–2022: distribution + enterprise features, ~1,300/year.
- 2023–2024: metrics v3, console, replication polish, ~1,000/year.
- 2025+: maintenance only; README signals retirement of the community repo.
The codebase grew from a few thousand lines in 2014 to ~350K lines of Go today across 902 source files. The project has had hundreds of contributors over its lifetime; the core has been driven for years by Harshavardhana (the author of >5,600 commits), Anis Elleuch, Klaus Post, Frederick Kautz, and Aditya Manthramurthy.
For background on specific architectural decisions see Background.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.