moby/moby
Lore
The story of the codebase, in commits and tags. Dates are derived from the git history at commit ee03fb1b2d.
Eras
The Docker Engine begins (Jan 2013)
The first commit on master is from Andrea Luzzardi on 2013-01-18. The repository was originally dotcloud/docker, then docker/docker. The first tagged version, 0.1.1, lands on 2013-03-13. Through 2013–2014 this repo is Docker — daemon, CLI, builder, and registry client all lived in the same tree.
The reorg (Mar 2014)
In March 2014 the codebase splits the runtime (later daemon) from the client. The earliest Rename runtime to daemon commit is from 2014-04-17. The legacy CLI integration tests (integration-cli/) are seeded around the same time (2014-02-25).
libnetwork extracted (2015)
Networking was originally a tangle of iptables calls inside daemon/. In 2015 it was split out into its own repo, github.com/docker/libnetwork, and re-imported as a vendored dependency. The CNM (Sandbox/Endpoint/Network) abstraction dates from this era.
SwarmKit and swarm mode (Jun 2016)
daemon/cluster/ is added in June 2016. Swarm-mode services land in Docker 1.12. SwarmKit becomes a separate repo (docker/swarmkit, later moby/swarmkit/v2) that this daemon embeds.
Moby is born (Apr 2017)
In April 2017, DockerCon, the project is renamed Moby. The repo moves to moby/moby. The README adds the "Modular, Batteries included but swappable" principles. Docker Enterprise/Community products start treating Moby as the upstream.
The containerd integration (2017–2022)
containerd was extracted from Docker as a CNCF project. Through 2017–2018 the Moby daemon adopted containerd 1.x for runtime state. The image side took longer: the containerd image service lands as a parallel implementation in July 2022 (Create the containerd image service, 2022-07-05). Both image stores ship together for years; users opt into the containerd path via features.containerd-snapshotter.
BuildKit becomes the default builder (2018–2024)
builder-next — the BuildKit integration — was added in 2018. The classic Dockerfile builder kept running alongside it. Modern Docker CLIs default to BuildKit; the classic builder remains for backward compatibility and is targeted for removal per ROADMAP.md §1.2.
Slow years (2020–2022)
Tag count drops sharply from 62 (2017) to 13 (2021–2022). The project is steady but releases are infrequent. Major work happens around rootless mode (daemon/internal/rootless/, around 2020) and overlay/networkdb hardening.
Multi-module split (2025)
The repo's biggest structural change in years lands in 2025. The Go module is split into three: github.com/moby/moby/v2 (root, daemon), github.com/moby/moby/api, and github.com/moby/moby/client. Tag streams diverge:
- Engine releases tagged
docker-vX.Y.Z. - API module tagged
api/vX.Y.Z. - Client module tagged
client/vX.Y.Z.
The github.com/docker/docker import path is deprecated; the migration is documented at the top of README.md.
Internal consolidation (Jul 2025)
In July 2025 several formerly-external packages move into the daemon tree:
Move libnetwork to daemon/libnetwork— 2025-07-14.Move builder/builder-next to daemon/internal/builder-next— 2025-07-16.Move libcontainerd/local to daemon/internal/libcontainerd/local— 2025-06-27.- A long tail of utility packages migrate from
pkg/todaemon/internal/.
These weren't new code — they were repo unifications. The result is the current layout where the daemon and its core libraries live in a single module.
Today (2026)
master ships Docker Engine 29.x at the time of this snapshot. Active focus areas (per ROADMAP.md):
- Replacing the legacy image store with the containerd-backed one entirely.
- Replacing the classic Dockerfile builder with BuildKit.
- Continuing to slim down the
Daemongod-object. - Hardening rootless mode.
Long-standing features
| Feature | Introduced | Notes |
|---|---|---|
The dockerd HTTP API contract |
2013 | Endpoints like /containers/json and /images/create are unchanged at the URL level since v1.0. The only floor change in years was raising the minimum API version to 1.24. |
json-file log driver |
2013 | Still the default. Code: daemon/logger/jsonfilelog/. |
The bridge network driver |
2013 | Pre-libnetwork; survived the libnetwork extraction. Now daemon/libnetwork/drivers/bridge/. |
The vfs graph driver |
2013 | Still used as the deterministic baseline in the graphtest test suite. |
| The classic Dockerfile builder | 2014 | Marked for replacement by BuildKit. Still ships. |
integration-cli/ test suite |
2014 | Frozen in 2018; still 80+ test files. |
Deprecated features
| Feature | Removed/Deprecated | Replacement |
|---|---|---|
aufs graphdriver |
Removed pre-25.0 | overlay2 |
devicemapper graphdriver |
Removed pre-25.0 | overlay2 |
| Schema v1 image manifests | Read-only since ~24.0 | OCI / schema v2. |
docker-distribution-only push path |
Replaced by containerd resolver on the modern path | containerd content store. |
Plain HTTP dockerd (no TLS) on TCP |
Refused since ~17.06 | TLS or Unix socket. |
github.com/docker/docker Go module |
Deprecated in v29 (Nov 2025) | github.com/moby/moby/{client,api}. |
| Classic builder (planned) | TBD | BuildKit. |
| Legacy v1 plugin protocol (planned) | TBD | Managed v2 plugins. |
Major rewrites
| Rewrite | When | What changed |
|---|---|---|
| Daemon split from CLI | 2014 | The CLI moved to docker/cli. |
| Networking → libnetwork | 2015 | iptables glue replaced by CNM + drivers. |
| Runtime → containerd | 2017–2018 | The daemon stopped managing OCI containers itself. |
| Builder → BuildKit | 2018–onward | builder-next parallel implementation, default-on for modern CLIs. |
| Image store → containerd snapshotter | 2022–onward | Two implementations live side-by-side; modern path is opt-in then default. |
| Module split + import-path move | 2025 | github.com/docker/docker → github.com/moby/moby/{v2,api,client}. |
Growth trajectory
- 2013: ~5,400 file-creating commits — the initial codebase.
- 2014–2016: explosive growth, peaking at ~10K file-touching commits in 2016 as the project matured.
- 2017–2020: refactors and removals; net file count nearly flat.
- 2025: ~4,400 — the in-tree consolidations land.
- 2026 (YTD): ~957 file-creating commits.
The contributor count hovers around 30 maintainers + reviewers (per 2,715 unique authors in MAINTAINERS) plus a much wider community of one-off contributors (git log).
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.