github dagger/dagger v0.21.0

10 hours ago

v0.21.0 - 2026-05-22

Added

  • Automatically expose a check for each generate function by @eunomie in #12923
    Each generated check has the same name as its generate function, so dagger check can report whether generated files are out of date.
    Use dagger check --no-generate to list or run only functions explicitly marked as checks, without the generated ones.
    Toolchains can set ignoreChecks to skip creating checks for specific generate functions.
  • Add workspace lockfiles for selected lookups such as container.from and 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.
    Use dagger lock update to 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> and DAGGER_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 Service to the Helm chart by @pierreyves-lebrun + @grouville in #11993
  • Add EngineCacheEntry.dagqlCall and EngineCacheEntry.recordTypes so 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 withDirectory chains 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 found failures 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 WithSecretVariable so later calls override earlier values, fixing #13147 by @matipan in #13159
  • Fix user-default secret and env handling so empty plaintext secrets resolve correctly, .env values are not double-expanded through namespaces, and plaintext Secret defaults 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 check log telemetry is not dropped, Python module logs are not duplicated, and dagger trace honors frontend flags by @vito + @sipsma in #13114 #13153
  • Fix dagger generate --scale-out returning unusable remote Changeset objects by always running generation locally; dagger check --scale-out remains 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:set no 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 TypeAlias inside X | None, quoted and aliased annotations, and absolute self-package imports by @marcosnils + @grouville + @eunomie in #13149 #13162 #13171
  • Python SDK: exclude the broken yarl 1.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?

Don't miss a new dagger release

NewReleases is sending notifications on new releases.