CI that keeps up.
Distributed cache v2Dagger Cloud engines will share single cached results, not full disks. The scheduler sends each pipeline to an engine that already has what it needs.
Test splittingDagger will split large test suites across engines. It balances the work with data from telemetry: resource use of each test, input costs and cache state.
Smart checksDagger will run only the checks that a change affects. It records which workspace files each artifact reads, so you do not maintain your own filter scripts.
Bring your own computeConnect your own machines to Dagger Cloud, in your data center or in your cloud account. Dagger Cloud schedules your pipelines on them, and your code, cache and secrets stay in your infrastructure.
arm64 Cloud EnginesCloud Engines will also run on arm64 machines. Build and test arm64 software natively, with no emulation.
Oct 22, 2026v1.0 beta
Test-native CIDagger sees each of your tests, not only the job that runs them. When a test fails, you see which test, and you run only that test again.
Much fasterFaster containers, file operations, cache and module loading. All official modules and SDK runtimes now run on Dang, our fast scripting language.
Self-orchestrating testsA test can call Dagger modules to start its own dependencies, such as a database. It runs the same way in development and in CI.
In standalone Go programs, dag.Container() becomes core.NewContainer().
Branch filteringA module can find out whether it runs on the main branch. Deploy to production from main, and to a preview environment from a pull request.
Nested pipelines show in the trace under the step that started them.
Typed artifactsDagger discovers your project as typed artifacts: source code, containers, binaries, even tests. Use test results as a pre-merge or post-merge gate, run a preview environment, or inspect results in an interactive shell.
Programs in a container can call Dagger. To prevent this, set disableDaggerInDagger: true.
Dev shellsdagger shell opens a shell in any container of your workspace. dagger check -i opens a shell where a command failed.
Remote executionRun any pipeline on a remote engine: SSH, Kubernetes, or Dagger Cloud. Dagger streams your local files, secrets and terminal as needed.
Official modulesA catalog of modules for common tools, such as Go, pytest and ESLint. Dagger recommends modules for your repository, and you use their checks immediately.
dagger generate runs SDK codegen ahead of time. Python modules start 35% faster.
To migrate a module, run dagger module migrate.
Fix: persistent cache lookup errors.
Go SDK: codegen removes the bindings of removed dependencies.
Pipelines can read Git history without git.
Git arguments with defaultPath are null outside a Git checkout.
Image pulls, layer unpacking, Git fetches, downloads and file syncs show their progress.
WorkspacesOne dagger.toml file configures Dagger for your repository. Modules can find your projects and read their native configuration.
Cloud EnginesDagger engines that we run for you, with scale-out, distributed cache and observability. Pay only for the resources that you use. Repeat work costs 5× less.
Cloud ChecksCloud Checks runs your checks on Cloud Engines each time you push to GitHub or open a pull request: no additional CI configuration or third-party service needed.
Sep 30, 2026v0.21.10
Fix: CurrentModule().Source() with private Git dependencies.
Engines can send CPU and memory metrics to OpenTelemetry.
Fix: custom service hostnames across modules.
Jul 29, 2026v0.21.8
Dockerfile builds keep their layer cacheA COPY step now depends only on the files that it copies. A change to another file, even .git, no longer invalidates the layers below it.
Silent sessions use much less memory.
DAGGER_SILENT now works like --silent.
--x-release keeps _EXPERIMENTAL_DAGGER_RUNNER_HOST.
Faster changeset comparison on large directories.
May 22, 2026v0.21
Run any Dagger release on the fly--x-release=<ref> runs a command with another Dagger release, with nothing to install. Use head for the latest dev build.
Test-aware TUIThe TUI has a tests view: the test tree, with status, durations and logs. It works with dagger check, with no setup.
A lockfile for your CI.dagger/lock pins image tags, Git branches and HTTP fetches to exact values. Your pipeline reproduces exactly, or fails clearly.
`dagger check` catches stale generated codedagger check runs your generators again. If the generated files are out of date, the check fails.
Project Theseus: removing BuildKitDagger replaces the BuildKit solver with its own engine. This is the largest engine change since the project started.
Fix: epoch-zero timestamps in Git checkouts.
Python SDK: type aliases in unions.
Long withDirectory chains are 22–29% faster.
Fix: remote Git fetches after a cache prune.
The Python SDK resolves type aliases correctly.
Fix: hang when a bound service exits.
Enum arguments show their default values in --help.
dagger generate uses much less memory.
Fix: race in nested client sessions.
Fix: toolchain function cache bugs.
dagger functions hides the with field.
Test-aware CIDagger Cloud shows each test from your traces, with status, logs and duration. Any framework that emits OpenTelemetry test attributes works, with no setup.
Shareable trace links from the CLIEach trace in the Cloud dashboard has a dagger trace <id> command. Run it to replay the trace in your terminal, or share it.
Cloud Engines: scheduler v2A new engine allocation scheduler is now the default for Cloud Engines. It assigns compute slots more efficiently and supports continuous per-customer tuning based on run history.
Automatic cache volume cleanupStale cache volumes on Cloud Engines are now cleaned up automatically. No manual intervention required — disk usage stays predictable as your team scales.
Cloud Checks: unified engine poolCloud Checks no longer uses a separate engine pool to scan modules. Module loading now runs on the same Cloud Engines that execute your pipelines, reducing overhead and simplifying the infrastructure.
Apr 15, 2026v0.20.6
The dashboard rerun button works again.
Run details show the engine version.
Fail-fast mode for dagger check--failfast stops the other checks when one fails, so that you and your agents get the first failure immediately.
dagger updagger up starts all services in your workspace, in parallel, with their ports tunneled to your host.
Go SDK improvementsGo codegen writes one file for each dependency, not one large dagger.gen.go.
Module constructors can take secret and string arrays with local defaults.
Container.from caches image layers correctly on new engines.
COPY --exclude and COPY --parents now work in Dockerfiles.
Fix: TUI output in tmux and Neovim.
chown accepts user and group names.
Fix: literal dotenv and CLI values were expanded.
Mar 19, 2026v0.20.3
Fix CLI version check on fresh installsThe CLI update checker now fetches git tags before comparing versions, fixing a false-positive update notification on fresh installs.
Mar 19, 2026v0.20.2
Suppress update notifications in CISet DAGGER_NO_UPDATE_CHECK=1 to skip the CLI version check entirely — no network request, no stderr noise. Useful in CI environments where CLI versions are pinned.
Vault OIDC authenticationThe Vault secret provider can log in with OIDC in your browser. Dagger caches the token until it expires.
New terminal UIA ground-up rebuild of the interactive TUI. Output uses your terminal's native scrollback — scroll freely, click links, select text — no more fixed viewport. Also adds inline search with /.
New secrets provider: GCP Secret ManagerRead secrets from Google Cloud Secret Manager with gcp://secret-name.
Dang: a Dagger-native languageA scripting language for Dagger, with a native runtime in the engine. It needs no codegen and starts almost immediately.
Fix: the TUI took focus from form inputs.
Missing cached Git auth secrets no longer cause fatal errors.
Module dependencies pinned by branch or tag name resolve correctly again.
Containers run with --init, so zombie processes are removed.
The CLI no longer exits with code 0 when a command fails.
Fix: crash with a mounted Git worktree.
Fix: incorrect module resolution.
Mar 5, 2026v0.20.1
Service API honors Docker healthchecksServices can now use Docker HEALTHCHECK commands to determine readiness, replacing the default port-based check. Define healthchecks in a Dockerfile or with the new withHealthcheck() API.
Faster Git remote fetchesRemote Git fetches now skip tag transfer by default, cutting cold fetch time by ~80% on tag-heavy repos. A bounded retry handles servers that reject direct SHA fetches.
Faster dagger check and dagger generate listingdagger check -l and dagger generate -l now batch queries into a single GraphQL request instead of per-item fetches, reducing roundtrip overhead especially on remote engines.
Fix TypeScript codegen with glob patterns in doc stringsGenerated TypeScript code no longer has invalid syntax when doc strings contain glob patterns like **/*.go. The */ in globs was prematurely closing JSDoc block comments.
Improved Changeset APIThe Changeset API now supports creating empty changesets and merging arrays of them in one call. When a function returns multiple changesets, the CLI merges them and offers one combined apply prompt.
More reliable TypeScript SDK generationdagger generate now succeeds even when sdk/typescript/node_modules is present, avoiding oversized patch failures during TypeScript SDK generation.
Better error output in dagger runWhen a run fails without span-linked origins, the CLI now shows subprocess output instead of suppressing it as already displayed.
Faster Java SDK buildsThe Java SDK runtime now invokes Maven with --threads 1C by default, using one thread per CPU for better build throughput on multi-core machines.
Feb 26, 2026v0.20
Dockerfile ONBUILD now publishes correctlydirectory.dockerBuild().publish() now preserves ONBUILD instructions in published images.
More reliable Git SSH auth and persistent cacheDagger now handles mixed SSH agent socket paths on the same repo more reliably, and nullable return types no longer skip persistent cache handling.
Hardened local metadata storageEngine bbolt settings were aligned across metadata DB paths to avoid a known panic path under NoSync, reducing crash risk in heavy-load and shutdown-edge cases.
Logs-only progress modeA logs-focused progress frontend streams output directly with no dot noise. It is easier to scan in terminal-first workflows and CI logs.
Targeted local-cache pruningManual local-cache pruning now supports explicit space thresholds, so teams running with automatic GC disabled can prune predictably without changing global policy.
More reliable GitHub Checks integrationGitHub Checks show as queued immediately, keep running when the GitHub API is slow, and link to their traces.
Easier GitHub source setup for Google-authenticated teamsTeams that sign in with Google can connect GitHub repositories directly.
Checks keep running during GitHub outagesDagger Cloud checks keep running when GitHub is slow or down.
Feb 5, 2026v0.19.11
Dagger GenerateWe added dagger generate for code and config generation workflows. Mark generator functions in your module, return Changesets, and Dagger runs and merges them in one pass.
Faster module loading in large monoreposReduced overhead when loading modules in very large trees. This improves startup and iteration speed where monorepo scale used to dominate runtime.
SSH mounts in Dockerfile supportDirectory.dockerBuild now supports RUN --mount=type=ssh. Existing Dockerfiles that pull private Git repos or packages work without extra wrappers.
AWS secret providersDagger now supports AWS Secrets Manager and Parameter Store as first-class secret providers, so modules can consume cloud-managed secrets directly.
Go SDK got more Go-nativeGo SDK generation now leans more on external libraries and cleaner module boundaries, with deterministic codegen improvements introduced earlier in the series.
TypeScript SDK improvementsTypeScript workflows got smoother across live telemetry, test tracing, and generated client behavior. We also fixed multi-client tsconfig.json conflicts.
Jan 14, 2026v0.19.10
Code generation uses less memorydagger develop --recursive now handles large module graphs with much lower memory pressure, which makes codegen workflows more stable at scale.
Dagger Cloud v3Dagger Cloud v3 delivers a new WebAssembly-based UI with better trace navigation, clearer error surfacing, and much faster handling of large traces and log volumes.
Jan 7, 2026v0.19.9
File metadata APIdirectory.stat() and container.stat() expose metadata directly through the API, removing brittle shell parsing for common file-inspection tasks.
No more surprise Git credential popupsDagger now disables Git askpass prompts to avoid unexpected IDE credential dialogs. If credentials are missing, it fails early with a clear error instead.
Dec 5, 2025v0.19.8
Faster file copiesWithDirectory and WithFile were optimized to avoid unnecessary disk copies in more cases, cutting avoidable I/O overhead in common workflows.
Azure DevOps Server module loadingDagger can now load modules from self-hosted Azure DevOps Git servers, which unblocks teams running enterprise Git infrastructure outside GitHub and GitLab.
JSON APILightweight JSON edits are now practical inside Dagger pipelines. Instead of shelling out to jq, read, modify, and write JSON through typed APIs.
Nov 20, 2025v0.19.7
Dagger Checksdagger check gives module developers one command to run validation anywhere: local dev, CI, and agents. Define checks once, run them consistently everywhere.
Nov 5, 2025v0.19.5
Faster system execution under loadSystem internals now do much less disk syncing and lock contention in hot paths, improving throughput for heavy concurrent workloads.
Oct 30, 2025v0.19.4
Function Cache ControlBefore this change, Dagger cached all system functions but not module developers' own functions. We couldn't safely infer purity from side effects, so default caching could have broken behavior.
Sep 30, 2025v0.19
Import and export local container imagesLoading and saving images between your host and Dagger became a first-class API flow, replacing manual docker import and docker export glue.
Changeset APIThe new Changeset type lets module developers return a directory diff as an artifact, so generated files can be previewed and applied cleanly from the CLI.
Container.combinedOutputNeed stdout and stderr exactly as emitted? Container.combinedOutput returns a single merged stream, so module developers can handle real command output without stitching streams back together.
Address APIThe new address API exposes Dagger's CLI-style reference parsing to modules, so module developers can turn user input into typed objects without reimplementing parsing logic.
Cloud.traceURLModules can now fetch the current Dagger Cloud trace URL directly. This makes it easy to publish clickable run links in logs, summaries, and CI notifications.
Git reference introspection APIsGit-heavy modules got better primitives for reasoning about repository state: gitRepository.url, gitRepository.branches, gitRepository.latestVersion, and gitRef.commonAncestor.
Run Dagger without DockerDagger CLI added first-class support for Podman, nerdctl, Finch, and Apple's container tool, so the system can start with whichever runtime is already installed.
Apr 25, 2025v0.18.5
TypeScript SDK cold starts cut by ~50%TypeScript SDK initialization got substantially faster through bundling and runtime provisioning improvements, reducing iteration friction during local development.
Mar 31, 2025v0.18
Dagger ShellDagger Shell brought bash-style syntax to Dagger's typed, container-native execution model. You get shell ergonomics with cached, reproducible pipelines and sandboxed-by-default execution.
Mar 24, 2025v0.17.1
TypeScript SDK now supports DenoThe TypeScript SDK added Deno runtime support, extending cross-runtime compatibility beyond Node and Bun for module developers.
Feb 19, 2025v0.16
Java SDKJava developers got an SDK path to define Dagger workflows and module functions directly in Java.
PHP SDK (Community)The PHP ecosystem gained a community-maintained SDK, making it possible to author Dagger modules and automation workflows in native PHP.
1Password secret providerDagger added direct integration with 1Password so secrets can be resolved at runtime from your existing password manager, instead of being preloaded manually.
HashiCorp Vault secret providerHashiCorp Vault integration landed as a native secret provider, enabling secure secret retrieval directly inside pipeline execution.