All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, adheres to Semantic Versioning, and is generated by Changie.
-
Improved TUI progress visualizer by @vito in dagger#10468
-
Added
Ehotkey in TUI for-E/--no-exitat runtime by @vito in dagger#10511 -
Add support for using engine-wide default GC policy when triggering manual local cache prunes by @sipsma in dagger#10505
The manual prune API now supports an optional arg to enable honoring the engine-wide default automatic GC configuration. e.g.dagger core engine local-cache prune --use-default-policy -
New
container.WithSymlinkanddirectory.WithSymlinkAPI for creating symbolic links by @alexcb in dagger#10435 -
Unbundle the SDK interface to support partial implementation by @TomChv in dagger#10525
When you implement a custom SDK, you can now choose to just implement part of theSDKinterface depending on your needs. That means:dagger developno longer fails if your SDK just implement theRuntimeinterface, it will simply not callCodegenif not defined.dagger callanddagger functionsgive a clear error message if it's not supported by the SDK.
See dagger#7707 for more information.
- Fix occasional "no such file or directory" errors during filesync caused by concurrent syncs by @sipsma in dagger#10541
- Update go to 1.24.4 by @jedevc in dagger#10553
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
gc.sweepSizesetting forengine.jsonby @jedevc in dagger#10420
This setting allows controlling how much data to clear in a single GC sweep.
- Add
noCachearg toHost.directoryto auto reload contextual directories in persistent shell/prompt sessions by @cwlbraa in dagger#10342
- shell: fixed
_prefix not being reserved for interpreter builtins by @helderco in dagger#10452 - shell: fixed parsing arguments with list of objects by @helderco in dagger#10441
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- llm: static tool scheme by @vito in dagger#10366
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Ensure
gitAPI calls consistently respect proxy settings by @jedevc in dagger#10352 - Lazily load LLM API keys by @cwlbraa in dagger#10357
- Add new optional parameters to
Query.httpby @jedevc in dagger#10317nameallows overriding the filename to downloadpermissionsallows setting the permissions on the resulting fileauthHeaderallows passing a secret in theAuthorizationHTTP header
- Read the documentation
- Join our Discord server
- Follow us on Twitter
-
Cache URI-based secrets based on their plaintext value rather than the URI by @sipsma in dagger#10311
Previously, the "cache key" for URI-based secrets (e.g.env://FOO,file:///some/path, etc.) was the URI string. This meant that operations including the secret (e.g. as an environment variable in a Container) would be cached based on the URI value. If two secrets from different clients had the same URI but different plaintext values, cache for operations that include them would be shared.In many cases, even when URIs were the same, the plaintext of secrets could be meaningfully different, which made this behavior surprising and lead to unexpected results.
Now, URI-based secrets are cached based on secure hashes of their plaintext value. Two secrets that have the same URI but different plaintext values will be cached separately, and operations that include them will not share cache.
However, there are cases where users do want secrets with different plaintexts to share cache, e.g. secrets that rotate in plaintext value frequently but aren't meaningfully different and thus shouldn't bust the cache of operations that include them.
To continue supporting those use cases, there is a new optional
cacheKeyargument toSecretthat can be used to specify a custom cache key. If provided, the cache key will be used instead of the default plaintext-based cache key, allowing any secrets sharing that cache-key to be cached together.SDKs can provide this as an optional argument to the
Secretconstructor. Other example usages:dagger shell:
dagger shell -c "some-function --secret-arg $(secret env://FOO --cache-key my-cache-key)"
dagger call (supports a special syntax that sets the cache key via a query param in the URI):
dagger call some-function --secret-arg env://FOO?cacheKey=my-cache-key
- New
GitRepository.branchesAPI by @jedevc in dagger#10250 - New
Filetop-level field added to allow easier creation ofFileobjects by @jedevc in dagger#10290
GitRepository.tagspatternsarg is now respected for local git repositories by @jedevc in dagger#10250- Return an error when a function argument conflicts with a persistent flag in
dagger callby @helderco in dagger#10305 - Fix "failed to return error" and "failed to emit telemetry" errors when two identical functions execute at the same time and one client cancels the request by @sipsma in dagger#10264
- Fix panic in vault secret provider when path exists but secret doesn't by @sipsma in dagger#10311
- Fix panic when using
Container.buildwith a Dockerfile that isFROM scratchby @sipsma in dagger#10332
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
deptharg toGitRef.treeto control the depth of a clone by @jedevc in dagger#9980 - New
GitRef.reffield for resolving the full ref string for a reference by @jedevc in dagger#9980
- Ensure consistent git state in
Git.treecheckouts by @jedevc in dagger#9980 - Fix cache invalidation of
withExecwhen secrets created bySetSecretin function calls are included by @sipsma in dagger#10260 - Fix handling of optional args in LLM by @vito in dagger#10254
- Fix handling of Python SDK modules using requirements.lock by @helderco in dagger#10252
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- shell: fixed relative paths in
DirectoryandFileflags by @helderco in dagger#10169 - Fix re-use of LLM config from other concurrently running dagger sessions by @sipsma in dagger#10184
- Fix "session not found" errors when invoking modules by @sipsma in dagger#10168
- Fix errors using
CurrentModuleAPI during SDK module initialization by @sipsma in dagger#10213 - Fix caching of contextual directory args when multiple clients invoking the same function by @sipsma in dagger#10187
- Fix "client not found" errors when loading cached modules from private repos by @sipsma in dagger#10223
- Fix API authentication errors when calling
llm.withModelfrom a module function by @sipsma in dagger#10230 - Fix "buildkit session not found" errors when calling
.plaintexton a URI-based secret from a module w/ cache hit by @sipsma in dagger#10223 - Fixed error when
setSecretprovided empty plaintext value and passed between function calls by @sipsma in dagger#10223
- Experimental API methods are now all marked as such by @jedevc in dagger#10058
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
--recursiveflag fordagger developby @jedevc in dagger#9860 - Add the ability to load a module without specifying an SDK by @grouville and @tiborvass in dagger#9984
- Add support for skipping automatic init process when using
Container.buildandDirectory.dockerBuildby @sipsma in dagger#10088 - Allow specifying
ttlfor local secret caching for vault by @rajatjindal in dagger#9997
- Fix error when parsing multi-line git config files by @marcosnils in dagger#10087
- Fix edge-case panic when attempting shell completion by @kasattejaswi in dagger#10125
- Expose Dagger Core API as MCP tools by @grouville and @tiborvass in dagger#10090
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- shell: skip CSV flag parsing when spreading
with-execpositional arguments by @helderco in dagger#10063
- client: bump min connect timeout to 10s by @marcosnils dagger#10070
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- use dockerignore files during docker build by @rajatjindal in dagger#9857
- Fixed an issue when reusing a variable with a pipeline, in the same run by @helderco in dagger#10018
- Fixed executing a dagger shell script from the root command by @helderco in dagger#10020
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
Directory.filterAPI for improved ergonomics by @rajatjindal in dagger#9976
This was previously possible by doingQuery.directory.withDirectory("", dir), but this breaks the chain.
- Various LLM API changes and improvements to tool calling scheme by @vito in dagger#9956
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- BREAKING(llm): fix go sdk capitalization of "Llm" to "LLM" instead, consistent with engine code and the rest of the go ecosystem (dagger#9933)
- this will break compilation of modules referencing the LLM API like
dag.Llm. To fix, simply change todag.LLM
- this will break compilation of modules referencing the LLM API like
- when prompting for remote module LLM access, error early in non-interactive situations where we would previously hang indefinitely. (dagger#9957)
- Read the documentation
- Join our Discord server
- Follow us on Twitter
-
Stabilized Dagger Shell by @helderco in dagger#9896
Find out more at https://docs.dagger.io/features/shell/
-
New top-level
LLMAPI to allow integrating LLMs with native Dagger types in dagger#9628Find out more at https://docs.dagger.io/ai-agents/
- The default unix socket used to connect to the engine is now at
/run/dagger/engine.sockby @sipsma in dagger#9866
The previous socket path still exists for backwards compatibility but may be removed in a future version. - Fields that return directory paths such as
Directory.globandDirectory.entriesnow return a trailing slash to distinguish from regular files by @jedevc in dagger#9118
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add new
Directory.asGitAPI for converting a directory into a git repository by @jedevc in dagger#9730 - Allow CLI flags in
dagger callforGitRepositoryandGitReftypes by @jedevc in dagger#9844 - Improved caching of
Container.asTarballby @jedevc in dagger#9395
- Improved visualization of chains with content digests by @vito in dagger#9739
- Downgrade go to 1.23 by @jedevc in dagger#9766
- This is due to a regression in go 1.24, see dagger#9759
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add
Directory.namefield to retrieve current directory name by @TomChv in dagger#9617
- Fixed panic when
dagger callordagger functionscalled in directory with no modules - it now errors cleanly by @sipsma in dagger#9658 - Improve load time when dagger commands run in directories with no
dagger.jsonby @sipsma in dagger#9659 - Fixed secret when using context directories from a private HTTPS module by @jedevc in dagger#9697
- Bump go to 1.24 by @jedevc in dagger#9673
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fix typescript modules on arm64 using tsx for wrong platform by @sipsma in dagger#9633
- Fix internal error
cannot sub-select 1th item from *dagql.PostCallTypedby @sipsma in dagger#9634
- Read the documentation
- Join our Discord server
- Follow us on Twitter
-
To match automatic configuration,
insecure-entitlementsnow includessecurity.insecurewhen configuring the engine manually by @jedevc in dagger#9513 -
Module load performance is improved and related API refactored by @sipsma in dagger#9505
Loading of modules (theload modulestep shown in progress output) is faster now in many cases. In particular:- Cache utilization of module loading is greatly improved, which can decrease load times by up to a factor of 10 when re-calling functions after changing source code in a Daggerized repo.
- Less extraneous files are loaded from the source repository
Users of modules with large numbers of dependencies or in large git repositories are expected to see the most immediate benefit.
For some concrete numbers, here are
load moduletimes for thedagger-dev's module in Dagger's repository under different scenarios:dagger call --helpon new engines with an empty cache- v0.15.4: 1m20s
- v0.16.0: 1m1s
- ~23% faster
- re-running
dagger call --helpwith no file changes in the repo:- v0.15.4: 10.9s
- v0.16.0: 2.8s
- ~74% faster
- re-running
dagger call --helpafter making a change to a random source code file in the repo:- v0.15.4: 32.1s
- v0.16.0: 2.8s
- ~91% faster
These improvements in cache utilization are also setup for future improvements not only in
load moduletimes but function call times more generally.This improvement comes with a few breaking changes that are not expected to impact most users. However, the changes require that users upgrade their CLI to v0.16.0 in order to connect to v0.16.0 engines. Older CLIs will error when connecting to newer engines.
In terms of the breaking changes, impacted users are those who:
- have function code that imports local libraries outside of the dagger module source directory
- rely on a package manager configuration file (e.g. go.mod) that exists in a parent directory of the dagger module source directory
They may need to update their dagger.json configuration file to add an explicit
"include"setting to ensure those extra files or directories are loaded with the module. This is because numerous files previously implicitly loaded are now skipped by default, which contributes to the performance improvements.For example, if your module code is in
.daggerand relies on thego.modfile in the parent directory, you would add the following to yourdagger.jsonfile:{ "include": ["../go.mod", "../go.sum"] }The values in the
"include"array are relative to the directory containingdagger.json. They can be also be glob patterns (e.g."**/*.txt"). To explicitly exclude some files matched by a previous include pattern, you can prepend the include pattern with a!character (e.g."!**/foo.txt").- Previously, the
excludesetting existed but has now been superseded by prefixing an include pattern with a!character. However, this is backwards-compatible, so existingexcludesettings will be automatically turned into equivalent!-prefixed include settings when runningdagger develop. No user intervention is needed.
The core API's
ModuleSourceandModuletypes have also undergone some cleanup that includes breaking changes. Most users do not interact with these APIs, but any that do may need some minor adjustments to their code. In particular:Module.initializeno longer needs to be called; the module is initialized on creationResolveFromCallerno longer needs to be called for local module sources; context is automatically loaded and resolved efficiently as needed by other API calls
- Allow tilde home expansion in
dag.Hostoperations by @jedevc in dagger#9610
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Move
dagger.jsonsdkfield tosdk.sourceby @rajatjindal in dagger#9454
- Fix various memory leaks in dagger engine by @sipsma in dagger#9468
- Fix weird secret transfer errors when using context directories with private modules by @jedevc in dagger#9530
- Cache function calls per-client in a session by @sipsma in dagger#9483
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add float support in the engine by @TomChv in dagger#9396
Note: the precision of float is limited to float64 inside the engine.
- Fix incorrectly namespaced cache volumes by @jedevc and @sipsma in dagger#9400 and dagger#9204
- Allow trailing slashes in destination directory in
Container.WithFilesby @jedevc in dagger#9457 - Correctly resolve dependency context directories by @jedevc in dagger#9418
- Improve initial engine startup time by @jedevc in dagger#9430
- Allow automatic CA certificate provisioning to work in Wolfi containers by @jedevc in dagger#9404
- OTEL bumped to v1.32.0 by @vito in dagger#8991
- Modules that use old versions of the OTEL Go SDK may need to be manually updated.
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
dagger updatecommand to update dependencies indagger.jsonby @rajatjindal in dagger#8839 - Allow
$schemaproperty indagger.jsonby @JacobLey in dagger#9069
CacheVolumesare now namespaced between different modules by @rajatjindal in dagger#8724- Print
CACHEDoperations for--progress=plainoutput by @marcosnils in dagger#9344
- Provide a better out-of-the-box experience for
AsServiceby @marcosnils in dagger#9247 - Prevent interactive terminal sessions from crashing in Windows terminal by @rajatjindal in dagger#9244
- Allow using old dockerfile syntax pragmas by @jedevc in dagger#9246
- Avoid frozen progress output when using
Container.terminalby @jedevc in dagger#9338 - Ensure that
Container.upbehaves as identically as possible toContainer.AsService.upby @jedevc in dagger#9231 - Ensure
dagger installalways inserts dependencies in the right order by @jedevc in dagger#9052
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Metrics display in the TUI is fixed to display for all executed containers, rather than just services by @sipsma in dagger#9171
- Read the documentation
- Join our Discord server
- Follow us on Twitter
Container.asServicenow uses the command specified bywithDefaultArgsinstead of the lastwithExeccommand by @rajatjindal in dagger#8865
Users can override the args by providing theargsoption toasService. They can also configure the container to use the container entrypoint by usinguseEntrypointoption.
-
Better TUI errors, new cached/pending states, duration accounting and fewer spans by @vito in dagger#8442
-
Custom dagger
engine.jsonconfig file by @jedevc in dagger#8800
This new config file format is intended to eventually replace the old buildkit-styleengine.tomlfile that's currently used for configuration.This file can be either mounted directly into a manually started engine at
/etc/dagger/engine.toml, or it will automatically mounted from the user's~/.config/dagger/engine.jsonwhen the engine is started. -
Filesync performance is improved by @sipsma in dagger#8818
The engine now re-uses previously loaded data more reliably and in more cases, which speeds up repeated reloads of the same or similar (i.e. overlapping data).Uncached filesyncs of large amounts of data is also faster and uses less memory in the engine.
-
Added
dagger uninstallcommand to remove a dependency by @rajatjindal in dagger#8745 -
Added memory and network telemetry for execs by @cwlbraa in dagger#8880 dagger#8902
-
Added
DAGGER_LEAVE_OLD_ENGINEenvironment variable to optionally prevent removal of old engine containers during upgrades by devin in dagger#8195
Directory.terminalAPI works now by @sipsma in dagger#8952- Fix resource leaks in the engine that occurred after each debug terminal was opened by @sipsma in dagger#9013
- Fix cache mounts not being included in interactive debug containers by @sipsma in dagger#9034
- Allow
Container.withExecexpectto catch exit code 128 by @jedevc in dagger#9027 - Correctly apply ignore pattern when pulling a directory from git by @TomChv in dagger#8931
- Fix panic on null
Directory.digestby @jedevc in dagger#8946
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Rename
dagger-enginecore GraphQL query toengineby @marcosnils in dagger#8568 - Remove deprecated
Container.withFocusandContainer.withoutFocusby @jedevc in dagger#8647
- Add support for git credential managers to retrieve Personal Access Tokens (PAT) when loading private dagger modules by @grouville in dagger#8805 \
- Enables private git repository support for HTTP/HTTPS refs
- Works alongside existing SSH authentication support
- Compatible with standard git credential managers and credential helpers
- Supports common git hosting platforms (GitHub, GitLab, Bitbucket, etc.)
- Ensure that gitdns support token support works with all Git server providers. Bitbucket Cloud requires a specific auth format for Git operations using tokens, where the username must be 'x-token-auth'. This fixes token authentication for Bitbucket while maintaining compatibility with other Git providers like GitHub and GitLab, and Azure by @grouville in dagger#8778
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
expectarg forContainer.withExecby @jedevc in dagger#8466
This enum arg allows specifying valid return statuses for which the command can return without failing immediately. - New
Container.exitCodefield to get the exit code of the lastwithExecby @jedevc in dagger#8466
- Updated default cache policies to avoid consuming too much disk by @jedevc in dagger#8725
The new policies attempt to co-operate with other applications using the disk and will adjust its cache usage accordingly. - cli: limit printing objects to state by @helderco in dagger#8788
Previously, when a function chain indagger callended in an object, we'd print all functions that return a simple value and don't have any arguments. Now, only object fields will be included, not all functions.
- Fix excessive cache invalidation of
withExecs using theExperimentalPrivilegedNestingflag by @sipsma in dagger#8776
- Read the documentation
- Join our Discord server
- Follow us on Twitter
-
Show metrics for execs in TUI by @sipsma in dagger#8506
The engine now supports collecting metrics from individual execs and publishing them as OTel metrics.To start, just disk read/write byte totals and CPU/IO pressure time are supported, but more like memory/network/etc, will be added soon.
Currently, metrics will be displayed in the TUI at verbosity level 4 (
-vvv).
dagger initdefaults to use.daggerfolder during if current directory.is not empty by @rajatjindal in dagger#8557dagger installnow preserves the original source input, and tracks a separatepinfield for the exact remote commit by @jedevc in dagger#8587
-
Allow custom enums that include ambiguous names (such as
true/false) by @jedevc in dagger#8682 -
Optimize
Container.fromfor image refs with digests by @sipsma in dagger#8736
Previously, ifContainer.fromwas given an image ref with a digest and that image already existed in the local cache, the engine would still waste time resolving metadata over the network from the registry.Now, if a digested image ref already exists locally, the network requests are skipped entirely.
-
Allow cloning hidden commits that are not fetched as part of a normal clone by @jedevc in dagger#8747
For example,refs/pull/<pr>/head, orrefs/pull/<pr>/merge. -
Speed up fully cached initialize time by caching more internal SDK operations by @sipsma in dagger#8735
Dagger wasn't caching as many SDK operations as it could. With this change Dagger's own CI modules initialize ~1s faster when fully cached. -
Speed up initialization of modules with lots of dependencies using the Go SDK in engines with no cache by @sipsma in dagger#8761
Various dependencies of Go SDK modules are now pre-cached in the engine image, which avoids significant CPU pressure when building Go SDK modules in parallel with no cache.The engine image size increase is expected to be offset by these improvements.
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fix
MarshalJSONerror ingitAPI when called by older module versions by @jedevc in dagger#8667
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Changed behavior of Git to default keep the
.gitdirectory by @jedevc in dagger#8318
This can be disabled withtree's newdiscardGitDiroption. Modules with olderengineVersions will keep the old behavior. - Deprecated
git'skeepGitDirargument by @jedevc in dagger#8318
-
Services can now be given an explicit hostname via
Service.withHostnameby @vito in dagger#8641
Previously, you could only express a DAG of services, because each service hostname was derived from the service's configuration, and changing a service to point to another service would inherently change that service's configuration.Now you can set your own hostnames ahead of time, tell your services about each other's hostnames, and start they manually.
Services with custom hostnames are namespaced to the module that starts them, to prevent conflicts.
-
Allow expanding environment variables in more
Containerfunctions by @rajatjindal in dagger#8427 -
Apply
ignorefunction parameter metadata on Directory passed from the CLI by @TomChv in dagger#8436
This extends the usage ofignoreto not only dir loaded withdefaultPathbut directory passed as function's param from the CLI.Note: ignore patterns are not applied for module to module calls.
-
Enabled
Container.withMountedTempsize configuration by @cwlbraa in dagger#8652 -
Add
noInitoption toContainer.withExecto support disabling automatic init process by @sipsma in dagger#8656
Use cases that strictly require the user exec is PID 1 of the container are now supported by settingnoInitto true.
- Include container annotations on
ExportandAsTarballby @jedevc in dagger#8543 - Correctly resolve relative path for modules fetched from git by @TomChv in dagger#8565
- Fix include/exclude patterns from a dependency incorrectly affecting a parent module by @helderco in dagger#8575
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- fixed version nag showing up even when up-to-date by @vito in dagger#8521
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
Container.upAPI by @rajatjindal in dagger#8479
This is an alias to.AsService().Up().
- removed noisy "check for updates" span by @vito in dagger#8491
- fix log output having extra blank lines by @vito in dagger#8500
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Added new methods
Container.withoutFilesandDirectory.withoutFilesby @jedevc in dagger#8216 - Add
Container.withAnnotationto set OCI annotations by @aluzzardi in dagger#8409 ignorecombined withdefaultPathnow works if the module is fetch from git instead of local by @TomChv in dagger#8430- New
Directory.withoutFilesandContainer.withoutFilescore APIs by @jedevc in dagger#8216
These can be used to remove multiple files from a filesystem in one call.
- Fix
Directory.digeston scratch directory by @jedevc in dagger#8445 - Allow private secrets to pass between different modules by @jedevc in dagger#8358
- Handle session-wide cached functions that return secrets by @jedevc in dagger#8358
- cli: fix plaintext being printed on screen when calling a function that returns a
dagger.Secretby @helderco in dagger#8468
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Remove deprecated fields and arguments by @jedevc in dagger#8065
- Remove
Container.withExec'sskipEntrypointargument - this is now the default (seeuseEntrypoint) - Remove
pipeline,Container.pipelineandDirectory.pipeline - Remove
GitModuleSource.cloneURL(seeGitModuleSource.cloneRef)
- Remove
- Added new
Directory.digestandModuleSource.digestfields by @jedevc in dagger#8282
These fields mirror the behavior of theFile.digestfield, computing a unique cryptographic digest over the contents of the object. - TUI: add
--no-exit/-Eso you can poke around after the call completes by @vito in dagger#8389
- The trace url is printed just before the final output to make it easy to find by @rajatjindal in dagger#8366
Also, the url will be printed only for a subset of dagger commands to reduce noise. - Increase the minimum connect timeout from 1s to 3s by @neutronth in dagger#8328
Connecting to a distant remote engine could otherwise fail if it was not reachable in 1s.
- Fixed void types from core incorrectly being seen as named scalars by @helderco in dagger#8336
- Fix setting secrets on module object in constructor by @sipsma in dagger#8149
- Allow top-level field access with no constructor by @jedevc in dagger#8331
Previously, if a field access was made immediately after the default constructor was called, then the access would fail. - Plain progress correctly displays carriage returns by @jedevc in dagger#8347
Carriage returns could previously render weirdly in the output, displaying empty lines, and similar visual glitches. - cli: Fix default value on
Platformflag by @helderco in dagger#8360
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fixed regression in module ref parsing for no-protocol refs that had version suffixes by @jedevc in dagger#8298
- Make
Git.tagsURL parsing consistent withGit.treeby @jedevc in dagger#8298 - Load specified version when loading
phporelixirsdk by @rajatjindal in dagger#8297
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add new context directory support by @TomChv in dagger#7744
This allows accessing their own source directory, without needing to explicitly pass directories around. - Support private modules with new SSH ref scheme and forward of SSH agent by @grouville in dagger#7708
- Go-like public module refs (currently used) remain active
- HTTP / HTTPS schemes are now supported as alternative public module refs
- SSH refs are introduced, with support of SCP-like refs git@provider:user/repo and explicit ssh://provider/user/repo
- Implements CLI call argument
--interactive-commandfor overriding the default command used in interactive mode by @samalba in dagger#8171
- Error out if non-existent local module directory is passed to CLI by @jedevc in dagger#8193
The file-not-found errors were previously silently ignored for the top-level module passed in the CLI. - Silence noisy
failed to get repo HEADCLI error by @jedevc in dagger#8189 - Fix performance issues in
Container.withExecafter usingwithMountedTemporwithMountedSecretby @jedevc in dagger#8180
- Read the documentation
- Join our Discord server
- Follow us on Twitter
-
cli: allow calling core functions directly by @helderco in dagger#7310
Usage:dagger core <function>
Example:dagger core container from --address=alpine terminalWorks the same as
dagger call, but instead of loading a user module, it only uses functions from the core API.Run
dagger core --helpfor available functions.Note that this command is experimental and the DX for calling core functions in the CLI may change in the future.
-
New SDK aliases for
elixirandphpby @jedevc in dagger#8067
SDKs with experimental module support (elixir and php) can now be accessed using--sdk=<sdk>(such as--sdk=elixirand--sdk=phprespectively) instead of the full form--sdk=github.com/dagger/dagger/sdk/<sdk>@<version>. -
Add
File.digestmethod by @TomChv in dagger#8114
This method provides an efficient way to compute a file's digest, which unlock optimized file comparison or check for file changes. -
Bundle CLI in the Engine image so that both parts of Dagger (CLI+Engine) ship as a single artefact by @gerhard in dagger#8147
- Reimplemented the OpenTelemetry data pipeline to avoid hangs and other complications by @vito in dagger#7996
- Fix
Directory.globto correctly handle globs with subdir prefixes by @jedevc in dagger#8110
Previously, attempting to glob with a prefix subdir in a pattern like<subdir>/*would not match any files. This should now be fixed, and files in<subdir>will now be correctly matched. - Fix
failed to collect IDs from parent fieldserror when module objects contain fields with nil values by @jedevc/@sipsma in dagger#8132 - Fixed enum lists in modules by @helderco in dagger#8096
- Fixed referring to module's own objects/interfaces/enums in constructor signature by @jedevc in dagger#8115
Previously, modules would fail to launch if they declared a constructor that contained a reference to a type from it's own module in it's args. - Fixed using custom enum types as optional arguments by @jedevc in dagger#8148
Previously, function calls that defined an optional argument would not be callable. - Make retrieving secret from command works on Windows by @wingyplus in dagger#8121
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Deprecate old
pipelineAPIs by @jedevc in dagger#8064
These operations have been no-ops since v0.11.0, and will be removed in v0.13.0.
- Fix errors when using Dockerfile builds from module functions that have secrets by @sipsma in dagger#8049
- Fix dagger
terminalprompt with debian-based images by @vmaffet in dagger#7960 - Fix occasional leaks in secret scrubbing algorithm by @jedevc in dagger#8047
- Fix frequent context switches in
--progress=plainoutput by @jedevc in dagger#7956 - Extend multi git server support to Azure devOps by @grouville in dagger#8063
Our support for Azure refs was broken on monorepos. We special-case Azure DevOps since it doesn't work with the go standard convention of discovering the root of a git repository
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: propagate exit code from function by @helderco in dagger#8019
- Fix rare condition in which clients could use wrong files in filesync by @sipsma in dagger#7900
- Fix missing secret errors when secrets are set in objects fields during chained function calls by @sipsma in dagger#8011
- Read the documentation
- Join our Discord server
- Follow us on Twitter
dagger initnow generates files in the current directory by default and no longer in./daggerby @TomChv in dagger#7824
- cli: fix handling of enum default values by @helderco in dagger#8000
- cli: fix Cloud traces and GitHub checks always being succeeded by @vito in dagger#8001
- note: this only affects telemetry; the command itself still fails.
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: add support for passing
Sockets as arguments from the CLI to Functions by @sipsma in dagger#7804 - cli: new
--compatflag for develop to target a specific api version by @jedevc in dagger#7948
- cloud: traces are not uploaded for
dagger version/dagger login/dagger logout/etc by @jedevc in dagger#7928
- core: allow
@in local module name by @grouville in dagger#7891 - cli: fix
dagger versionsometimes disappearing by @jedevc in dagger#7919 - cli: avoid api errors when calling modules in compat mode by @jedevc in dagger#7924
- Read the documentation
- Join our Discord server
- Follow us on Twitter
This release is significant. All details (including videos & code examples) are captured in this blog post.
- sdk: Various breaking changes to the Go SDK
See the SDK-specific release notes for more information. - api: Align
Container.withNewFilesignature withDirectory.withNewFileby @helderco in dagger#7293
Callers ofContainer.withNewFilewill need to changecontentsfrom optional to required argument. - api: Skip entrypoint by default in
withExecby @helderco in dagger#7136
Callers relying on aContainer's entrypoint will need to be updated to opt-in withuseEntrypoint. - api: Don't fallback to the default command on
Container.stdoutandContainer.stderrby @helderco in dagger#7857
Callers ofstdoutandstderrwithout a previouswithExecwill need to insert an explicit emptywithExec. - api:
Container.terminalnow returns aContainerby @aluzzardi in dagger#7586
Callers ofterminalwill need be updated to handle the updated type. - api: Return absolute path on export instead of boolean by @helderco in dagger#7500
Callers expecting a boolean return will need to be updated to instead handle a string path. - api: Removed deprecated
sshAuthSocketandsshKnownHostsargs fromGitRef.treeby @jedevc in dagger#6934
Callers should instead attach these arguments onto the top-levelgitcall. - api: Removed
idparameters forcontainer,directoryandsocketby @jedevc in dagger#6934
Users of these parameters should instead use the standaloneloadContainerFromID,loadDirectoryFromIDandloadSocketFromIDrespectively. - api: Removed
checkVersionCompatibilityfield (versioning checks are now automatically performed on all connections) by @jedevc in dagger#7751
Versioning checks are now all automatically performed on all connections, and never need to be manually performed through the API.
Thanks to the new compatibility mode feature, these breaking changes should not
impact any existing Modules immediately. dagger call should still work on
v0.12.0 without any changes to your Module code (any compat issues for modules
are likely a bug, please report!)
After upgrading to Engine v0.12.0, you can upgrade your Module to use the
latest v0.12.0 APIs by running dagger develop. That will update the
engineVersion field of your module's dagger.json configuration file to
v0.12.0 and enable the new APIs.
After that, if your code is impacted by any of the breaking changes, you will
see errors when running dagger call. Once the errors are fixed, dagger call
will work again and your module can be updated in Daggerverse if desired.
More detailed instructions on addressing the individual API incompatible changes can be found in the PR descriptions linked above.
- api:
terminalcan be inserted into the middle ofContainerandDirectorypipelines to pop an interactive shell by @aluzzardi in dagger#7586 - api: Introduced module versioning compatibility by @jedevc in dagger#7759
- tui: Improved progress navigation and verbosity settings by @vito in dagger#7671
- cli: Add
-qflag andDAGGER_QUIET=1to restore previous verbosity default by @vito in dagger#7822 - cli: Expand tilde (
~) in file, directory and secret file argument by @wingyplus in dagger#7818 - api: Add git tags API by @grouville in dagger#7742
- api: Add core APIs for local cache state by @sipsma in dagger#7767
- cli: Print module object fields with
dagger callby @helderco in dagger#7479
- cli: Allow absolute paths for local module paths by @Michael Albers in dagger#7476
- cli: Generate
LICENSEonly if--sdkis set ondagger developby @TomChv in dagger#7719 - core: Correctly set new engine gc policy defaults by @jedevc in dagger#7749
- tui: plain progress output updated to not use hyperlinks by @jedevc in dagger#7754
- core: Prevent service healthchecks from using too long a retry interval by @sipsma in dagger#7848
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fix engine local disk cache growing indefinitely by @sipsma in dagger#7738
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- core: when manually connecting cli and engine, versions must be at least v0.11.8 by @sipsma in dagger#7643
- core: allow hosting modules outside of GitHub by @grouville in dagger#7511
- core: generate license only if code has been generated by @TomChv in dagger#7658
- windows: enhanced windows install script by @pjmagee and @angrybat in dagger#7445 dagger#7569 dagger#7659
- core: fixed telemetry draining when clients exit uncleanly by @vito in dagger#7660
- cli: fixed infinite loop when simplifying on high verbosity levels by @jedevc in dagger#7679
- cli: improve chunking of plain progress logs by @jedevc in dagger#7653
- core: revert iptables to legacy to avoid use of nftables by @marcosnils in dagger#7670
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- core: when manually connecting cli and engine, versions must be at least v0.11.7 by @jedevc in dagger#7031
- sdk: runtime module interface accepts schema as
Fileinstead of string for improved performance by @sipsma in dagger#7549
- core: engine gc policy is less aggressive by @marcosnils in dagger#7563
- cli: minor improvements to progress viewer by @jedevc in dagger#7474
- cli: decrease connect timeout in gRPC dial by @marcosnils in dagger#7612
- core: fix
File.exportto local Windows client by @wingyplus in dagger#7564 - core: handle secrets in dockerfile builds with syntax directives by @jedevc in dagger#7595
- core: improved telemetry draining and prevents hangs by @vito in dagger#7452
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add
withNamemethod to File by @TomChv in dagger#7491
- cli: don't validate flags when requesting
--helpby @helderco in dagger#7417 - fix container init being wrong platform in arm image by @sipsma in dagger#7497
- fix container DNS resolution when host has no search domains by @sipsma in dagger#7501
- honor system proxy config during git operations by @sipsma in dagger#7504
- fix windows-style paths used as file+directory arg values in dagger call by @sipsma in dagger#7506
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli:
dagger logincloud traces support by @aluzzardi in dagger#7125 - cli: improved
--progress=plainimplementation for better visibility by @jedevc in dagger#7272
- cli: cleaner tty progress view by @jedevc in dagger#7347 dagger#7371 dagger#7386
- cli: don't show functions that can't be called by @helderco in dagger#7418
- cli: don't show inherited flags in function commands by @helderco in dagger#7419
- core: remove shim and switch to dumb-init by @sipsma in dagger#7367
- core: fixed custom CA certs in modules by @sipsma in dagger#7356
- cli: don't validate flags when requesting
--helpby @helderco in dagger#7417
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: Fix panic when calling function with list of scalars by @jedevc in dagger#7322
- Avoid hang caused by client id conflicts by @sipsma in dagger#7335
- Avoid unneccessary module cache invalidation from internal plumbing values by @sipsma in dagger#7336
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: remove space stripping from secret arguments by @marcosnils in dagger#7271
- Added support for custom scalars and enums in function arguments by @jedevc in dagger#7158
- Added support for propagating system proxy settings by @sipsma in dagger#7255
- api: Added
Container.withoutSecretVariableby @helderco in dagger#7291 - api: Added
Container.withoutDirectoryandContainer.withoutFileby @helderco in dagger#7292
- cli: Added a visual cue for required flags in
--helpby @grouville in dagger#7262 - cli: Conventionalized usage syntax in
--helpby @grouville in dagger#7143 - cli: Use "functions" and "arguments" in
dagger call --helpby @helderco in dagger#7286
- api: Set
Container.platformcorrectly when usingContainer.fromby @marcosnils in dagger#7298 - Avoid intermittent
failed to get state for indexerrors by @sipsma in dagger#7295 dagger#7309 - Avoid panic when masked parent is missing by @vito in dagger#7227
- Fix terminal broken on Windows by @wingyplus in dagger#7305
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New version field to get engine version details by @jedevc in dagger#7029
- cli: style headings in BOLD UPPERCASE to help break sections visually by @grouville in dagger#7126
- cli: remove discrepancy in usage between dagger query and the rest of the commands by @grouville in dagger#7124
- cli: move arguments section below functions/commands in usage, for better readability by @grouville in dagger#7134
- cli: adopt options terminology instead of flags by @grouville in dagger#7170
- Fixed more windows path issues by @jedevc in dagger#7118
- cli: Fixed using
--helpafter arguments indagger functionsby @helderco in dagger#7187
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add
withAuthTokenandwithAuthHeaderfields toGitRepositoryby @jedevc in dagger#6992
- Restored
plainprogress output after removal in v0.11.0 by @morlay in dagger#7069 - Fixed various windows regressions by @jedevc in dagger#7003 dagger#7050 dagger#7095
- Git can now be used with dumb HTTP clones by @jedevc in dagger#6992
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Old clients <=0.10.3 cannot connect to a new >=v0.11.0 engine
- Old progress interfaces removed by @vito in dagger#6835
--focusCLI flag removed by @vito in dagger#6835
- Add OTEL trace exports by @vito in dagger#6835
- Add
Headfield toGitRepositoryto get the default branch by @jedevc in dagger#6994
- Fix
DOCKER_HOSTnot working whenDAGGER_CLOUD_TOKENset by @sipsma in dagger#7006
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add support for
wipearg toDirectory.exportby @sipsma in dagger#6909 - Add new
Secret.Namefield by @jedevc in dagger#6924 - Support directory arg filtering via views by @sipsma in dagger#6857
- Make automatic .gitignore creation for modules configurable by @sipsma in dagger#6888
- Allow
idas argument name to functions by @sipsma in dagger#6912
- Fix
Container.withFilesnot respecting absolute paths by @helderco in dagger#6879 - Fix
Directory.globon directories with a sub path by @helderco in dagger#6904 - Allow unicode parent path components by @jedevc in dagger#6925
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fix panic on unset default terminal arg by @TomChv in dagger#6838
- Trim spaces on file and command secret source inputs by @kpenfound in dagger#6845
- Fix name conflicts with
Queryby @jedevc in dagger#6849 - Propagate GraphQL client to child clients by @jedevc in dagger#6851
- Prevent glob from returning duplicate directories by @jedevc in dagger#6852
- Do find-up of
dagger.jsonfor all relevant commands (works from subdirs) by @sipsma in dagger#6860
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Allow passing git URLs to
dagger callfile type args by @jedevc in dagger#6769 - Support privileges and nesting in default terminal command by @TomChv in dagger#6805
- Fix panic in Contents for massive files by @jedevc in dagger#6772
- Dagger go modules default to the module name instead of "main" by @jedevc in dagger#6774
- Fix a regression where secrets used with dockerBuild could error out by @jedevc in dagger#6809
- Fix goroutine and memory leaks in engine by @sipsma in dagger#6760
- Fix potential name clash with "Client" in Go functions by @jedevc in dagger#6716
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New Dagger functions and modules
- Modules allow bundling up and sharing reuable pipeline functions in a cross-language way.
- New CLI commands (such as
dagger call) provide a consistent interface to easily invoke functions inside modules. - A new TUI interface allows easily following along with what's going on.
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Improve docker error logging by @jedevc in dagger#6676
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add new
Directory.WithFilesandContainer.WithFilesby @tomasmota in dagger#6556
- Avoid panic in secret scrubber caused by similar secret names @jedevc in dagger#6641
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Add new Git.ref function by @jedevc in dagger#6376
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Service.Stop now uses SIGTERM instead of SIGKILL by default by @jedevc in dagger#6354
- Add option to skip healthcheck on exposed ports by @KGB33 in dagger#6214
- New kill option for Service.Stop by @jedevc in dagger#6354
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New File.name field by @jedevc in dagger#6431
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Argument to
withDefaultArgsis now required by @helderco in dagger#6281
- Fix shim panic when exec-ing an unknown command by @Juneezee in dagger#6356
- Fix potential panic when exporting cache by @jedevc in dagger#6378
- Fix concurrent map access in api server by @jedevc in dagger#6388
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New
withoutEntryointandwithoutDefaultArgsfields by @helderco in dagger#6278
- Clear
defaultArgsonwithEntrypointby default by @helderco in dagger#6280
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- New secret scrubbing implementation for more responsive logs by @jedevc in dagger#6034
- Improved logging during engine startup by @jedevc in dagger#6075
- Fix
WithMountedDirectoryinvalidating cache by @jedevc in dagger#6211
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Fixes + performance improvements to experimental features
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- experimental Nvidia GPU support by @matiasinsaurralde in dagger#5605
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Implement new commit resolver for GitRef by @jedevc in dagger#5910
- Directory supports Glob method by @TomChv in dagger#5824
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- engine: new services API with container <=> host networking, explicit start/stop by @vito in dagger#5557
- implement new conventions for IDable objects by @vito in dagger#5881
- engine: support multiple cache configs for upstream remote cache by @sipsma in dagger#5730
- engine: reduce connection retry noise by @sipsma in dagger#5918
- engine: fix missing descriptor handlers for lazy blobs error w/ cloud cache by @sipsma in dagger#5885
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- core: use BuildKit's own readiness implementation instead of our custom logic by @jedevc in dagger#5808
- core: add Engine logs for failed queries in debug mode by @jedevc in dagger#5827
- cli: restart manually stopped engine containers by @jedevc in dagger#5811
- cli: fix process hang when running certain command with
dagger runby @wingyplus in dagger#5712
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- core: remove syncedCacheMount check for cache manager by @marcosnils in dagger#5797
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- core: record seen cache volumes at resolver level by @marcosnils in dagger#5786
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: add
DAGGER_SESSION_TOKENenv var support inlistencommand by @marcosnils in dagger#5704 - core: Extends mounted secret API to support mode and optional arguments by @TomChv in dagger#5707
- engine: add
DAGGER_CLOUD_TOKENenv var support by @marcosnils in dagger#5773
- engine: fix panic if
_EXPERIMENTAL_DAGGER_SERVICES_DNSis disabled by @vbehar in dagger#5760 - services: refactor to per-client instances that stop on client close by @vito in dagger#5764
- cli: fix interactive TUI nil panic by @vito in dagger#5681
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Default container tar export permissions to 0600 by @sipsma in dagger#5649
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- Include details during Dagger Engine loading by @TomChv in dagger#5436
- Show host target on directory or file export by @TomChv in dagger#5632
- Hide merge vertexes from output by @sipsma in dagger#5630
- Fix Engine connection hang when UTF8 characters present in labels by @vito in dagger#5628
- Export files with same permissions as source by @sipsma in dagger#5629
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- remote cache: improve http error checking by @aluzzardi in dagger#5506
- engine: fix combined cache manager to query local cache too by @sipsma in dagger#5585
- telemetry: fix labels not being included by @vito in dagger#5602
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: fix
dagger runnot showing command progress by @vito in dagger#5564 - core: fix setting image config during multiplatform export+publish by @sipsma in dagger#5574
- core: fix exports of files larger than default grpc max message size by @sipsma in dagger#5570
- engine: report correct engine version by stamping engine image too by @sipsma in dagger#5578
- core: handle v prefix in version compatibility check by @sipsma in dagger#5578
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- engine: remove API deprecations by @helderco in dagger#5512
- engine: Rename
idargument inContainer.withRootfsby @helderco in dagger#5513
- engine: implement
Host.setSecretFileto securely set binary files as secrets by @grouville in dagger#5500
- engine: Bump Alpine version to fix service DNS resolution by @marcosnils in dagger#5470
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cli: show total duration at the end of a run by @vito in dagger#5476
- engine: add
Directory.Syncby @helderco in dagger#5414 - engine: add
File.Syncby @helderco in dagger#5416 - engine: add
Container.WithFocus&Container.WithoutFocusby @vito in dagger#5364 - engine: add
include&excludeto host dir copy name by @sipsma in dagger#5469
- engine: deprecate
exitCodeby @helderco in dagger#5481
- engine: prevent session id from busting caches everywhere by @vito in dagger#5474
- engine: optimize
WithDirectory&WithFilevia MergeOp by @sipsma in dagger#5400 - engine: remove unimplemented git fields by @helderco in dagger#5410
- engine: support optionally setting explicit OCI mediatypes by @sipsma in dagger#5467
- Read the documentation
- Join our Discord server
- Follow us on Twitter
- cache: Set default Cloud Cache URL by @marcosnils in dagger#5343
- engine: Add Cloud Cache token env var by @marcosnils in dagger#5356
- core: Improve image publish/export format compatibility by @sipsma in dagger#5365
- core: Send Progrock updates to Cloud by @vito in dagger#5297
- core: Use include filter in host.file by @sipsma in dagger#5345
- cli: Fix incorrect subcommand being called by @sipsma in dagger#5344
- engine: Remove old Cache config env from autoprovision by @sipsma in dagger#5355
- Read the documentation
- Join our Discord server
- Follow us on Twitter