Dagger automates software delivery by running build, test, and deployment steps as typed functions inside containers. Pipeline logic is written in a general-purpose language against a system API rather than in shell scripts or CI-specific YAML, so the same workflow runs on a laptop, a CI server, or cloud infrastructure; the only dependency is a Linux container runtime.
The system API orchestrates containers, filesystems, secrets, git repositories, and network tunnels, and custom object types carry encapsulated state and functions across SDK and module boundaries without serialization. Every operation is keyed by its inputs and cached by content address, so a single file change re-runs only the affected steps, locally and in CI alike.
Each operation emits OpenTelemetry spans with logs and metrics. Traces render in a live terminal interface and can be exported to Jaeger, Honeycomb, or any other OpenTelemetry-compatible backend.
Features
- System API: a cross-language, typed, composable API for containers, filesystems, secrets, git repositories, and network tunnels
- SDKs in eight languages: Go, Python, TypeScript, PHP, Java, .NET, Elixir, and Rust, each generated from the API schema
- Typed artifacts: content-addressed custom object types passed across language and module boundaries without serialization
- Incremental execution: content-addressed caching keyed by inputs, shared between local runs and CI
- Portable execution: identical local and CI behaviour on any Linux container runtime, natively or through Docker Desktop on macOS and Windows
- Tracing: OpenTelemetry spans per operation, viewable in the CLI or exported to an OTel backend
- Interactive tooling: a REPL and a module ecosystem for reusing automation across projects
