mrkeyoor.com_
Sun 20 Sept 17:47 UTC
Automationevaluationupdated 20 Sept 2026

dagger review

Dagger is an automation engine that lets you write build, test, and release workflows in normal programming languages and run them on a local container runtime, CI runner, or Dagger Cloud. It aims to keep the same pipeline logic across laptops and hosted environments while caching repeated work and tracing each operation.

Verdict

Our Dagger checkout installed 743 packages and built in 333 seconds, then 5 of 78 tests failed, so putting it beneath every pipeline calls for a staged trial. It is a strong fit when several repositories repeat the same container-heavy CI logic and developers need to run that logic locally. A short build script does not justify this 173 MB codebase, and incomplete self-hosting docs weaken the case for teams avoiding Dagger Cloud.

We ran it

Lab card: what happened when we ran daggerScreenshot of dagger (dagger.io)
Install✓ · 102s743 packages
Build✓ · 333s
Tests✗ · 152s73 passed · 5 failed of 78 (go test)
Repo15610 files~1,995,447 lines of source · 173 MB · 9 CI workflows

Answers from our run

Does dagger build from source?

Dependencies installed in 102 seconds (743 packages), and the build succeeded in 333 seconds. We cloned commit 3617e2a into a clean Debian container with 3 CPUs and no project-specific setup.

Do dagger's tests pass?

Not all of them: 73 of 78 passed and 5 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use dagger?

Small projects that only need a few shell commands: Dagger adds an engine, generated APIs, modules, and a container runtime to the maintenance surface.

What are the alternatives to dagger?

Task, Tekton Pipelines, Jenkins. Our Dagger checkout installed 743 packages and built in 333 seconds, then 5 of 78 tests failed, so putting it beneath every pipeline calls for a staged trial.

Setup3/5Released CLI is simple; source build is large and 5 tests failed
Docs4/5Good quickstarts and API references; self-hosting is a TODO
Community5/516,275 stars with source and issue activity on September 20
Maturity4/5Broad CI engine and SDKs, still pre-1.0 with active change

Who it’s for

Platform teams replacing duplicated CI YAML across several repositories.
Developers who want to run the same containerized checks before and after pushing code.
Organizations willing to maintain pipeline logic as typed application code.
Teams that can benefit from content-addressed caching and OpenTelemetry traces across long build graphs.

Who it’s NOT for

Small projects that only need a few shell commands: Dagger adds an engine, generated APIs, modules, and a container runtime to the maintenance surface.
Hosts that cannot provide a Linux container runtime: macOS and Windows use Docker Desktop or a similar product.
Teams expecting a tiny source contribution loop: our checkout was 173 MB, installed 743 packages, and took 333 seconds to build.
Buyers who require a green source suite in an unprivileged container: 5 of 78 tests failed in our run, and the supplied log tail did not expose their causes.
Operators who need complete self-hosting instructions before adoption: the current self-hosting documentation page contains only TODO.
Organizations unwilling to connect GitHub and a Dagger Cloud account: those are prerequisites for Cloud Checks, although local execution does not require them.

Setup reality

At commit 3617e2a, our sandbox installed 743 packages in 102 seconds and built in 333 seconds. Tests failed after 152 seconds: 73 passed and 5 failed out of 78. The checkout contained 15,610 files, about 1,995,447 source lines, and occupied 173 MB.

Using a released CLI is much lighter than building this monorepo, but it still needs a Linux container runtime. macOS and Windows rely on Docker Desktop or a similar product. Registry pushes, Git access, deployments, and external secret providers need their respective credentials; local pipeline execution does not require Dagger Cloud.

The repository has 9 CI workflow files, no Dockerfile, and no top-level tests directory. The failure tail lists several passing Go packages followed only by FAIL, so it does not support a diagnosis. Cloud Checks additionally require a GitHub repository, a Dagger Cloud account, and repository authorization.

Eight SDKs make pipeline logic ordinary code

Dagger exposes its automation API through 8 SDKs: Go, Python, TypeScript, PHP, Java, .NET, Elixir, and Rust. A pipeline can orchestrate containers, files, secrets, Git repositories, services, and network tunnels with typed functions instead of provider-specific CI steps. The same function runs from a developer machine or a hosted runner, which is useful when teams are tired of debugging one workflow locally and a different one after push.

That model suits substantial delivery systems better than tiny repositories. Types and generated bindings make large workflows navigable in an editor, but they also add concepts that a three-command shell script does not need. Dagger's module catalog and reusable objects can reduce repetition across projects. They create another dependency surface too, so module versions and generated code belong in the same review process as the application.

One Linux container runtime is the portability contract

One Linux container runtime is the base requirement in the README. Dagger runs natively on Linux, while macOS and Windows use Docker Desktop or a similar product. Work executes in containers and operations are keyed by their inputs, allowing unchanged work to reuse content-addressed cache results. That makes local and CI behavior closer, provided both environments expose the same source, secrets, network access, and runtime capabilities.

