Noureddine RAMDI / Inside Moby: the modular foundation for container tooling and the evolving Go SDK

Created Sat, 02 May 2026 20:07:04 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

moby/moby

The Moby project is the open-source backbone behind Docker’s container ecosystem, but it’s much more than just Docker’s codebase. It aims to provide a modular toolkit for assembling container-based systems, emphasizing reusable components and a clear separation of concerns. This approach enables developers and vendors to build custom container solutions rather than being locked into a monolithic platform.

the modular foundation for container tooling

At its core, Moby is an open-source initiative led by Docker to foster innovation and community collaboration in container technology. The project supplies a set of foundational components including container build tools, container runtimes, image registries, and management APIs. These components are designed to be combined like Lego pieces, allowing developers to swap or extend parts depending on their needs.

The project is written primarily in Go, leveraging Go modules to maintain code modularity and versioning. The architecture separates concerns into distinct packages, such as the client SDK (github.com/moby/moby/client) and the API types (github.com/moby/moby/api). This separation supports better maintenance, testing, and independent evolution of components.

Moby serves as the upstream for Docker products, meaning Docker builds on top of Moby’s open source components. However, the project explicitly encourages other projects and vendors to adopt and contribute to Moby, fostering a broader container ecosystem.

modular go sdk and strategic evolution

One of the more interesting technical aspects of Moby is the clear migration away from the older github.com/docker/docker Go module towards a more modular API client design under github.com/moby/moby/client and github.com/moby/moby/api. This migration is reflected in the README with explicit instructions on replacing import paths.

This shift signals a strategic architectural decision: instead of a monolithic client library, the SDK is split into independently versioned, modular components. This improves developer experience (DX) by allowing finer-grained updates and reducing dependency conflicts.

The tradeoff here is the introduction of breaking changes in the new v29 version of the SDK, which includes renaming methods, moving types, and changing option structs. While this adds friction for maintainers upgrading, it’s a necessary step towards a cleaner, more maintainable codebase.

The code quality in Moby reflects typical large-scale open source infrastructure projects: it’s pragmatic, with a strong focus on modularity and backward compatibility strategies. The API design prioritizes usability and extensibility, supporting a range of container orchestration and runtime scenarios.

explore the project

The Moby repository README is the main entry point for understanding the project’s scope and usage. It clearly states the relationship with Docker and the community-driven maintenance model.

The README includes:

## Relationship with Docker

The components and tools in the Moby Project are initially the open source components that Docker and the community have built for the Docker Project.
New projects can be added if they fit with the community goals. Docker is committed to using Moby as the upstream for the Docker Product.
However, other projects are also encouraged to use Moby as an upstream, and to reuse the components in diverse ways, and all these uses will be treated in the same way. External maintainers and contributors are welcomed.

The Moby project is not intended as a location for support or feature requests for Docker products, but as a place for contributors to work on open source code, fix bugs, and make the code more useful.
The releases are supported by the maintainers, community and users, on a best efforts basis only. For customers who want enterprise or commercial support, Docker Desktop and Mirantis Container Runtime are the appropriate products for these use cases.

### Migrating from `github.com/docker/docker`

Replace the old import paths:

```diff
- import "github.com/docker/docker/client"
+ import "github.com/moby/moby/client"

- import "github.com/docker/docker/api/types"
+ import "github.com/moby/moby/api/types"

Note that v29 includes many breaking API changes (option structs, renamed methods, moved types). See the v29.0.0 release notes for the full list of Go SDK changes.


Developers interested in using or contributing should start by reviewing the README and the Go module structure to understand how the client and API packages interact. Exploring the `client` package reveals how the Docker Engine API is wrapped and exposed in Go, while the `api` package contains the data types and request/response structures.

## verdict

Moby is a solid foundation for anyone looking to build or customize container tooling beyond the standard Docker CLI or runtime. Its modular architecture and open governance invite contributions and experimentation.

The transition to a modular Go SDK client is a welcome move for developers needing a stable and flexible API surface, but the breaking changes in v29 mean some care is required when upgrading existing integrations.

For those focused on enterprise support and user-friendly products, Docker Desktop or commercial runtimes remain the go-to options. But for engineers who want to dive under the hood, extend container runtimes, or create bespoke container management solutions, Moby offers a robust and evolving codebase with active community input.

Its tradeoffs — community-driven best effort maintenance, occasional breaking API shifts — are typical for upstream infrastructure projects. The project is worth understanding even if you don’t adopt it directly, as it shapes the future of container ecosystem tooling.

## Related Articles

- [Hatchet: durable background task orchestration with Go and Postgres](https://ramdi.fr/github-stars/hatchet-durable-background-task-orchestration-with-go-and-postgres/) — Hatchet offers a durable, fault-tolerant background task and workflow engine built with Go and Postgres. It supports com
- [awesome-scalability: a curated guide to real-world scalability patterns and principles](https://ramdi.fr/github-stars/awesome-scalability-a-curated-guide-to-real-world-scalability-patterns-and-principles/) — awesome-scalability compiles expert articles and case studies on building scalable, reliable large-scale systems, offeri
- [Gin: a zero-allocation, high-performance Go web framework for REST APIs](https://ramdi.fr/github-stars/gin-a-zero-allocation-high-performance-go-web-framework-for-rest-apis/) — Gin is a Go HTTP web framework known for its zero-allocation router and up to 40x faster performance. It balances speed 
- [MLflow: unified AI engineering for LLMs and traditional machine learning](https://ramdi.fr/github-stars/mlflow-unified-ai-engineering-for-llms-and-traditional-machine-learning/) — MLflow offers a unified open-source platform managing lifecycle and observability for both LLM-based AI agents and tradi
- [Awesome LLM Apps: a practical collection of runnable AI agent and RAG templates](https://ramdi.fr/github-stars/awesome-llm-apps-a-practical-collection-of-runnable-ai-agent-and-rag-templates/) — Awesome LLM Apps offers 100+ runnable AI agent and RAG templates for quick LLM app development. It supports multiple pro

---

**→ GitHub Repo:** [moby/moby](https://github.com/moby/moby) ⭐ 71,492 · Go