Open-Source Wikis

/

Moby

/

Lore

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/ to daemon/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 Daemon god-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/dockergithub.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 MAINTAINERS) plus a much wider community of one-off contributors (2,715 unique authors in git log).

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Lore – Moby wiki | Factory