The engine does not erase environmental differences. A deployment still needs registry credentials and access to its target. Private Git sources need authentication. Host files and sockets must be granted deliberately. Dagger provides typed ways to pass those inputs, but reproducibility still depends on pinning images, declaring files, and controlling network calls. A function that fetches an unpinned remote artifact can drift no matter how tidy its API looks.

What happened when we ran it

Our sandbox installed 743 packages in 102 seconds at commit 3617e2a, then completed the build in 333 seconds. The test command ran for 152 seconds and exited with code 1: 73 tests passed and 5 failed out of 78. The checkout contained 15,610 files, roughly 1,995,447 lines of source, and occupied 173 MB before the installed dependencies.

The supplied failure tail shows several Go packages passing, including version, filesystem, Git, lockfile, and pattern-matching utilities. It ends with only FAIL, without the failed test names or error messages. We therefore cannot say whether the 5 failures came from missing privileges, network access, a regression, or something else. The defensible finding is simple: this commit built, but its available suite did not pass in our fresh 3-CPU, 8 GB unprivileged container.

Cloud Checks trade workflow files for account setup

Cloud Checks can run after each push or pull request without a CI workflow file. The setup command reads the repository from the Git origin, then asks for a Dagger Cloud account, an organization, and GitHub repository access. Once connected, the same Checks run locally through dagger check and on Cloud Engines. That is appealing for teams that want one execution model and are comfortable adding a managed control plane.

Local use remains separate from that service. You can install the CLI, initialize dagger.toml, add recommended modules, change their settings, and run Checks on your own container runtime. The documentation is clear about Cloud Checks being optional. Keep that line visible in an adoption plan: local portability is a product strength, while managed checks introduce an account, repository authorization, and a vendor service into the path.

Secret values stay outside container layers and cache keys

Dagger's current secret guide accepts values from environment variables, files, command output, Vault, 1Password, AWS, Google Cloud, and the Linux Secret Service. The API passes references rather than plain values through a workflow. The documentation says secrets are redacted from logs, excluded from cache keys, and kept out of container layers. Those safeguards are much better than copying a token into an environment-building step.

Provider access still has to be configured on the host or runner. Vault needs its address and an authentication method; AWS and Google Cloud use their normal credential chains; command-backed secrets execute a host command. Review which process can invoke each provider and what the resulting token can do. Redaction protects output, while least-privilege credentials limit the damage if the workflow itself is wrong.

The self-hosting page is still one TODO

The current self-hosting page contains a heading and TODO, even though the main README says Dagger can run on dedicated cloud infrastructure. That documentation gap is a real purchasing problem for an operator deciding how engines are installed, upgraded, isolated, monitored, or recovered. Source code and reference pages can answer pieces of that question, but a platform team should not have to reverse-engineer its production runbook from a 1,995,447-line repository.

Dagger does include 9 CI workflow files, yet our scan found no Dockerfile or top-level tests directory. Those signals do not prove weak engineering, since a project centered on its own engine can build itself differently and tests may sit beside packages. Combined with the failed lab suite, they do argue for a proof of concept that covers engine lifecycle and recovery, not only a successful dagger check demo.

September pushes outweigh the August v0.21.9 tag

Release v0.21.9 was published on August 26, 2026, while the repository was pushed on September 20. GitHub listed 16,275 stars and 202 combined issues and pull requests when fetched. September activity included engine snapshots, remote cache work, workspace behavior, generated bindings, CLI changes, and MCP code. The project is plainly active; the combined open count is workload, not a count of confirmed defects.

Version 0.21.9 fixed session teardown, cache-metadata growth, registry authentication cache reuse, and several filesystem behaviors. Those fixes show attention to the operational seams that matter in a long-running engine. They also show the breadth a buyer inherits. Start with one expensive pipeline, compare local and CI results, and decide whether saved duplication pays for the engine, module, cache, and upgrade work before expanding it across the organization.

Alternatives

ProjectWhat it isPick it when
Task gh↗A cross-platform task runner driven by a compact YAML file.pick this instead when you need repeatable local commands without a container execution engine or generated SDK.
Tekton Pipelines gh↗A Kubernetes-native system for defining and running CI pipeline resources.pick this instead when Kubernetes is already the execution control plane and cluster-native resources are desirable.
Jenkins gh↗A self-hosted automation server with a long-established plugin ecosystem.pick this instead when you need a central CI server and existing plugins matter more than local-first pipeline code.

What people are saying

  1. [github-trending] dagger/dagger

Sources

  1. Dagger README
  2. Dagger quickstart
  3. Dagger Cloud Checks guide
  4. Dagger secrets guide
  5. Dagger self-hosting page
  6. Dagger v0.21.9 release
  7. Dagger MCP server source

More automation reviews

youtube-dl-gui · mcp-server-cloudflare · agent-desktop · yichen-skills · py12306 · goldie · the whole board →