v0.21.0 - 2026-05-22
Added
- Automatically expose a
checkfor eachgeneratefunction by @eunomie in #12923
Each generatedcheckhas the same name as itsgeneratefunction, sodagger checkcan report whether generated files are out of date.
Usedagger check --no-generateto list or run only functions explicitly marked as checks, without the generated ones.
Toolchains can setignoreChecksto skip creating checks for specificgeneratefunctions. - Add workspace lockfiles for selected lookups such as
container.fromand Git refs by @shykes + @alexcb + @grouville + @tiborvass + @eunomie in #12046 #13094
Locking is opt-in with--lock live,--lock pinned, or--lock frozen: live mode resolves and records live values, pinned mode prefers recorded pins while resolving the rest live, and frozen mode only resolves from.dagger/lock.
Usedagger lock updateto refresh entries already recorded in.dagger/lock; it now creates the file when missing.
This also fixes remote Git tree cache keys so cache reuse follows the actual checkout inputs. - Add an interactive tests view to the TUI, plus compact test summaries for pretty, plain, logs, dots, and report progress modes by @vito in #13073
- Add experimental
--x-release=<ref>andDAGGER_X_RELEASE=<ref>support for running a command against an unreleased Dagger build from a GitHub ref, fixing #12996 by @tiborvass in #13156 - Add a configurable Kubernetes
Serviceto the Helm chart by @pierreyves-lebrun + @grouville in #11993 - Add
EngineCacheEntry.dagqlCallandEngineCacheEntry.recordTypesso cache entries expose the producing DagQL call and all represented storage record types for inspection and GC filtering by @sipsma in #13207 - Show the Dagger Cloud trace URL when using the logs frontend by @marcosnils in #13105
- Dang SDK: add support for local types that shadow Dagger core types, early
return, self-calls, order-independent declarations, and stricter nullability/type checking by @vito in #13184
Changed
- Migrate caching to DagQL and remove the BuildKit solver backend, making DagQL responsible for cache lookups, persistence, and pruning by @sipsma in #11856
- Improve engine performance and memory use by reducing bbolt/containerd metadata overhead, lazily creating containerd operation leases, reusing pooled CNI namespaces for default execs, and batching long
withDirectorychains instead of materializing them quadratically by @sipsma in #13117 #13123 #13144 #13124 - Deduplicate equivalent in-flight DagQL calls across clients in the same session and fall back to same-session secret/socket attachables when the original client binding is gone by @sipsma in #13118
Fixed
- Fix enum argument defaults so they appear correctly in schema output and CLI help by @kpenfound in #13068
- Fix module loading and type generation failures caused by stale handle-form module IDs and nested client session races, replacing
session ... not foundfailures with the intended behavior or original error by @sipsma in #13108 #13119 - Fix bound service failures so dependent execs and container-backed services see the service exit as the cause while interactive terminals stay open by @vito in #13099
- Fix remote Git checkout behavior so cached trees can be reused after cache pruning by @sipsma in #13141
- Fix Changeset merge cleanup flakiness by disabling Git auto-maintenance in Dagger's temporary merge repositories by @sipsma in #13121
- Fix
WithSecretVariableso later calls override earlier values, fixing #13147 by @matipan in #13159 - Fix user-default secret and env handling so empty plaintext secrets resolve correctly,
.envvalues are not double-expanded through namespaces, and plaintextSecretdefaults are scrubbed in console output; fixes #12855 and closes #12014 by @sipsma + @marcosnils + @tiborvass in #13163 #13160 #13177 - Fix telemetry and replay output so
dagger checklog telemetry is not dropped, Python module logs are not duplicated, anddagger tracehonors frontend flags by @vito + @sipsma in #13114 #13153 - Fix
dagger generate --scale-outreturning unusable remoteChangesetobjects by always running generation locally;dagger check --scale-outremains supported by @eunomie in #13190 - Fix toolchain customizations so they propagate when toolchain functions are called through another module function by @suprjinx in #13176
- Dang SDK: fix panics, initialization-race typechecking failures, and ID argument handling by @tiborvass + @vito in #13098 #13103 #13150
- Java SDK: fix version updates so
mvn versions:setno longer performs unnecessary dependency/plugin resolution, preventing Maven Central 429 failures; fixes #13174 by @dagger-codex[bot] + @tiborvass in #13198 - Python SDK: fix static module analysis regressions from the AST analyzer cutover, including inherited functions, aliased decorators and fields,
@staticmethod, type aliases, constants/defaults,Annotated,Optional,Union, and relative imports; fixes #13097 and #13089 by @eunomie in #13095 - Python SDK: fix more AST analyzer cases for
TypeAliasinsideX | None, quoted and aliased annotations, and absolute self-package imports by @marcosnils + @grouville + @eunomie in #13149 #13162 #13171 - Python SDK: exclude the broken
yarl1.24.1 release from the dependency range by @tiborvass in #13189 - Rust SDK: fix list-of-object fields so generated clients load each object by ID instead of returning an incorrect single wrapped selection by @wingyplus in #13000
What to do next?
- Read the documentation
- Join our Discord server
- Follow us on Twitter