#general
1 messages Β· Page 9 of 1
You can use 'dagger install git@github.com:...' - that will work.
Hello π
I search to install module with Dagger Shell, but if I init Dagger without SDK, it fail cause Dagger want an SDK.
Do you know it is possible to use module without SDK in case of I want only use Dagger Shell?
Thanks
that's a bug there's a fix on the way, sorry!
is there a layer caching difference between using withMountedDirectory and withDirectory ?
for some reason my layer caching completely stopped working and I can't figure out why π
Is your module in git? If so, yes. I just tried this. You can
dagger
.cd github.com/myorg/myrepo/daggermodule@branch
This will load the remote module into your shell
Hey! Iβd really appreciate some help with a module download issue. Iβm running Dagger in an Azure DevOps pipeline, calling a module from the current repo. However, that module has a dependency on another one hosted in a private GitHub repo.
Whatβs the recommended way to provide a fine-grained token to Dagger so it can access and download that private dependency?
11 : β load module ERROR [0.9s]
11 : β ! failed to get configured module: input: moduleSource failed to resolve dep to source: failed to load git dep: select: failed to resolve git src to commit: failed to fetch remote https://github.com/xxxx: git error: exit status 128
stderr:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
@agile marsh AFAIK dagger will try to access modules via git using either HTTPS or SSH, the credentials for which are configured like so.
https://docs.dagger.io/api/remote-repositories#authentication-methods
From the look of your error message it looks like you were having the same issue as me, where you have to configure access to that Git repository.
For me I created an SSH key that had access to the repository and added it to the SSH agent before calling dagger.
For HTTPS you'll likely need to do something else, I'm also not well versed on the specifics of Azure.
Thanks for the fast response @torpid maple , the point is that the pipeline runs in an azure devops agent that runs into a docker container, and those are triggered on an automated demand way lets say, I was hoping with a GITHUB_TOKEN env would work or replicating ont he fly the credentials , just like I do locally, but didnt work, I will try with SSH and see if that works better
I'm on to the next problem now which is net/http: TLS handshake timeout errors when trying to run in the pipeline.
Stdout:
generating go module: typescript-sdk
creating directory . [skipped]
writing dagger.gen.go
writing go.mod
writing go.sum
creating directory internal
creating directory internal/dagger
writing internal/dagger/dagger.gen.go
creating directory internal/querybuilder
writing internal/querybuilder/marshal.go
writing internal/querybuilder/querybuilder.go
creating directory internal/telemetry
writing internal/telemetry/attrs.go
writing internal/telemetry/env.go
writing internal/telemetry/exporters.go
writing internal/telemetry/init.go
writing internal/telemetry/live.go
writing internal/telemetry/logging.go
writing internal/telemetry/metrics.go
writing internal/telemetry/proxy.go
writing internal/telemetry/span.go
writing internal/telemetry/transform.go
running post-command: go mod edit -replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc=go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp=go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/log=go.opentelemetry.io/otel/log@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/sdk/log=go.opentelemetry.io/otel/sdk/log@v0.8.0
running post-command: go mod tidy
post-command failed: exit status 1
Stderr:
go: downloading github.com/iancoleman/strcase v0.3.0
go: downloading golang.org/x/mod v0.24.0
go: downloading github.com/stretchr/testify v1.10.0
go: github.com/go-logr/stdr@v1.2.2 requires
github.com/go-logr/logr@v1.2.2: Get "https://proxy.golang.org/github.com/go-logr/logr/@v/v1.2.2.mod": net/http: TLS handshake timeout
@here community call starting in 1 minute
Hey, I think a cannot help you with that issue, did not have does errors, at least yet ajajajaj
From QA Agent Demo π
Repo with all the code: https://github.com/levlaz/agent-playground
Sample Dagger Cloud Trace: https://v3.dagger.cloud/levlaz/traces/8500d18e40016fe8d99d0ad62719041b
looks like a proxy issue. Are you behind a proxy?
Is there a way of getting the timeline in the web ui as interwoven log lines like as if you're watching in the plaintext mode? (the nnn : logline format)
and then there is this....
https://github.com/koalaman/shellcheck/wiki/SC2096
On most OS, shebangs can only specify a single parameter.
Is there a solution for this? like set -xe for bash? I mean setting dagger parameters at a script level, not at a CLI args level.
No not AFAIK
How can I get dagger to output plain logs similar to how it does running in a CI environment?
Add --progress plain
Hmm, are you using a custom dagger image? Could be a cert issue too.
Hey folks π
I found that the dagger CLI for mcp.go expoes a --sse-addr flag but it seems to be not implemented yet β any timeline on it? or workarounds how to get it running via sse?
https://github.com/dagger/dagger/blob/a293a6a3b39e4d418c37c24a9a9aa0c7b089b942/cmd/dagger/mcp.go#L57C3-L57C59
Hi π, we first wanted to gather feedback on the overall experience -- but we can totally prioritize it if you need it πΌ π
Oh that's great I'm currently prototyping exposing a MCP for our product that users can connect to in vscode/cursor etc. so it's nothing that's running on their machine. (currently trying to workaround for the POC with https://github.com/supercorp-ai/supergateway)
Hey folks π Is there some way to leverage existing MCPs like the official github MCP within dagger? https://github.com/github/github-mcp-server
Instead of re-implementing those tools in dagger it would be great to have the ability to run them in a container (the github one is already a container image ghcr.io/github/github-mcp-server) β as an MCP provides a schema it should be even possible to integrate them into the existing type system for codegen.
hello! We started prototyping that (there's a draft PR) but not finished yet.
Integration with the schema would be ideal, but tricky because mcp doesn't have any affordance for static schema introspection. It's all dynamic.. but we have ideas for working around it π
hey @gleaming chasm. No, layer caching should work the same as long as the inputs for both operations are still the same. Happy to help you out in a thread if needed π
hey Antonio did you figure this out? reach out and we can see what's happening
hi there ! I'm finding the dagger logs resulting from the dagger call are way too verbose. is there any way i can tune those down ?
The azure devops pipelines doesnt support TTY and the progress=plain makes it almost unreadable.
I tried the following dagger call --quiet --progress plain myfunction but i can still see logs like this that i'm not interested in:
11 : consuming /v1/traces DONE [0.0s]
12 : consuming /v1/logs
12 : consuming /v1/logs DONE [0.0s]
13 : consuming /v1/metrics
13 : consuming /v1/metrics DONE [0.0s]
14 : moduleSource(refString: "."): ModuleSource!
i'm running this on an external dagger engine . are the CLI params ( --quiet in this case) passed on to the engine ?
yes they are. --quiet doesn't have an effect in non-tty outputs currently
Hi ! Yes , thanks for asking, at the end as we have multiple layers and the agent runs in an ephimeral container I just injected the .git-credentials with the token and url just before run dagger call in the same script task in the azure pipeline
I have a weird issue with dagger cloud.
I have my CI agent running my dagger function. the dagger cloud token is set. The logs are providing me with a dagger cloud trace URL which is working. But the trace is missing from the list of traces in the dashboard. Any obvious reason why this happens ? If i use the same token on my local the trace shows up fine
@sharp marsh have you had any issues running k3s via dagger on GitHub hosted runners?
I'm getting this error, which implies that the k3s server never started correctly, and therefore didn't create the kube config in the cache volume?
Error: process "cp /cache/k3s/k3s.yaml k3s.yaml" did not complete successfully: exit code: 1
The other logs suggest that it's an issue listening on port 6443?
Where are you running your agent, GitHub Actions? The traces in cloud are broken out into local or ci. CI is depending upon a specific environment variable from the environment (e.g the Github Action runners set a specific variable that cloud checks for). So you might have them but they are showing up under local?
Can you send me a link to a trace that you are not seeing in cloud?
@marcosnils have you had any issues
Hi π which CI platform is this running on? If for some reason the CI platform isn't fully supported for dagger cloud yet, the trace might be "orphaned" and visible if you add ?orphaned=true to the URL. If that's the case, we'll figure out what to change to get them to show up properly π
Seems like azure pipelines from previous message. We have got this to work with some env vars, maybe worth documenting how.
Seems like azure pipelines from previous
quick Q, everything worked swimmingly before upgrading to v0.18.3 this morning, now I'm getting this error:
Error: failed to serve module: input: moduleSource.asModule.serve module runme (source: github.com/runmedev/runme | pin: 280c226fe7bf495c0a5bb6e4d8ec2caea7d5ea51) already exists with different source github.com/runmedev/runme (pin: 15b94571d4dc35688de18d276b0d3162a2177c34)
already purged the cache etc
I'm poking around but can't seem to find the "problem"
oh wait, dagger install github.com/runmedev/runme fixed it π€¦ββοΈ
sorry about the noise π - using the linked module name now to avoid the mismatch
HI @neon warren it's running in a custom azure devops build agent and talking to an external dagger engine. I'll send you the trace in a PM π
Some of you may remember this: https://openmeter.io/blog/supercharge-helm-chart-development-with-dagger (it was very well received by the community).
I turned that into this: https://labs.iximiuz.com/tutorials/testing-and-releasing-helm-charts-with-dagger-4dcb152e
Love @keen brook labs so far!
I've been getting this error.
Error: failed to forward exit code: failed to close terminal
When using --progress plain and withExec(['pnpm', 'test'], { expect: ReturnType.Any }).
https://github.com/dagger/dagger/issues/10129
yeah - --interactive isn't currently supported with --progress=plain
you should have got a message to that extent, but looks like it was getting lost in the ether: https://github.com/dagger/dagger/pull/10165
Does this also cause an issue like when running processes in the background, e.g. starting a service in the background then running a test against the service?
it shouldn't no, it's just when there's something "interactive" presented to the user - like dagger shell or --interactive
Hey ! I'm not sure what i'm doing wrong here ? I'm trying the quick start for llm. using qwen2.5-coder:14b
with-prompt "What tools do you have available?" 0.0s
! input: llm.withPrompt.id select: POST "http://172.26.15.221:11434/v1/chat/completions": 400 Bad Request {"message":"json: cannot unmarshal array into Go struct field Message.messages.content of type
! string","type":"invalid_request_error","param":null,"code":null}
Missing Traces
we solved it. Old version of ollama was the issue π
I'm going through the lab now @fossil pine , nicely done!
Expect some more content in the near future!
following up here - after spending a couple hours today working on my CI setup w/dagger, I already love Dagger Cloud traces way more than plain logs π it's soooo cool
Thanks so much for the feedback, its always really nice to hear π
@slender star @slender charm @warm temple @neon warren are live coding right now. Join them here! https://www.youtube.com/watch?v=hiHkTcH6L5o
ποΈ New to streaming or looking to level up? Check out StreamYard and get $10 discount! π https://streamyard.com/pal/d/5666991066710016
Hi - I was wondering if there is a commercial support offering for dagger engine if we install on kubernetes and run ourselves? Thanks!
is there some way to have a fallback cacheVolume? say I want for my build to have different cacheVolumes for each branch, but on initial build, I want to copy the cacheVolume from main?
you should be able to do this programmatically. You can create cache volumes with arbitrary keys (namespaced to your module), and you can arrange for 2 volumes to be mounted in the same container, then execute a command that copies from one to the other.
Mhm yeah that makes sense. Thanks!
Hey! Yes we have a couple of different options can you DM or email me so we can learn more?
Beginning of dagger's hands on lab at Devoxx FR π
In this doc https://docs.dagger.io/ci/adopting Day 2 is a typing mistake? and if no then where is day 01?
not a typo, it's a (maybe outdated?) term for "things to do after you've finished the basic setup [on day 1] and going into production and switching from setup/testing mode to operation mode." but this is a good indication that a title like "Prepare for production" could be clearer
Does Dagger Cloud support otel span attributes / events? I can't seem to find a way to view anything other than the name
that's a longstanding TODO - sorry π the data is recorded but I haven't figured out how to represent them in the UI yet. Events would make sense as little dots/ticks along the timeline bar, same for logs, but things get complicated at higher scales (many attributes, tons of logs)
ahh gotcha. I kept thinking I'd be able to click on the name and see attributes (or at least see them in the full page view of a span)
honeycomb has a pretty decnet ui where it shows the details on the right
yeah we use honeycomb internally π the span duration distribution is pretty neat too, another one of our TODOs (analytics, more generally)
Hello, great to discover Dagger.
What is the syntax to pass an array of strings to as-service --args in the dagger shell ?
try the CSV format
--args mycommand,somearg, or --args mycommand --args somearg
Am I supposed to be able to surface a service to my MAc host when using Podman ?
Using Dagger? Yes, you can call the Service.up or Container.up function, for example:
dagger -c 'container | from nginx | up'
The use of podman is irrelevant - this should work the same regardless of how you provisioned the dagger engine itself. (Dagger does not use podman to execute containers; it supports being provisioned itself as a privileged podman container, which is probably what you're doing. From that point on, it takes over and ignores podman completely)
I did not understand the difference between service up and container up...
@winter linden Thanks for your help !
container up is only a convenience shortcut for container | as-service | up, they are identical. Just a little shorter π
Ok thanks
On this note, what is doing port forwarding: dagger client or dagger engine? I.e. which part of dagger should be in the subnet that will be using that service?
(Service is an abstract type which can be backed by a container, or by eg. a tunnel to an external service)
The client.
Btw: this is also true for unix sockets. So unlike docker / podman, you can mount unix sockets from your client machine into a container, and it will work as expected, even if the engien is in a VM or remote machine, without proprietary shenanigans
@solomon Where should I add a hint for that syntax in the documentation ?
the string array for dagger shell
Just curious, are there any plans for a v1.0.0? How far in the future do we expect to have the first full version? π
I agree, i think this needs renaming completely
Its also confusing because day 2 to some might think "where is my day 1 tutorial"? but also on the day2 page, it mentions "phase 1: research"
Probably it should say "Next steps" - i feel like it might have even said something like this in the past?
Basics -> Build (an Agent or a Pipeline) -> Next steps
Can this help to solve https://docs.deno.com/examples/honeycomb_tutorial/
Just wanted to help in context. That's it. Thanks
Is there a way to set docker flags on dagger container runs? I'm trying to run playwright tests, but the playwright docs recommend setting --ipc=host -- can i set this for dagger?
I created another one: https://labs.iximiuz.com/tutorials/running-dagger-pipelines-on-github-actions-3ce5f37d
It's not completely ready yet, but I'm not super satisfied with the result so far, so feedback on how to improve it is welcome!
and my docker daemon keeps crashing / runs are taking a verrry long time. i've thrown as much memory at Docker as I can. This runs natively just fine
Dagger at DevoxxFR π
Can Dagger be used to create development environments in the same way Docker is typically used?
e.g. You start a container with runtime dependencies and bind mount your source code into the container, then edit the code on your host and observe some sort of hot-reload that updates your service/app?
No hot-reload yet. It's on their radar though - https://github.com/dagger/dagger/issues/6990, https://github.com/dagger/dagger/issues/9934
sorry I didn't understand the question
what is everyones favorite ollama model for dagger and coding?
Trying out qwen 2.5 coder at the moment
I don't personally use ollama, but those who do seem to use a lot of qwen coder and llama
Thanks Solomon! Dagger is becoming one of the more popular topics on the platform team I am in in a fortune 1000 company.
Well that's exciting π Let us know if we can help in any way
There are other F1000 engineers lurking here, in case you want to exchange tips and get their experience
A line i've told my colleagues this week is "Dagger Agents Are All the AI You Need"
could you explain why? (i'm the marketing guy and i want to help you spread that message π )
Thanks @small river for the write-up about your demo at the London Hack Night! https://courtcircuits.xyz/articles/hack-night-dagger
He'll be presenting this demo at the May 8th Community call, so make sure to join - https://www.youtube.com/watch?v=v8Zn1ZU5tP8
Want to join us for Hack Night? Our next on is in SF https://utm.guru/hacknight
Thanks @Courtcircuits for the write-up
(last one as DevoxxFR is over)
@honest pebble presenting dagger
Finished the remaining sections. If you have any thoughts, don't forget to share them. π
Because the agents can be called from the Dagger shell and do absolutely anything you want to use an agent for (pending improvements to MCP and A2A) in any env (cicd builds, any provider). Sure my statement is a bit hype right now but Ive reviewed 20 open source agentic frameworks the last 6 months, they all the do the same thing to one level of maturity or another. As the dagger capabilities mature dagger agents will be able to do everything a Copilot does, I would give it 6-9 months based on current rate of progress. I also know I'll be able to afford to scale dagger agents in a multi-agent paradigm world which is likely going to be major innovation trend of 2026.
still struggling with this if anyone has any ideas πΏ
does dagger support otel-config.yml to behave as otel collector?
still struggling with this if anyone has any ideas πΏ
Is there a repro I can run?
dagger needs an official chainguard image
You're on fire @fossil pine π
I have a new toy, so I'm playing with it π
@fossil pine now I'm running into exactly the update problem you were asking about earlier
I don't know if it's intentional, but it doesn't seem intuitive.
Oh, and if you want a quick dagger playground: https://labs.iximiuz.com/playgrounds/dagger-bare-092a14d1
(compared to the official, this doesn't have podman, nerdctl or k8s)
dagger needs an official chainguard
@heavy gazelle: @slender star: o/
@pseudo stream, and thanks for the prompt review. There are some tests failing and some typos in the commit message (which I can fix if we're fine about rerunning the tests)
β β Container.withExec(args: ["apk", "add", "--no-cache", "git", "helm", "k9s", "kubectl"]): Container! 0.1s
β ! process "apk add --no-cache git helm k9s kubectl" did not complete successfully: otel tcp proxy listen: context canceled: context canceled
Is there a way to turn off tracing? I already have DAGGER_NO_NAG=1.
The otel mention there is just internal plumbing that forwards telemetry to your local CLI
Man you're on a roll!
I'm just getting started π
I noticed at least 3 different people asked about that, any chance we could clarify those error/warning messages so that it's overwhelmingly clear that they're about internal communication?
sure
thank you ππ
Good question about plans for a v1.0.0, hopefully someone will answer you!
Is there a way I can get the Image digest(SHA) of a container that was built using Dagger?
Hey folks is there somewhere a guide for custom applications to call third party modules? https://docs.dagger.io/api/sdk#custom-applications
I know the docs state there is no "direct" way but it's essential a graphql query? so there must be a way? 
If you're happy with a raw graphql query, it will work out of the box. What's missing (for now) is the client generation tooling, so you can get the same generated client library for external clients, as you get for modules calling other modules
I'm happy with a raw graphql query if it satisfies the purpose β just cannot find any docs on how to make the generated tool calls (from the codegen)
Like the .dag.Env().WithWorkspaceInput or WithWorkspaceOutput
Thanks! Though after this long of listening to crickets chirping around my question I don't feel like holding my breath waiting for an answer π
Sorry for missing this. The channel has been busy lately!
We don't have active plans for a 1.0. We'll get around to it eventually. Dagger is already used widely in production, and we manage it accordingly. But the label "1.0" is a can of worms, because people have wildly different interpretations of what it actually means. And we are trying to delay the distraction of addressing those different interpretations.
Hey everyone! We have quite the agenda for tomorrow's community call at 9 am PT.
On tomorrowβs Community Call:
π€ @urban anvil replays his work with the Robot Operating System (ROS), showcasing reproducible robotics workflows with Dagger.
πΎ @sonic obsidian dives into cosmic horror and LLMs, generating and running a full-stack app from a single SQL file using Dagger.
π§ @fierce sandal builds an offline AI tutor with Dagger and Deepseek
Watch live on YouTube or X and join the conversation! https://www.youtube.com/watch?v=BEcD7exeafU
We're seeing the following error when trying to add a new member/invite to our Google OAuth'd Dagger Cloud setup
Uhm why am I getting this every now and then when working with secrets? Secret.plaintext: runtime error: invalid memory address or nil pointer
mhm it seems to not happens naymore 0.18.4
I'm trying to use this npm module in conjunction with my dagger functions (using TS).
https://www.npmjs.com/package/config
When I try to user the module via import config from 'config', the config.get('some.key') I get the following error.
β .configFile: String! 1.7s
β WARNING: No configurations found in configuration directory:/scratch/config
β WARNING: To disable this warning set SUPPRESS_NO_CONFIG_WARNING in the environment.
β Error: Configuration property "service.repository" is not defined
This module expects config files to be located at ./config/*.json which I have created.
I can see from the error that it's looking for the config directory at /scratch/config, so I assume that this Node.js module is executing in some sandbox container that doesn't have the files that are present in the dagger project directory?
_EXPERIMENTAL_DAGGER_CACHE_CONFIG this only affects layer cache right? not dagger cache volumes?
npm package/config only in scratch
yes, correct
and there is currently no built-in way for remote cache volumes right?
Do we have sections or page in docs which give the list of such experimental features?
@here Starting now!
π
where
got it
Thank you @urban anvil , @sonic obsidian , and @fierce sandal for the demos today! For those who missed it, you can view the full recording here: https://www.youtube.com/watch?v=BEcD7exeafU
Join the Dagger team and fellow Daggernauts for our bi-weekly Community Call! Stay up-to-date with the latest product enhancements, discover innovative use cases, and gain valuable insights from community demos. Whether youβre new to Dagger or a seasoned user, thereβs something for everyone!
For anyone interested here is my repo and some of the blogs I wrote regarding this:
Repo: https://github.com/EmmS21/fundAI
Building the Dagger Agent to support the first offline tutor: https://emmanuelsibanda.hashnode.dev/fundaai-an-ai-school-building-the-first-ai-tutor
Building the "virtual campus" https://emmanuelsibanda.hashnode.dev/fundaai-an-offline-ai-school-for-self-driven-learners-across-africa (I was inspired by Daggerverse in this regard - a "galaxy of AI tutors" to teach self-driven kids different skills I believe will help them navigate the tech world)
Building some of the "supporting infrastructure": https://emmanuelsibanda.hashnode.dev/funda-ai-building-a-laptop-powered-by-ai-to-help-students-in-africa-learn
Exploring different LLM models: https://emmanuelsibanda.hashnode.dev/building-offline-ai-tutors-boosting-the-next-generation-of-african-students
Hi, can I get help being added to a channel? I updated my roles to include Typescript but I'm not seeing a typescript specific channel.
updating Discord roles
Hey @everyone!
Just dropping in to officially announce our new LLM primitive in Dagger! Some of you already found this in v0.18 a few weeks back, but now we're making it official.
We've added native LLM support directly into the Dagger engine. This means you can build AI-powered automation right into your workflows - for testing, deployments, code fixes, and more.
LLMs now work just like any other Dagger primitive - they can interact with containers and other resources while running in code-defined environments with proper isolation and observability.
Check out the details:
And share with your friends!
- On X: https://x.com/dagger_io/status/1915465500852658307
- On LinkedIn: https://www.linkedin.com/posts/dagger-io_dagger-agents-in-your-software-factory-activity-7321233202402996224-alZJ
Can't wait to see what you all build with this!
One of our very own Dagger Commanders, @karmic sand, is speaking at AI Native DevCon.
It's a virtual and free conference, so anyone can register to watch here - https://ai-native-devcon-2025.heysummit.com/talks/agentic-workflow-powered-by-dagger/
What am I supposed to do if I'm creating a type that returns a JSON parsed value, it seems any isn't acceptable.
/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:278
throw new IntrospectionError(
^
IntrospectionError: could not resolve type reference for any.
at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:278:13)
at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14)
at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14
at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14
at new DaggerModule (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:134:10)
at scan (/src/dagger/sdk/src/module/introspector/index.ts:18:18)
at async connection.LogOutput (/src/dagger/sdk/src/module/entrypoint/entrypoint.ts:17:26) {
cause: undefined,
code: 'D110'
}
Node.js v22.11.0
Is there anyway to get access to the default SSH socket, that dagger implicitly has access to by way of it being present in the environment it's executed without it being explicitly passed in to a function as an argument?
Like when you pass a Git repository URL as a Directory argument, it provides the socket.
git(
β β keepGitDir: true
β β sshAuthSocket: Host.unixSocket(path: "/tmp/ssh_agent.sock"): Socket!
β β url: "git@github.com:jshbrntt/test.git"
β ): GitRepository!
Is there anyway to get access to the
what's the right way to load a git repo into a dagger function call? I'm trying Directory but it's not including my .git in context
what are you trying to do? a lot of dagger is git-aware, but in it's git-awareness it's gonna strip your local git state as it passes it into the container
i'm trying to run npx semantic-release which relies on git to parse commits
are you passing the Directory as a function argument? or are you retrieving it from somewhere else like a git call?
I'm trying to pass as a function arg
@winter plank if you pass a directory which contains a .git folder you should see it in the container
just check that you don't have any exclude options that might be excluding the git dir by any chance
The directory you pass to the function has to be the top level directory that has the .git folder. Sub directories won't work. So you'd have to pass the root dir and exclude what you don't want
If you're into AI agents, you probably heard of SWE-bench, the de facto standard benchmark for coding agents.
Well it turns out that SWE-bench has a lot of messy artisanal scripts for running its evaluation workflows in containers... So we thought, why not Daggerize it? π
Here is the PR by @cloud canyon : https://github.com/SWE-bench/SWE-bench/pull/386
If you're into this, feel free to follow the PR, try it out, and leave a supportive comment or emoji - without spamming the project if course!
Hey dagger team any updates on dagger reload/watch if yes please share. Thanks
is it possible to see dagger otel data in grafana cloud, if yes then how can we configure dagger for it? Docs?
yes, it's possible. You need to configure the corresponding OTEL exporter variables and Dagger will forward them to the specified collector accordingly. https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/.
There's no Dagger docs for this currently
Endpoint Configuration The following environment variables let you configure an OTLP/gRPC or OTLP/HTTP endpoint for your traces, metrics, and logs.
OTEL_EXPORTER_OTLP_ENDPOINT A base endpoint URL for any signal type, with an optionally-specified port number. Helpful for when youβre sending more than one signal to the same endpoint and want one...
Thanks a lot for your confirmation and i think it should be in docs and so i have created one issue https://github.com/dagger/dagger/issues/10280
contributions are also welcome π€
Our team specializes in Rust and TypeScript. Consequently, our contributions are focused on areas like TypeScript, Deno, and documentation, particularly supporting the Dagger ecosystem.
cc @heavy karma
Yes, I'll take care of it
I see there is a way to create a Directory via dagger shell, but I can't find a way to create a File.
completion
cache-volume
container
directory
engine
env
git
host
http
llm
set-secret
I'd like to create one with my predefined content from a variable (text value). Is it possible in dagger shell? Dumping file contents via with-exec seems quite annoying, because I have to escape all the bits and bobs to work with shell redirection.
with-new-file is what you're looking for π
dagger -c 'foo=bar; container | from alpine | with-new-file test.txt $foo | file test.txt | contents'
Nice!!
A few questions though:
- will it automatically become available in dagger shell?
- will it only work with text data, or binary as well? e.g. ZIP_DATA=$(base64 -d <<<"${DATA_B64}") ?
Anyone got an example of using the proxy module to proxy multiple services to a single service with a .dag script? Can the up function accept many --ports and just work?
Proxy module can just forward one service port to the host and avoid that question I presume, just struggling to get it working
Nice!!
In the LLM module... Do files in env have a size limit? It seems that there is something like that, and the limit is ~80kB
OpenAI and Claude seem to agree on the truncation size
The wrapping script is a straight-forward wrapper, it should not cause any truncations: https://gitlab.com/netikras/llm-toys/-/blob/main/dagger_agent/dagger_task.dagger
queried with: ' dagger-agent -i log=file://ci.log "There is a log file from a CI run. Try reading this file's contents. How many bytes do you see / can you read vs. what's the actual file size? I have a feeling that this AI agent has issues uploading the whole file." '
Dagger shell & directories/paths for dagger.File - Am i doing something wrong?
Does dagger support this natively or we need to config with config.yml file with this https://hub.docker.com/r/otel/opentelemetry-collector-contrib or with binary https://github.com/open-telemetry/opentelemetry-collector-contrib
Iβm really wondering how all of you did cicd for your dagger modules.
Are there demos of blogs or anything available on this subject?
We have some content in the docs here: https://docs.dagger.io/api/module-tests to get you started on tests and such.
You can also see how we test Dagger with Dagger on GitHub Actions in https://github.com/dagger/dagger/
Thanks, this is very helpful.
How does export work on directories when using it inside of a module? If I use the dagger CLI and run my command that returns a Directory | export it works like a charm. If I just alter that function to await output_dir.export(...), nothing shows up on my host machine
it's nested. It exports to the current client's host... which in the case of your dagger function, is your function's runtime container
since the function is in a sandbox it cannot access the caller's context. You have to return the directory and let the caller decide what to do with it
Is there a way to pass environment variables in by default?
In the same way you can pass through files and directories if they are default paths and in the current working directory?
https://docs.dagger.io/api/default-paths/
It is possible to assign a default path for a Directory or File argument in a Dagger Function. Dagger will automatically use this default path when no value is specified for the argument. The Directory or File loaded in this manner is not merely a string, but the actual filesystem state of the directory or file.
Gotcha thanks. I'll just have to keep the dagger commands handy in a README
No, there is an issue tracking that - https://github.com/dagger/dagger/issues/6723
@slender star @heavy karma @warm temple @neon warren are live coding right now! Join them here - https://www.youtube.com/watch?v=fJyE939YcqY
here is the link to the github repo from the video: https://github.com/jasonmccallister/fastapi-sample-app
I was curious, is there a way to do some kind of Hot Module Reload when working on and debugging Dagger modules? Right now my workflow when working on a module is to keep exiting out and then calling dagger to get back to the CLI and it has to load the modules each time. Is there a better way? Or is there a way to have the CLI watch the filesystem for modules it already loaded and if they change reload them to the engine (which is what I think is happening but cannot be sure haha)
@winter linden do we have a separate issue for just module reload while developing or would that be covered by https://github.com/dagger/dagger/issues/9934
I think there's a .refresh or .reload builtin no?
.refresh is exactly what I was looking for thank you
Anyone else struggle with getting dagger to pull private repos? doing --repo=https://github.com/myorg/my-repo#pull/number/head and i get this message:
! stderr:
! remote: Support for password authentication was removed on August 13, 2021.
! remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-
! repositories#cloning-with-https-urls for information on currently recommended modes of
! authentication.
! fatal: Authentication failed
``` but according to the docs (https://docs.dagger.io/api/remote-repositories/#https-authentication), i should be able to pull. I can run `git clone` just fine. Using dagger 0.18.5 (same issue on 0.18.4)
Dagger supports the use of HTTP and SSH protocols for accessing directories, files, and Dagger modules in remote repositories. This feature is compatible with all major Git hosting platforms such as GitHub, GitLab, BitBucket, Azure DevOps, Codeberg, and Sourcehut. Dagger supports authentication via both HTTPS (using Git credential managers) and ...
This seems like it works in Go, but I'm not having success with typescript:
@object()
export class Github {
private _container: Container;
constructor(
repo: Directory,
githubToken: Secret,
) {
this._container = this.baseImage()
.withSecretVariable("GH_TOKEN", githubToken)
.withDirectory("/src", repo)
.withWorkdir("/src");
}
@func()
pullRequest(): PullRequest {
return new PullRequest(this);
}
...
@object()
export class PullRequest {
private _container: Container;
private _prNumber: string | null = null;
constructor(github: Github) {
this._container = github.container();
}
hey team has anyone experienced a container CMD being executed twice with service binding ?
here's what my code looks like (running dagger 0.18.3)
func (m *RabbitmqDlqProcessor) Test(ctx context.Context) *dagger.Service {
rabbitmq := dag.Container().
From("rabbitmq:3.13.7-management").
WithExposedPort(5672).
WithExposedPort(15672).
WithEnvVariable("RABBITMQ_DEFAULT_USER", "rabbitmq").
WithEnvVariable("RABBITMQ_DEFAULT_PASS", "rabbitmq").
AsService(dagger.ContainerAsServiceOpts{UseEntrypoint: false})
_, _ = dag.Container().From("alpine:latest").
WithServiceBinding("rabbitmq", rabbitmq).
WithExec([]string{"apk", "add", "--no-cache", "curl"}).
WithExec([]string{
"curl", "-o", "/usr/local/bin/rabbitmqadmin",
"http://rabbitmq:15672/cli/rabbitmqadmin",
}).
WithExec([]string{"chmod", "+x", "/usr/local/bin/rabbitmqadmin"}).
WithExec(slices.Concat([]string{"rabbitmqadmin", "--host", "rabbitmq", "--user", "rabbitmq", "--password", "rabbitmq", "list", "queues"})).
Sync(ctx)
return rabbitmq
}
I think this is not available in docs, can you @heavy karma please confirm?
Yes we have left some builtins undocumented to allow for some breaking changes as we finalize the UX.
alright, thanks for clarity and so reload host directory is coming soon then?
π€
does v0.18.5 remove the need of sdk folder for monorepo with dagger? can you please confirm @wispy tapir
can we use github copilot cli in pipeline with dagger ai agents? any exmaple or POC?
The SDK directory is still required but it's no longer a subpackage, it now can be a bundled directory
For Deno you'll need to remove the workspace: - sdk key in your deno.json and run dagger develop, you should see changes in the sdk dir and the deno.json imports path will be updated π
Is there a v1 release coming soon π ?
I just ask because you said finalize the UX
in next version of dagger as experimental support possible for https://github.com/dagger/dagger/issues/9934 ?
can you call dagger functions from the cli across modules? like for instance, if I have m1 with function f1 which returns o1 -- and then m2 with function f2 which takes an o1 and an argument -- is that doable from a dagger-cli invocation?
or does this require a dagger shell session
2 different issues here:
- Composing function calls. Object IDs are not guaranteed to persist across dagger sessions, so you need to do it in dagger shell
- At the moment a module cannot use another module's type. There's an issue to try and fix that. The tricky part is avoiding dependency hell (https://github.com/dagger/dagger/issues/8529)
can we try this with https://docs.dagger.io/install#development-release ?
The undocumented builtins are all available in the stable release. They're just not listed in .help
so we can try it but it's not documented due to work in progress, understood correctly?
They all work, it's just that we don't guarantee that they will still have the same syntax in future releases, or even exist at all.
Here's a list:
β β .debug
β β .help
β β .echo
β β .wait
β β .cd
β β .pwd
β β .ls
β β .types
β β .refresh
β β .deps
β β .stdlib
β β .core
β β .shell
β β .prompt
β β .clear
β β .compact
β β .history
β β .model
β β .login
β β .logout
β β .module-install
β β .module-uninstall
β β .module-update
Wow...you made our team's day...thanks a lot...Dagger & Team Rocks
Sadly, Dagger AI agents can't run on edge clouds like Vercel or Deno Deploy due to their container dependency. Otherwise the core implementation can be a game chnager...
Why not run them on container infrastructure? Tons of options available
Running things in a container is pushing new age startup teams to use traditional clouds and they need to manage infra for it...
and such management is overhead. And so nowadays so many new companies and startups are choosing edge cloud only...
eg. supabase
WASM can/will solve this...
feel free to try porting dagger to wasm
and tell me how it goes π
(you can't)
agree still we are exploring and doint small experiments with WASM and new to WASM also as small team
if the dagger can run on top of WASI 0.2 specs then it can be solved without containers...
and that's the future also for run times and deployments also...
can we use this as of now with a dagger? https://docs.docker.com/desktop/features/wasm/
No. Dagger doesn't run on wasm.
ok thanks for clarity
In the future you could imagine that dagger functions run in wasm (but it would be a lot of work for not a lot of benefits). But even then, the core container API would require container access. And so many dagger functions today need to run containers.
By the way, all those serverless clouds are adding a container service too
Cloudflare with its container service. Vercel with its "fluid compute". Containers are here to stay
You need both layers
Agree
I can't even imagine where I would be without containers
probably still trying to configure my dev environment...
So happy I don't have to deal with "it works on my machine" anymore
Kinda related. I still struggle to see the value in running agents with Dagger over traditional LLM frameworks
Also what direction is Dagger going for right now? Is AI agents the main objective or still CI workflows?
We're focusing on embedding agent capabilities in CI workflows, and more broadly in all workflows adjacent to software development. Anything from QA, code review, developer support, security, debugging assistance, test generation, and of course vibe coding and associated environments.
But Dagger is a general-purpose workflow engine, that is very good at making your workflows repeatable, observable, portable and modular. Beyond CI and dev workflows, there's always been a long tail of other applications. I think we'll see the same thing with agents also
Anything that involves moving artifacts around or orchestrating containers, Dagger can probably help
@valid notch what kind of agents are you building?
Currently we are planning on enabling agent development org wide and I was looking into different modules/frameworks to get that going
I think from incident first responders to documentation helper could be some ideas I had in mind
Another observation is that most agent frameworks enforce a strong separation between "agent" and "tools", and typically have no visibility into what the tools actually do. By contrast Dagger offers a unified runtime across agent and tools - we think the distinction between them is arbitrary and will fade away. In Dagger, LLMs are just another system primitive, alongside functions - you can call a LLM from a function, and a LLM can call functions. That makes some problem that are very hard in other platforms, become very easy in Dagger. For example:
-
Deep tracing. Since everything is a system primitive, everything can be traced at the system level. When you build an agent in Dagger, the trace shows you everything: what you told the LLM, what the LLM told you, what tools the LLM called, and what the underlying tools actually did. If some of the functions are themselves calling more LLMs (multi-agent), you get tracing of all that out of the box
-
Multi-agent works out of the box. LLM calls function, function calls LLM, and so on as much as you want
-
Cross-language ecosystem. Most AI frameworks are mono-language. Great for monoliths, not so great for platforms. Dagger's module ecosystem is cross-language by design. So agents written in any language can call tools written in any language
I can definitely see using Dagger to embed agents/LLMs into my CI pipelines, something like a custom Ellipses
I love how easy it is to use Dagger for build pipelines, just started this week and already have a setup for FastAPI to generate an openAPI spec, using a generator to generate a typescript client for it, building that typescript application into a static bundle, and then copying that back into my python application and having it served from FastAPI as an embedded UI
@fossil pine I've been unable to upgrade to dagger 0.18.5 from 0.18.4 due to the aws-cli module:
Error: failed to serve module: input: moduleSource.asModule failed to load dependencies as modules: failed to load module dependencies: select: failed to call module "awscli" to get functions: process "tsx --no-deprecation --tsconfig /src/shared/dagger/awscli/tsconfig.json /src/shared/dagger/awscli/src/__dagger.entrypoint.ts" did not complete successfully: exit code: 1
going back to 0.18.4 fixes the errors
Id be interested to get some public opinions on this. I have a series of intermediate artifacts in my Dagger pipeline. Some of those are useful to have when you are in dev mode like generated code. For example when developing on my Typescript application, it is nice to have the generated version of server present for autocompletes and stuff. The overall build of my Dagger pipeline will of course place the most up to date generated code into the right place when the time is right, but at dev time it is inconvenient to be building blindly knowing that the Dagger pipeline will fill the holes at the end.
I use a few export statements to refresh these dev artifacts when I need to. Question is, should I commit these artifacts to Git? Or should I put them in the .gitignore and trust that they can be rebuilt exactly from the source? On one hand the generated code is a build artifact and I would refrain from putting it in git, but on the other its nice to have in the local filesystem.
A famously contentious issue π But just to clarify, this is not a Dagger-specific question, but a question of development best practices independent of any particular tool, do you agree?
Or, do you mean specifically Dagger module generated code?
Oh yes this is not a Dagger-specific question, more so one of any system with generated code/artifacts like it. I just thought the community here might have some interesting takes on it.
I believe you are right π
The two main preferences I've seen:
-
ignore all generated files
-
commit all generated files, and mark them as generated in
.gitattributes(https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github?utm_source=chatgpt.com)
In my experience it's not a no-brainer: we ourselves struggled to get consensus on a default for our own generated clients when calling dagger init. We flip-flopped a bunch of times between these two approaches.
Thats an interesting #2 I've never used that before. Do those files still contribute to merges even if they are not in the diff?
I think I'm leaning towards ignoring them all. If you commit them I feel like you need a precommit hook or action to generate everything to ensure that what is committed to the repository does indeed match the source code. That being said, some build tooling automatically culls ignored code, and so you have to be careful to make sure that your generated code gets included in final bundles
Yeah I tend to ignore them also (not sure how standard the "linguist" system is beyond github)
Also with Dagger it's easy to have a function that spits out the generated code in a reproducible way.
I think that is probably the approach I will take too. Thanks for the input
+1 on ignoring generated files also as long as you have an easy deterministic way to re-generate them. What I'd suggest avoiding doing if possible is a hybrid approach as it becomes a topic of endless debate about what should be committed and what should not. You know... tabs vs spaces kind of thing π¬
Is there something wrong with the Daggerverse web frontend? For example, this query:
https://daggerverse.dev/search?q=rust
I get the attached image as results. Under the search bar, it lists "2 matches", but the first 4 are actually about rust. What are all these other dagger-dev listings about?
QQ: Can the "Publishing on Use" be disabled?
https://docs.dagger.io/api/daggerverse/#publishing-on-use
I will be building some functions and testing them in multiple repositories. In the meantime, I want to refrain from getting immature stuff in the Daggerverse. I only want to have this published when decently stable.
Hi π @tender goblet. Search improvements are being worked on right now (shipping soon) since we want something better than the full text search we have currently. The dagger-dev module does have mention of the Rust SDK, so matches today.
The 2 matches below the search box pertains to matches on the dagger docs site, specifically the cookbook. It was a quick improvement so folks could find modules in daggerverse and relevant docs in the cookbook.
We want to improve the overall quality of search results and the bi-directional linkage between daggerverse and docs.
Weβll reach out to you for feedback once we ship the first improvement.
Donβt publish yet
I'll be at Cloud Native Days Romania next week (presenting a workshop about Dagger on Monday).
Ping me if you are around and want to chat.
Is there a way to stop a service started from dagger shell with | up --ports 8080:8080 outside exiting the shell ?
Seems Ctrl-C is the way. But there are UI glitches.
Well not really reliable. Worked only once.
Does anyone have tips to reduce dagger/dagger-for-githubdagger/dagger-for-github@8.0.0 verbosity? e.g. https://github.com/kaihendry/dirk/actions/runs/14854948549/job/41705946306
@patent plover not currently possible to reduce the verbosity. If you're using cloud, you can use the -s flag to make it silent so it doesn't fill the GHA logs unnecessarily which is what we do
Hey! Would anyone have a hint on how to create many cache layers on a dagger pipeline in a simple/efficient way? π
We're trying to reproduce some issues with our engines and the GC and need some easy way to create a cache over 300gb

How can I create a new File in my pipeline with just some generic text? I am trying to make sure that all output directories of dagger pipelines are properly gitignored, so I want to include a .gitignore file in the build directory with just a simple "*" in it. Normally I would just create this file local and mount it into the directory, but since its a .gitignore with a star in it, that doesn't work so well lol.
Man i keep finding myself reaching for some api like .repeat where i need to loop over something in my builder pattern
Can I take a .env file and populate a container environment directly?
there's no native API for that but writing a function that does that should be straightforward
yeah that would be nice π
Here's a nice hack: the dagger API natively supports fan-out.
If you call a function that returns an array of objects, you can chain a follow-up function call and it will be applied to each object in the array.
I could use some help here https://github.com/dagger/dagger/issues/10347 struggling with my first dagger experience for an entire day now trying to make it work. Might be very well a user mistake on my side or a bug.
π Module arguments always nil or empty...
- When passing a container as input to a module function, what is the best practice to assert that it fulfills some prerequisite ? For instance, I would like to check that some directories or files exist in the input container.
- When working on a module, is there a better way to reload it than quitting the shell and launching it again ?
The best practice would be to implement those checks in your function, like you would in regular code. Once you have a container object, you can inspect its filesystem and so on.
Note that we're missing a core function to check for the existence of a file or directory (we have an issue to fix that) but you can simply try to read the file's contents (Container.file("foo/bar").contents()) or list a directory's entries (Container.directory("foo/bar").entries()) and check for error
You can run the .refresh builtin command. It's hidden from .help because its syntax might change - but it does work
I was wondering if I was missing the function that will come π
Great, that feels much better than what I was doing.
I think in the future it might become automatic? cc @pseudo stream not sure if that's an easy follow-up to live reloading directories?
after .refresh, if I run the same command again, I get the cached result, is there a way to run the same command and force computation again ?
What is the way to stop a running service started with up --ports ?
ctrl+c is the way
I am in Ghostty and tmux on MacOS. Ctrl-C is not a reliable way to stop a service in this context.
Yeah also Ctrl-C quits the whole shell for me
is that a tmux thing? I'm on ghostty + macos and Ctrl-C is what I use
Not tmux in my case
ghostty + macos -> Ctrl-C quits the whole shell
Ok I just recorded it, and this time it didn't quit... I think I figured it out:
- If you Ctrl-C while the service is running in the background (ie. you're in the editor) then it doesn't quit the shell
- If you Ctrl-C while the service is running in the foreground (ie. you're in view mode) then it does quit the shell
ah I see the distinction, yes I was in background I guess. I didn't give any additional inputs between | up and Ctrl-C
quitting out of the shell entirely with Ctrl-C from foreground feels like a bug to me. wdyt?
While running a function in shell and you're in nav mode (you hit escape), hitting q or Ctrl-C exits shell. A better behavior would be to quit the currently observed process and return to input...
Hello everyone!
**π Dagger Community Call tomorrow at 9 am PTπ **
We look forward to seeing everyone there!
What's on the agenda?
Hacking Dagger to play StarCraft
@small river, Dorian & Mathias boot a full Windows XP VM in Dagger, mount the StarCraft ISO, and stream gameplay inside a container.
Smarter Renovate with Dagger
@split olive shows how he used Dagger to fix Renovate by building a bot that batches updates by module instead of spamming 22 PRs for every Go lib. Itβs modular, efficient, and way less noisy.
I'm trying following
$ dagger call --aws-access-key-id env://AWS_ACCESS_KEY_ID --aws-secret-access-key env://AWS_SECRET_ACCESS_KEY --aws-session-token env://AWS_SESSION_TOKEN aws-container with-exec --args ["aws", "sts", "get-caller-identity"] stdout
β connect 0.1s
β load module 0.5s
β parsing command line arguments 0.0s
! unknown command "sts," for "dagger call aws-container with-exec"```
What is the correct syntax to pass in the with-exec args? it now fails with sts is a unknown command
This is what help shows
--args strings Command to execute. Must be valid exec() arguments, not a shell command. Example:
["go", "run", "main.go"].
I have also considered using the dagger shell so I can use pipes and cleaner syntax, however then I can't do following in my GitHub workflow
- name: AWS caller identity
id: aws-caller-identity
run: |
caller_id="$(dagger call \
--aws-access-key-id env://AWS_ACCESS_KEY_ID \
--aws-secret-access-key env://AWS_SECRET_ACCESS_KEY \
--aws-session-token env://AWS_SESSION_TOKEN \
aws-container --env environments \
with-exec --args aws sts get-caller-identity \
stdout)"
echo "caller_id=${caller_id}" >> $GITHUB_OUTPUT
- name: Echo caller ID
run: |
echo Caller ID: ${CALLER_ID}
env:
CALLER_ID: ${{ steps.aws-caller-identity.outputs.caller_id }}
Trying to migrate some logic to dagger step by step
it's with-exec --args aws,sts,get-caller-identity (comma-separated)
sorry about the misleading help message
There are some examples of array arguments on this page which should help: https://docs.dagger.io/api/arguments/#array-arguments
@here Community Call starting in a few!
Youtube: https://t.co/ZinIGcp1dg
X: https://x.com/dagger_io
Hello.
This is the repository of my Dagger Renovate module I showed: https://github.com/chrira/dagger-renovate
As an example, it is used inside this module as renovate workflow to update itself: https://github.com/puzzle/dagger-module-helm
Can you please help us with sample code to make .refresh run, we tried but failed...
we badly need this feature reload host
Problem When calling Host.directory() or Host.file(), I get a one-time snapshot of the file or directory, and it will never change for the whole session. This hasn't been too much of a problem ...
Thank you @split olive , @midnight rock , @small river , and @slender otter for demoing at the Community Call today!
If you missed it, you can check out the recording here: https://t.co/ZinIGcp1dg
Demo snippets will be up tomorrow!
StarCraft in a container. Renovate reimagined. What happens when your automation is just code?Join the Dagger team and fellow Daggernauts for our bi-weekly C...
I'm not sure where the "-s" goes
dagger -s
Via a GH workflow? https://github.com/kaihendry/dirk/blob/main/.github/workflows/dagger.yml
Ah, if you're using the official github action then I think you can use the args: field:
- name: Hello
uses: dagger/dagger-for-github@8.0.0
with:
module: github.com/shykes/daggerverse/hello
args: -s
call: hello --greeting Hola --name Jeremy
cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }}
version: "latest" # semver x.y.z
we could add a silent field
I'm already using args with 'go-program --assignment "write me a curl clone to a main.go ensure workdir points there" file --path "./main.go" contents' π€
if you add -s at the beginning of your args field, it should work I think
like args: '-s go-program --assignment... guess I can try π
@patent plover oh wait, I just checked and there is a dagger-flags field that is perfect for this
Thanks, it's working! https://github.com/kaihendry/dirk/actions/runs/14926296423
Btw I'm struggling to understand what people are using dag.LLM for. Initially I thought it was helping to create CI/CD pipelines, but now as I know it, all I can think of using it for is to run tests against different models?
You can use it for encoding agentic loops into repeatable functions, then incorporating these functions into your CI and dev workflows.
There are a few examples here: https://docs.dagger.io/examples
Guess I should give https://github.com/samalba/agents/tree/main/dockerfile-optimizer a whirl
Contribute to samalba/agents development by creating an account on GitHub.
For example you could write an agentic function to:
- review code on demand
- generate docs
- do QA on an artifact
- inspect a project and generate a CI workflow
- generate a changelog
- help you navigate a codebase
- read a github issue and implement a solution
- add tests
The Dagger CLI also has a builtin chat interface to drive a dag.LLM instance directly. Basically an interactive command-line agent which can call the dagger functions in the environment. Comparable to claude code, openai codex or goose
Lastly, we are adding MCP server support, so that you can also connect your Dagger environment to external AI apps
I'm noticing that dagger is updating my function signatures with every call to dagger functions or dagger call <function-name> --help.
I used to need to call dagger develop for it to update function signatures.
Is this an improvement that has been made recently or have I broken something? π
Maybe I am thinking of dagger in the wrong way, but I think of it as a way of doing GH workflows locally. So for example "inspect a project and generate a CI workflow", would this create the .dagger?
Today, this is something that you do. We're working to make it easy for an agent to do to any project.
- To "daggerize" your project today, run
dagger init --sdk=go(for example) in your project dir, and you'll have a new.daggerdirectory with a new Dagger module with a couple of sample functions. - Create
lint,build,test(for example) functions using the Dagger SDK. The CI quickstart takes you down that path: https://docs.dagger.io/quickstart/ci. - Now you can call your
buildfunction locally or from any CI, like GH actions workflows, for example.
The near future state is that you would use an agent written in Dagger to examine your project, determine how to do lint, build, test (or whatever) in Dagger, and it would write the module for you, and maybe offer a PR π
Yeah some CI/CD review agent would be nice. Typically I work with clients to improve iteration speed / safety. Automating my tedious work would be nice.
I'm noticing that dagger is updating my
The "daggerize any project" agent is something our team is working on, but you can build review agents or any other agent you need today! Here's the AI agent quickstart: https://docs.dagger.io/quickstart/agent?sdk=go and some example projects: https://docs.dagger.io/examples#ai-agent-examples
The same qualities that make Dagger excellent for build and tests, make it great for AI agents. Running them in CI or dev environments is a natural fit.
Hi babes, i'm back! β€οΈ so happy to be using dagger. Just trying to understand how to configure host resource access to Dagger containers. We are hoping to use Dagger to run encapsulated workflows with full access to GPUs when they exist (we can ensure they run serially / don't compete for GPU usage in our orchestration scripts). Is that possible ? Default?
Welcome back! For GPU access, there is some customization required. Here's the doc page: https://docs.dagger.io/configuration/custom-runner/#gpu-support
Whoa, this new modules scanning feature is pretty cool!!
This the daggerverse?!
Dagger Cloud, we shipped a new feature yesterday
Ah, looks good at a glance!
Thanks! We're announcing it monday.
There's actually 2 features:
-
A private module catalog, continuously updated from changes on your git repos. Each module gets a generated API docs page like on daggerverse, and an activity feed with new versions. You can also navigate versions and dependencies.
-
module insights show traces in the context of your modules. So you can see in real-time who is using your modules and how; see what version is being used, how well it's performing; and troubleshooting errors
Infrastructure-wise, it adds a complete event routing layer to Dagger Cloud, which opens many exciting possibilities π
That second point is going to be incredibly useful
Modules feature feedback
βοΈ It's live now! Looking forward to hearing everyone's feedback.
**Calling all SF/Bay Area Daggernauts! **
We're hacking in your area this week. If you haven't already, sign up for the SF Dagger Hack Night! https://lu.ma/p85doawg
Gitlab π ?
Not yet supported... But coming soon!
Actually I believe there is a fallback to vanilla git server with polling? cc @rigid pebble
No fallback yet!
"coming soon" it is, then
Module Catalog can replace the need of npm like registeries?
is this coming this week? https://github.com/dagger/dagger/issues/9934
1000X better DX, we can create multiple products into dagger cloud. Charging very nominal like $1/month but can be another product like google cloud secret manager but for devops
https://github.com/dagger/dagger/issues/10388
Problem Current Dagger pipelines lack a built-in, seamless, and secure method for handling sensitive information like API keys and database credentials across various execution environments. This c...
@chilly arch @winter linden We would love to give some feedback for this direction whenever you guys have time for conversation. Thanks
@modest pier can you please share any update on top of this? PLEASE
Thank you for creating the issue with all those details! We'll reach back out if we need more context.
**AI Native DevCon Livestream happening at 12:35 pm PT today! **
Join here - https://ai-native-devcon-2025.heysummit.com/talks/agentic-workflow-powered-by-dagger/
Join @karmic sand as he shares how he is using Dagger and AI to create scalable, distributed workflows to automate and improve processes.
Hi! I wrote a new tool on top of Dagger, using a declarative config: https://github.com/vbehar/mason
And I also wrote a quick blog post explaining why: https://whtwnd.com/vbehar.dev/3lp2uqrwpbo2i
Early release, but you know what we say... release early, release often π
Declarative build tool based on Dagger. Contribute to vbehar/mason development by creating an account on GitHub.
Mason: a declarative build tool on top of Dagger
I wrote something. A build tool. A declarative build tool on top of Dagger.
Why? Because I really like Dagger, but as I tried to spread its usage at work, I found that in its current form, it was difficult to scale its deployment.
My main concerns ...
Nice work! Love that stage based output. It would be amazing to have that in the native dagger TUI.
Great job @karmic sand !! Live demos are always fun, aren't they? π Great job telling the story, and showcasing what can be done. Looking forward to sharing the replay.
Nicely done @karmic sand !
Hi everyone !
I'm executing a test on a dotnet application using dagger ( for CI purpose ) but it do not work due to testcontainers usage... do you have some tips ?
i'm using typescript language ( already posted [here](#testcontainers message))
ah i had a wip up friday that i thought i had linked to the issue, but here you go: https://github.com/dagger/dagger/issues/9934. didn't land in 18.7 today, but probably in the next one. to be clear this doesn't support "live" host mounts like your comment requests, it busts the session cache for discrete function calls with +defaultPath host dirs.
Hey can someone clarify? Are the intended markets for CI/CD stuff -vs- the agentic stuff-- basically two separate markets as far as your product is concerned?
like I am fascinated with agentic AI but have no interest in devops.
i want to string up multiple agents like in the multiple agent example and just experiment with it.. i don't have a devops or ci pipeline or aything like that though, and i have no need for CI
Or maybe there is some integral connection between CI and agentic design that i'm unaware of, like.. i guess what i'm asking isL:
Is dagger a CI tool first that people started using for agentic AI
like is it "off prescription" use when we use it for ai? (edit: i meant off-label)
@gentle scroll Dagger is definitely more than a CI tool. It's really an operating system for DAGs. So very generalizable.
CI is our beachhead to introduce the world to a better software architecture (DAGs of immutable objects flowing through ephemeral functions) without sacrificing compatibility (thanks to containers). But it's engraved in the DNA of the platform to provide system primitives that can generalize beyond any one use case.
okay. yea. i can get behind that
thanks for clarifying @winter linden
sounds almost poetic
ok so just because i don't have devops experience, i shouldn't shy away if i want to conduct my multi-agent experiments then
Oh yeah if you're into this sort of tech, we took it very far π And it applies fantastically well to agents as it turns out.
We do have some rough edges in the DX so don't hesitate to ask if you're stuck or confused! It's probably not you π
correct
cool cool it looks really awesome (it's nice to see the developer answering questions on discord too)
yes there's 25 people on the team and we're all here π We are distributed and there is no separate slack: this discord is quite literally our office
that's rad
not to mention a friendly and super active community
when i check my provider it says "other" (via llm | provider) is that what i should correctly be seeing if I am using an openai endpoint on my local network? ```
so important!
yes I think that's correct.
Dumb q- Is it expected behavior to see the same thing repeated in the cli output? the way it says "write a curl clone" multiple times.. just want to be sure i'm not like, running 2 dagger engines somehow twice at the same time..
Thank you
Thank you, wish I had more time
Hey there! Seems to me more like a TUI glitch than the same thing running multiple times. If you run dagger login and create a free Dagger Cloud account, you get a very nice web based view of your traces. That will help you understand and keep track of what's happening behind the scenes.
any chance this is macos terminal? i think it might be this bug if that's the case
hey guys
If i attach an aws role to the service account associated with dagger
Do all the pods then have the ability to perform AWS actions?
and kube for that matter
kinda be handy if it did.
I'll try in a different terminal.. ty!
Quick question about DAGS. and Dagger,, DAG based workflows are kind of new to me.. I'm used to working in a game engine where logic is executed and variables updated via an ever-busy, looping state machine. I am beginning to understand that the acyclic in dag means "no looping" so I'm curious about the differences in these two approaches, and how I could have an "always on" equivalent to my looping state machine?
Yep Macos standard Terminal app... is there a mac terminal alternative you would recommend using?
Our approach to DAGs is a hybrid system with two layers:
- You call Dagger Functions, they return immutable objects, which you pass to other functions, and so on. That forms a DAG of objects connected by function calls
- inside each dagger function, it's just regular code running in a container. So you are free to loop in there.
So when you run dagger, you're running a DAG which can contain loops, which in turn can contain more DAGs, which call more loops, all the way down
AH! that makes sense
At the moment Dagger can only start with a DAG. That is, it doesn't run continuously in a loop, or give you an event/trigger system to continuously re-run a DAG. You have to bring your own outer loop.
Typical outer loops that you can embed Dagger in:
- CI (git changes trigger CI job, which calls Dagger)
- Dev loop (dev runs dagger directly from the CLI)
- Custom application (application code makes dagger calls as part of its own business logic loop)
- AI agent (LLM calls dagger functions as part of its agentic loop, typically over MCP)
Oh okay, I see how that could be very flexible. What a clever system.
Just as an aside, I've seen a someoneusign Node-RED from IBM to hook up workflows to LLM models for industrial automation applications. Like feeding events and metrics from sensors and activating actuators and stuff. I think it maybe would use DAGs too considering its acyclic workflow-first approach but they did add some kind of looping functionality.. But I think they haven't made this portable architecture you've come up with and you're stuck in their little nodered ecosystem.
Yeah there are a lot of powerful workflow systems out there. Usually they all have the same weak spots: too big & monolithic. So they stay stuck in a narrow core use case
But there's an inherent network effect to workflows - the whole point is to connect things. So narrow specialized application is not actually a benefit. Because you're leaving it to the user to stitch together several specialized systems to actually model the whole workflow.
And that leads to the current state, layers and layers of mini-platforms that you can't generalize, but you can't get rid of either, so you glue them together when bash scripts
Anyone know if tonight's event will be live streamed
No, it wonβt, but you are welcome to join in fun and ask questions in the sf hack night channel during the time since weβll be monitoring it for questions.
Weβll share the recorded demos on YouTube a few days later.
off topic: Qr code for todays hacking event how do i get it?
When running Dagger in interactive mode, so that when an error happens we get dropped into the container shell, it seems the error is not printed. If we exit the shell, or don't use interactive, then it is printed. Is this a known issue? Is it possible fixed in more recent version v0.16.2?
Side note, the 4th arg (-X <space> ...) loses the quoting and the command cannot be simply copied & pasted
missing error msg
Container.withExec(args: ["go", "build", "-ldflags", "-X 'main.Version=feature-foobar'", "-o", "./foo", "./main.go"]): Container!
! process "go build -ldflags -X 'main.Version=feature-foobar' -o ./foo ./main.go" did not complete successfully: exit code: 1
sh-4.4#
has error msg
β .withExec(args: ["go", "build", "-ldflags", "-X 'main.Version=feature-foobar'", "-o", "./fpp", "./main.go"]): Container! 5.8s
β # command-line-arguments
β ./main.go:14:1: syntax error: non-declaration statement outside function body
! process "go build -ldflags -X 'main.Version=feature-foobar' -o ./foo ./main.go" did not complete successfully: exit code: 1
off topic: Qr code for todays hacking
Side note, the 4th arg (-X <space> ...) loses the quoting and the command cannot be simply copied & pasted
the quoting is fixed in newer versions of Dagger
Is this a known issue? Is it possible fixed in more recent version v0.16.2?
not sure I've seen someone reporting this. An issue would be appreciated π
Folks, I'm running dagger engine on k8s, and one thing that I'm noticing is that even if I have my imagePullSecrets configured on the k8s side, it doesn't seem that dagger engine understands it.
Am I missing something obvious? Is there a specific location where I should drop a file to make dagger happier about this?
Any pointer to a documentation would be awesome.
Why are required arguments -- style with dagger call, but positional with Dagger shell?
Deploy a website to Cloudflare Pages.
USAGE
dagger call deploy [arguments]
ARGUMENTS
--cloudflare-api-token Secret [required]
--dist Directory [required]
--gitlab-api-token Secret [required]
--wrangler-toml File [required]
--merge-request-id string
imagePullSecrets currently don't work since those configure the kube CRI to pull secrets from, no the dagger engine. In order for dagger to authenticate to the underlying OCI registry you currently have two ways of doing that.
- Perform a
docker loginin the client where dagger is being executed - Use the
WithRegistryAuthcall and explicitly pass your registry credentials there.
Having said that, it'd be nice to have better support for this. cc @rigid pebble @heavy gazelle. @gloomy drum would you mind opening an issue please?
the idea is for shell to provide a bash functions like UX where arguments are positional. dagger call is CLI UX oriented
FWIW only required arguments are positional. optional arguments still require -- in shell since those could potentially be provided in any order
I expected the behaviour to be the same as dagger call, perhaps that should adopt positional for required arguments too
I feel like they shouldn't differentiate
I will open an issue later Today about this, and this would be amazing to use. π
I've had a short convo with Gerhard on this as well, and both the ideas of having the ~/.docker/config.json (where the CLI runs) and explicitly calling docker login are not really working for me, as I am still facing 429 Too Many Requests - Server message: toomanyrequests: You have reached your unauthenticated pull rate limit.
Forwarding to general, this is good stuff! Thanks @wary sparrow for joining us last night!
Thanks for hosting! Had a great time getting my hands dirty with Dagger for the first time!
call --docker-cfg=file:/home/runner/.docker/config.json ... that's what I was missing π
Hi ! does someone already used a cache with AzureDevops pipeline ?
that --docker-cfg is something from your module right? Since that flag is not dagger native
btw you can do --docker-cfg=~/.docker/config.json to save a few characters
Quick question. π I'm noticing that the volume attached to the dagger daemon is leaving behind some large artifacts, specifically the go build cache (GOCACHE or /root/.cache/go-build). Usually not a big deal but we're compiling like 20 different large binaries in 1 process which means it adds up quick. Is there a way I can prevent this large directory from ending up in the daemon's volume? I'm thinking I could rm -rf $(go env GOCACHE) after it's all done?
Does your dagger code store the go cache in a cache volume? Or does it get cached alongside the rest of the container rootfs? Either way it ends up in the same underlying docker volume, but the lifecycle is different
It just gets cached alongside the rest of the container rootfs. Locally I think that's totally fine but I could throw it in a CacheVolume and it'd probably keep my computer from exploding. atm our github action runners are running out of space before the worfklow is able to complete π
Yeah I see, in your current setup, every time your source changes, you're 1) starting from an empty go cache, wasting compute, network bandwidth, and clock time; and 2) storing a full copy of your go cache multiplied each time
So by using a cache volume you'll make your builds faster and save disk space
Wow Dagger is SO COOL. I just ran the multiagent demo entirely locally on my mac m3 with lmstudio hosting v3-0324 and it did a great job!
Yeah definitely! In GitHub Actions what's the current way to get a working reusable CacheVolume? Right now if I switch it to a CacheVolume I think it would still start from scratch π¦
Yeah that's a blind spot for us... We're working on making this part much much better soon (distributed cache etc).
But, are you sure your current setup performs better? Do you use buildkit cache export, or other experimental distributed cache methods?
Pains me to say it but we don't really use any caching at the moment. It's a shame too because I put a lot of effort into building our dagger pipelines in a way that they could take advantage of it.
For each process (building the frontend, storybook, packaging the tar.gz, building the backend, downloading modules / yarn, etc) we only copy in the files that are absolutely needed, and most PRs are small and only change 1 small thing at a time
In that case, you won't see any downside to using cache volumes. Either way you're starting from an empty cache on CI at the moment. At least this way when there is caching (ie locally) you won't kill your computer. And when we improve distributed caching, you'll be able to drop that in without changing your code.
Also if you run several go builds in dagger on the same CI job, then at least you'll get benefits of caching within that job
Is there any issues that I can follow about distributed caching? And is there a timeline for this?
I'm advising a client right now, and they need distributed caching and I would like to give them the best advice on how to set up the infra for that and some info on when to expect it.
And if not, what's the best way for now.
It seems depot would be the way to go, but they might need on premise, and for that I don't have a good idea on what to suggest.
Howdy! I 'm trying to fire up the Melvin example but i'm kinda new to go .. any ideas on what could be causing the module to do this?
β connect 0.2s
β load module 2.0s
! failed to serve module: input: moduleSource.asModule failed to call module "melvin" to get functions: call constructor:
! process "go build -ldflags -s -w -o /runtime ." did not complete successfully: exit code: 1```
π what's the url of the module you're trying to load?
In that case, you won't see any downside
β 18:22
Um not sure.. i just cloned the Melvin example from github (https://github.com/shykes/melvin/tree/main)
echo '{daggerEngine{localCache{entrySet}}}' | dagger query used to work to get cache entries, but it seems "daggerEngine" is no longer in the graphql?
shoud be just engine now. The command has been also promoted as a top level sub-command. dagger core engine local-cache
those examples are using an older version of the LLM API that has been replaced with the Env concept. I'd recommend to check mostly https://github.com/shykes/toy-programmer/tree/main which has an updated API and the dagger ai quickstart. Extrapolating the Melvin concept from there should be straightforward π
yeah I have to upgrade that module...
Is it possible to delete specific cache entries?
next week my Dagger tour starts. 2x conferences.
This is DevOps Pro Europe - probably 1000 attendees (or maybe more). https://devopspro.lt/
not yet π¦
Up π : Hi ! does someone already used a cache with AzureDevops pipeline ?
hey Tony! there's no current solution to get distributed caching on ephemeral AzureDevops pipelines yet. We used to have a service which we're revamping and we're looking forward to test with users very soon
is allowing a cached directory on azure pipeline can work ?
I'd assume that's backed by some sort of network storage right? I wouldn't recommend using that to store Dagger's state since that will very likely slow down pipelines considerably.
It's generally recommended to store Dagger's state in a local disk for the best performance
It might seem "local" but that path in the FS I'd assume is connected to a network storage device since otherwise it wouldn't be possible to mount that cache in a subsequent ephemeral pipeline
is dagger cloud compatible with Azure devops pipeline ?
i got on CI and locally : (traces export: failed to send to https://api.dagger.cloud/v1/traces: 500 Internal Server Error (body: (empty)))
can you try again now please?
are you loggin in with dagger login?
I do see you have some traces in your account from 4 minutes ago
i see traces in dagger cloud but still failure
ok thx. I'll investigate in a bit
currently wrapping up something
it's good to know the trace still shows in cloud π
Is there a simple docs generator for dagger modules? I want to generate some docs for my modules with examples. I know the daggerverse.dev does it but that code isn't open. Is it?
You're in luck, we just shipped Module Catalog in Dagger Cloud, which generates API docs pages for your private modules as well
It's actually an improved version of the Daggerverse pages. https://dagger.io/blog/module-catalog-insights
Ah I'm aware of the module catalog π I am not on dagger cloud yet. Trying to improve my existing private module catalog with docs.
If you're looking to generate better code examples that show up there, check out my module kpenfound/dagger-programmer
That uses LLM right? I can't use it as I only have access to copilot π¦
Ah right. I think it should be easy to script a more basic version
Maybe time to use Dagger Cloud then
We could add the ability to generate the docs from Dagger Cloud and download them for self-hosting, if that helps
Like CI/CD for you Dagger module docs π
It's gonna be a tough sell without being able to self host. I do need to still figure out ci/cd for the modules themselves. Currently it's all manual
alright cool, any other issue to track this feature?
Hey folks I have a question regarding the new experimental clients. First of all it's working really well 
I'm just now running in an issue where if I invocate the library with go run main.go it's working but in the built state I get a GRAPHQL_VALIDATION_FAILED error that it cannot find the modules that are installed as dependencies. I thought when building the go binary it will compile the graphql schema with the added modules?
any news ?
Just sent you a DM Tony
it's fixed. I've deployed some changes to Cloud which was triggering sin incorrect error messages
Hey folks I have a question regarding
I'm flying now to DevOps Pro EU. I need core team members to drop me links to Demos, or links to some parts of repos with the latest good stuff, that you think DevOps teams will find interesting.
Python is primary
Golang is secondary
JavaScript is good for easy understanding.
If you were with me at dagger KubeCon exhibitior stand you'll know what I mean.
Please let's make a thread and drop as much as you can.
I'll spend my time this evening going through it all, and trying to make some interesting Demos.
There will be around 300 people in the audience and probably 99% never seen Dagger before, so let's blow their kinds.
Tyvm for support.

is --platform=current documented somewhere? I see refs to it on discord. I'm trying to get current host platform. dag.Module().Runtime().Platform(ctx) panics
I get the panic at dagger core module runtime before platform. Guessing this is not meant to be accessed directly.
This works for default engine platform: dagger core default-platform
linux/arm64
Realizing that --platform=current comes from here
https://github.com/dagger/dagger/blob/main/cmd/dagger/flags.go#L725
https://github.com/dagger/dagger/pull/7158
https://github.com/dagger/dagger/issues/8354#issuecomment-2332652070
Finding this proposal related. β οΈ Warning, below is NOT implemented.
func Foo(
// +optional
// +default="client" <-- OPTION 1: use the client's platform
// +default="runtime" <-- OPTION 2: use the current runtime platform (running the current function)
// +default="engine" <-- OPTION 3: use the engine's default platform
platform dagger.Platform,
)
$ dagger call foo --platform=client
$ dagger call foo --platform=runtime
$ dagger call foo --platform=engine
Something like that still needed, do you think, @cunning jolt @sharp marsh ? π
Something like that still needed
I think so. Or any other way to grab the module runtime platform programatically.
Like dagger -c 'host | platform' or similar (doesn't exist today)
And from the module code itself. For example, I want to pick between amd and arm based on host when building a docker image.
@cunning jolt for the runtime platform (the one running the engine) there is dag.DefaultPlatform()
Oh! that would work let me try. Would it be possible to cross-link the main docs site with the API site? When I search "defaultplatform" in the main site, it doesn't show me the dagger API results
I'll make an issue for that and look into it
https://github.com/dagger/dagger/issues/10429
should dag.Module().Runtime() throw a panic? If it's not supposed to be used by consumers, shouldn't it be hidden? Happy to open an issue for it if that's the expected result.
please do. Yes seems like it shouldn't do that.
Hello, i got something weird when installing a new module with "dagger install" my sdk/client.gen.ts is wiped everytime... that cause my import break :/
known issue ?
Hey! Can you tell us more about what you're trying to do, specific modules you are using, and the specific errors that you are getting?
The generated bindings are regenerated each time you install a new module by design, but I am curious to know what you are trying to import because that does not sound right.
command : sh-3.2# dagger install github.com/vbehar/daggerverse/git-info@v0.13.2
issue : import break see capture because -> client.gen.ts is wiped
it was not the first time, i had the same with testcontainer module...
dagger develop do not restore :/
last time (with testcontainer module install) i completely restarted the project
@slender charm any info about it ?
Hi there guys. Chris here from Nine. Got a question regarding interface codegen.
It seems if I create the following interface:
// ModuleX
type Task interface {
Do() *dagger.Container
}
type ModuleX struct {
}
func (m *ModuleX) Do(t Task) *dagger.Container {
return task.Do()
}
and the following type:
// MyModule
type MyModule struct {}
func (m *MyModule) Do(ctx context.Context) (*dagger.Container, error) {
// ...
}
then when running dagger develop, MyModule won't have the .AsModuleXTask method generated. However I believe if I were to call the graphql API directly it would work.
Hi! Interfaces are super powerful but still have a few rough edges... Strongly recommend following these docs if you haven't already: https://docs.dagger.io/api/interfaces/
π don't forget to add DaggerObject to your interface as shown in the docs. I think that's the main thing missing
also maybe the "three modules" problem?
two should be ok. In this case I see two modules so that should work
since there's an implementation in the same module as the interface definition
ah right! yeah makes sense
Hey guys! Yes have scanned those docs quite a bit. And yes my example was missing DaggerObject!
I think even with DaggerObject it has this behaviour... I will try to produce an actual example on github for you guys
Okay after a bit of testing I think its a case of PEBCAK
I'll get back to you if I manage to reproduce it..
So nice to see you here, glad you were able to get it working!
Pleasure Lev. Having lots of fun with dagger these days
This is a sick product
Got my team very excited
The reaction was "yeah we're using dagger, we knew that all along"
Love to hear this π
We have a use case where we would like to dynamically import a module and then load it into the value of an interface type.
The reason is we want to drive the version of a particular module from a file checked into the repo that we control. Therefore rather than using the normal module resolution that is coming from dagger.json, we want to read in this file and do this at runtime. I actually figured out how to do this.
It seems to be a case of resolving that module via dag.Git() then using .AsModule(). Finally calling .Serve on that module loads the module up. Then I use the GraphQL API to get the module's ID and load that into the interface type:
client := querybuilder.Query().Client(dag.GraphQLClient())
err := module.Serve(ctx)
if err != nil {
return nil, err
}
name, err := module.Name(ctx)
if err != nil {
return nil, err
}
var id string
err = client.Select(toCamelCase(name)).
Arg("source", source).
Arg("sshSocket", sshSocket).
Select("asGolangServiceBuilder").
Select("id").
Bind(&id).
Execute(ctx)
if err != nil {
return nil, err
}
return LoadBuilderFromID(dag, BuilderID(id)), nil
All this actually works and is pretty cool
Just wondering however, is this likely to get us into trouble later?
If we use the GraphQL API directly like this, would there ever be a chance that these APIs might change?
Can you help me understand more about the file requirement and why dagger.json is not sufficient?
There is a desire to avoid a local dagger module in repos if we can avoid it. What this means is that we are looking to invoke the dagger command like this:
dagger call -m github.com/nine-digital/dagger-go-service ci-check-pull-request
So there wouldn't be a dagger.json in the first place
We are thinking this might reduce the difficulties when rolling out across the organisation's huge codebase. We have >3000 repos and >300 developers... having a local dagger module in each repo could create a lot of "snowflakes"
So that is the motivation for not having a local dagger module
Now I should clarify that our architecture for the dagger modules would be comprised of two components:
- CI module - performs tasks that don't really need to be done on the developer's machine such as interacting with the container registry, putting a comment on a github PR, running stuff against the real cluster
- Builder module - concerned with producing artifacts tied to the source code
Our plan is to loosely pin the CI module to a branch ( by way of using the -m flag like above )
And to pin the builder module since it is concerned with producing artifacts and we want consistent results from it
So to get everything we want here, we are looking at this dynamic import mechanic so that we can do:
dagger call -m <ci-module> ci-check-pull-request and then that pulls in the builder module dynamically at the specified version.
The result is we avoid boilerplate of a repo dagger module whilst still daggerising our repo π
It's an idea currently being explored by the team.
The reason is we want to drive the version of a particular module from a file checked into the repo that we control.
^ IIUC you'll have a file in the CI module's repo that will indicate which builder module version to use?. Or is the purpose of that file to exist on each app repo?
Hi Marcosnils. That file would exist on every repo. A simple yaml file in each repo:
goBuilderRef: 0.1.0
π hey! if the app repos won't have a dagger.json then you'll have to manually pass that file to each dagger call via arguments? Wouldn't that make it a bit tedious?
Our builder module will have +defaultPath=/ for the src directory being passed in
But good point, this command is still a bit tedious
we will have a big -m <module> flag and that will cramp up the dev experience a bit
gotcha, you'll manually have to pass the src via arguments each time then
you do need to specify it when using remote modules
Here is the module construtor:
func New(
ctx context.Context,
// The CI platform that is running
// +optional
ciPlatform string,
// A directory holding the goBuilder module, to override
// the infrastructure/denv.yaml. Useful for testing locally
// with an experimental version of the goBuilder.
// The module must be in a directory called `go-builder`
// under the passed in directory.
// +optional
goBuilderOverride *dagger.Directory,
// A token for authenticating to github
// +optional
githubToken *dagger.Secret,
// The pull request issue id
// +optional
issueID int,
// The source to compile
// +defaultPath="/"
src *dagger.Directory,
// The ssh socket of your machine. Typically set to the value ${SSH_AUTH_SOCK}
ssh *dagger.Socket,
)
since defaultPath will only be relative to the remote module when using -m
ah okay didn't know that
yeah so you are spot on this is going to make a very long command for developers to type out
It is possible to assign a default path for a Directory or File argument in a Dagger Function. Dagger will automatically use this default path when no value is specified for the argument. The Directory or File loaded in this manner is not merely a string, but the actual filesystem state of the directory or file.
they would need to do :
dagger call -m <module> --ssh=${SSH_AUTH_SOCK} --src=. ci-check-pull-request
yep, something like that. We want to improve that UX but that requires some bikeshedding first
so at this stage we are thinking of basically creating a thin wrapper which does nothing more than inject those flags to the dagger call command
We are thinking of calling our wrapper denv
so the developer could theoretically type denv call ci-check-pull-request and this would expand out to the above command
it would only do this if the second argument was call... in all other cases, it would just pass all the arguments to dagger as per normal
so denv functions should work etc. etc.
yep, that works. There's some users in the community which follow a similar pattern where they prefer devs and app repos not to have local dagger modules and they leverage the -m remote flag so the platform team can drive a more curated and controlled experience
In that sense it makes sense to give them some knobs they can configure in a config file so they can dynamically set some things
@mild coral @sharp marsh I'm starting a thread for this
For a presentation, what kind of things do we think DevOps Engineers would be interested to see? When seeing dagger for the first time ..
For a presentation, what kind of things
Question re dagger install .. for testing a module: it seems to lag behind the actual module. I've made changes to the module itself, saved the file, but running the test module doesn't pick up those saved changes. dagger develop doesn't seem to do anything. First time I've really done this submodule tests layout, what am I missing?
Would anyone happen to know if there is a particular LLM which is ideal for pair-programming-with-ai-assistant (like with Cline or Roo Code) and more importantly, which happens to understand the Dagger methodology with its most up-to-date protocols and ways of doing things? Being nascent I wonder if Dagger methodology is too new to be in existing LLM training data.. Or if there may be perhaps an existing body of context already-authored to clue the LLM in so it produces clean and up to date dagger code? I mean i can provide documentation and examples i guess, just wondering if maybe there is a finetune model or a body of already prepared context for models to use.
All recent models are reasonably up to date on dagger. If you throw in a tool to read the docs, even better.
https://docs.dagger.io/features/llm/
Dagger supports MCP / tools. Plus Gemini 2.5 can read docs.
Hey everyone. I have a question regarding dagger versioning ( and the dagger engine versioning)
I'm currently hosting a v0.18.2 engine. We writes modules that are mostly with more recent versions but not all modules are on the same versions.
How can i solve this issue ? Do I have to run a single engine on the latest version ? Do I need to run an engine for each of the dagger versions we use ?
Hey everyone! Weβre excited to see you at Dagger Live tomorrow (formerly known as the Dagger Community Call)!
**Tomorrow will be all about autonomous workflows & reusable building blocks! **
π§± @sharp marsh and @rigid pebble will showcase the brand-new Module Catalog & Insights, giving you the power to discover, reuse, and manage modules across your team, so you can build your own software factory.
π€ Plus, @warm temple will demo how to create your own AI agent that builds, tests, and reviews code, so you can let your workflows run themselves.
See you there! We'll be live on YouTube and X. https://www.youtube.com/watch?v=u9XICtc8FeI
Hey all,
I have some good news, we have been struggling with slow builds in Dagger for Harbor Next. (https://github.com/container-registry/harbor-next/tree/build/daggerize/.dagger)
After we have spun up a Dagger service on a Hetzner Machine, we were able to chop build times from ~30min, to 1-3 minutes.
So now we are 10x faster than the 2k loc Makefile,
harbor-next/.dagger at build/daggerize Β·...
π lots of dagger users on public github runners it seems
Error response from daemon: Head "https://registry.dagger.io/v2/engine/manifests/v0.18.8": toomanyrequests: retry-after: 394.374Β΅s, allowed: 44000/minute
@winter linden ... π
hello is it necessary to be root when running dagger ?
π are you referring to your local machine? if you have access to a container runtime like Docker, Rancher, Colina, etc Dagger automatically uses that to bootstrap itself
If you're running the engine in a k8s environment, it requires the privileged security context to be set.
local machine yes
300 more people now love Dagger.
Mission complete. Thanks to @slender star and @heavy karma for the help.
Images will follow from the conf photographer, but here is a phone camera one
The pro photographer should have good ones. I'm enthusiastic to see what they have
@here Dagger Live Starting Now! https://www.youtube.com/watch?v=u9XICtc8FeI
- Watch Kyle Penfound demo how AI agents build, test, and review codeβwhile he plays video games.
- Get a deeper dive into the new Module Catalog & Insights: discover, reuse, and manage modules to build your own software factory.
References from Kyle's demo:
https://docs.dagger.io/quickstart/agent-in-project
https://github.com/kpenfound/greetings-api
References from Matias and Marcos:
https://dagger.cloud/signup
If you missed this week's call, you can check out the recording here: https://youtube.com/live/u9XICtc8FeI
- Watch Kyle Penfound demo how AI agents build, test, and review codeβwhile he plays video games.- Get a deeper dive into the new Module Catalog & Insights: ...
Hi there team. We have a use case where we need to pass the host's SSH socket to dagger so that it can use it to resolve private sources during container builds. Specifically this is for resolving our private go libraries. To do this currently we are using the *dagger.Socket type and using commands like this:
dagger call function --ssh=${SSH_AUTH_SOCK}
We were wondering if there was a way to accept this as a default as it would need to be typed out by the developer each time. Understand that dagger's security posture is to require the developer to explicitly grant resources to dagger which makes perfect sense. Still just wondering if there was anything to allow this to be more automated in anyway π
This is kinda related to some of my earlier questions about having a wrapper. We are trying to look for ways to avoid wrapping if at all possible π
Private Go Modules
@sharp marsh can you help please π ?
do you have a repro Tony? I was able to install that dependecy in a new typescript dagger module and I dont' have any issues. Running dagger develop doesn't wipe anything
If I have Module A calling Module B. Can i retrieve on module B the Git Ref of the directory that i run module A in ?
dag.CurrentModule returns module B ( understanbly) . what i'm after is the calling module
No, the sandboxing prevents that. If you want B to have information about its caller, it has to be passed as argument
makes sense ! thanks π
I'm going to continue the update for platform stuff here since it's not really intro anymore.
I'm going to set up k0s instead.
Creating a new Kind cluster named 'bootstrap' using podman...
using podman due to KIND_EXPERIMENTAL_PROVIDER
enabling experimental podman provider
Creating cluster "bootstrap" ...
β Ensuring node image (kindest/node:v1.31.0) πΌ
β Preparing nodes π¦ π¦ π¦ π¦
β Configuring the external load balancer βοΈ
β Writing configuration π
β β Starting control-plane πΉοΈ
It's not so happy with podman. I had trouble before but I think it might work with either docker/podman with k0s.
Here is that work, You'll need docker, not podman but it should work. There may be some updates needed for the gitea chart.
https://github.com/GravitonWave/platform/tree/main/bootstrap
I got tired fast and had to get some sleep before the flight back. I can come back to this soon. Need to spend some time this weekend getting ready for a customer demo early next week for the hardware project.
Going to head to the airport now, Cheers!
Thanks for sharing @jagged epoch . You plan on integrating Dagger into this platform?
For sure, I wanted to have infra build and deploy targets and infrastructure in sort of a best practice open source thing.
Have AI help orchestrate it.
Lots of people are doing tools on systems that aren't solid. Like a F1 driver in an old smoking car. I want to give them the F1 car. Have the branding be real solutions involved in the process.
for the first time after the init yes but after having new implementation and then i install a new package... it simply wipe it...
dagger install wipe it
There is the office/lab. My favorite things. Software development, music, hardware and electronics. My life is a mix of all these things.
What a night. Was working till 4 or maybe 5 am. I have the demo mostly ready for client. I added automated tests with playwright and if it wasn't for having human accept web serial would all be AI driven automated testing and iteration. Something I was talking about at conference. It isn't hardware testing hardware yet. In any case once I think I have the recipe for what/how that works down I can model it with dagger as a workflow pattern others can use.
I am most worried about not having the time I need. 4 days left need to do Cisco work, then prepare for Cisco Live.
Btw if anyone is attending, I will be working in the DevNet area. Would love to visit. Wife is also going(on trip not conference) She is my hero because she runs all the things at home so I can do what I love like stay up till 4am making dreams reality.
Hope demo is amazing and we get more work, so I can do more of what I love. I can update. Also if there is a channel for hardware, and it can be for using Dagger for hardware projects I can give updates there too so don't spam the general chat if that is a concern.
That's what it looks like when Claude is running development and automated test cases with playwright and examining the screen shots π
Thread
not sure I follow this step. You're saying that after installing some other package dagger install just wipes the client.gen.ts?
yes
that's quite strange. Let me try really quick
still can't repro Tony. I've installed multiple dependencies along with the git-info that you have provided and I still get the client.gen.ts each time
here's what I did
dagger init --sdk typescript --name foo
dagger install github.com/vbehar/daggerverse/git-info@v0.13.2
dagger install github.com/sagikazarmark/daggerverse/helm@v0.14.0
^ after running all that, I still get the client.gen.ts after running dagger develop
Hey @dusty knoll which version of Dagger are you using? And when you say it wipes it, you mean the file is empty after, or it's regenerated with different contents? Are you trying to modify the client.gen.ts in any way?
Stupid question, but have you tried to generate new sdk using IA agent ?
in dagger 0.18.6, while exitting a container container | from node:18-alpine | with-mounted-directory /mnt ./ | terminal back into dagger shell, I woke up some hungry ass beast sleeping inside Dagger that immediatelly ate up all the remaining 14G of my RAM.
Yes, I'm calling it -- there's a memleak somewhere in there π killing dagger process from another TTY caused it to print some stacktrace, IDK if it's of any use..
$ ps faxu | grep dagger
<...>
netikras 1290607 6.4 19.5 14100236 12764040 pts/74 Sl+ 18:26 1:53 \_ dagger shell
netikras 1290654 0.0 0.0 2291180 9324 ? Ssl 18:26 0:00 \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
netikras 1290723 0.0 0.0 2217448 8780 ? Ssl 18:26 0:00 \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
netikras 1290758 0.0 0.0 2291436 9280 ? Ssl 18:26 0:00 \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
<...>
What's curious is that it was triggerred by exitting the |terminal back into the dagger shell, not entering the terminal or doing npm builds in it.
@dusty knoll I'll be the one to say it, the Dagger team is being very kind but your question does not make any sense. If you'd like help, provide the following things.
- Run
dagger versionand supply the text that is output like so:dagger v0.18.6 (docker-image://registry.dagger.io/engine:v0.18.6) linux/amd64 - Explain what you mean by wiped. Completely wiped does not mean anything in this context. I believe you are saying that client.gen.ts is empty after you use
dagger install. Take a screenshot of the before, rundagger installand take a screenshot of the after. Include both of them. - It would help to know more about your project and use case in general. What your dagger code looks like, what are you trying to install, etc.
π
Ok, here the video and after taking some time to understand where exactly, i think it's an IDE issue...
After init of the dagger project when i open it through Rider or Webstorm this file is empty... ( but not empty on my storage ) i do not know why :/
dagger v0.18.8 (docker-image://registry.dagger.io/engine:v0.18.8) darwin/arm64
are you running your shell/terminal as root (sudo su)? I'm not sure if that is going to be a permissions issue with the file or not but I noticed it seemed to be running as the root user, which is most likely not the same user your IDE is opened as. If you are running as root, might be worth running the dagger commands as your normal user - if you can.
Also, after running dagger init --sdk=typescript can you open that directory in your IDE and then in the terminal again, run dagger develop then recheck the contents of that file?
seems like this as your IDE might not have permissions to read the file
Tried out the Dagger DaemonSet Helm Chart last night (in Kind + Argo), very nice! Will be rolling out to GKE before long. Still need to figure out taints and engine config via the chart
wait... is the only way to access any "host" resources thru CLI arguments or the REPL?
If I know I want to build a docker image with files from my current directory, is there any way I can write my module so it's possible to call dagger -c fn_name and have the function be able to access the files it needs to build the image?
Modules are sandboxed by design, it's one of the features that a module only has access to its own files, and to whatever you pass explicitly as arguments. No implicit host access. This is what makes Dagger modules safely reusable out of the box. For example you could develop a custom CLI (basically your alternative to the dagger CLI) or a custom server.
Of course that custom client would not be package as a dagger module, so it wouldn't benefit from the sandboxing, cross-language integration etc. So it's a tradeoff.
Makes sense- I think I missed how a module accesses its own files as a File object. Can you point me in the right direction of an example of that?
The docs a little obscure: https://docs.dagger.io/api/default-paths/#for-all-other-cases
There's a nice realistic example in the CI quickstart: https://docs.dagger.io/quickstart/ci#construct-a-pipeline
Every dagger module has a context (usually the git repository it's part of), and a root (the directory containing the dagger.json). Any time one of your module's functions receives an argument of type File or Directory, you can specify a default path for that argument. If the default is used, it will be loaded at that path from the context (if the path is absolute) or from the module root (if the path is relative).
So for example:
func (m *MyModule) Build(
// The source directory to build
// +defaultPath="."
source *dagger.Directory,
) {
// Build implementation goes here
}
This allows you to dagger call build and by default source will be set to the current module's root directory.
But you can always override the path, eg. dagger call build --source=https://github.com/foo/bar#other-version:/dir for example to run build logic X against source directory Y
Sometimes you want the build logic tightly coupled to the source directory, sometimes not. It depends of the situation. Dagger lets you choose the right pattern for each situation.
This is perfect- thanks!
ok i confirm clearly a root issue thx ! π
cc @sharp marsh
If this is easier to grok, we'll update the docs π
I don't know exactly how to make it easier to find. The content itself could benefit from that tabke being simplified or removed
Seems like there are some fundamental concepts that could be elevated (and illustrated, perhaps).
Would be good to know what search terms folks were trying and failing with too.
I think what would have helped me understand Dagger at the beginning would have been two things:
- A picture of the architecture. The intro has a nice architecture section, but it didn't really click for me at the start. Understanding that the code I write, is client code that ships off my local environment to the Dagger engine was something fundamental that might use a little picture.
- An understanding that everything is sandboxed. I was very confused at the start why every command basically started with .container(). I guess this comes from other build frameworks where the building is happening on my local machine, in my environment. Dagger is different in both of those ways (I guess it is still my local machine but the engine is the one running it yknow).
I think starting off with these two things would have helped me ask the right questions earlier and probably search the docs much more effectively on my own.
+1. Another diagram that I was always eager to have is a high level conceptual one similar to the one that Docker (img) used for a long time to understand where Dagger sits in your stack.
β° Dagger 0.18.9 dropped yesterday. It's mostly optimizations and bugfixes, but there is a hidden gem: you can now reload host files as they change.
This means you can keep a dagger shell session open while you develop, then call build, test, lint or other custom functions in your module, knowing that your latest changes are being loaded.
You can also control the caching behavior when calling the low level Host.file() and Host.directory() functions directly. In dagger shell: host | file --no-cache foo.txt
Awesome! Is that an automatic reload or do we need to call .reload
Automatic
But doesn't apply to the module's code - only to its arguments (eg. the source code being tested, or built etc)
We're also looking at automatically reloading the module from local source, but that's a separate issue
<@&1285644377615634544> fans!
If youβre a Deno Dagger developer, you may already know this β but just in caseβ¦
Deno support is officially here in Dagger! π
This has been a highly requested feature, and itβs finally possible thanks to major improvements in Deno 2 and tons of input from our amazing community.
π Learn more: https://dagger.io/blog/dagger-supports-deno
π Join #deno to share what youβre building!
Hidden gem? That's a diamond!
@winter linden @chilly arch Wow, two amazing new features right as I ramp up my use of Dagger!
Hey guys a question about runtime containers.
Would copying files into my module runtime container produce any side effects for subsequent runs of that module?
How would you copy them in? As long as it used a stable API, should be no problem
oh that! Yeah, all good. No side effects. Useful when you need a native library that access the local filesystem directly. Is that your situation?
The only "side effect" is that it copies the full contents of the file, and is not as efficient as other dagger file operations (kind of like copying data from kernel to userland is slower than keeping it in kernel). So make sure you actually need it. But otherwise it works just fine
thanks Solomon I'll give it a test and see if it works well for our use case.
what decides whether a chained function is cached or not? for example, I see this in one of my dagger modules:
$ container: Container! 0.0s CACHED
$ .from(address: "python:3.9-bullseye"): Container! 0.0s CACHED
β .withWorkdir(path: "/opt"): Container! 0.0s
Why would the .withWorkdir(...) command not be cached here? if the container itself is cached?
the quickstart for adding an ai agent to an existing repo was awesome. thanks @warm temple + team!
everything went pretty smooth, except for one bump during my local development. i wanted to use ollama, and i followed the instructions to get the IP address of my host, but the dagger engine was still not able to reach it. after a few minutes of troubleshooting i just gave up and switch to anthropic (which makes more sense for the github integration part since ollama isn't available there).
im thinking about extending it to include a screenshot of the app and including it in the PR description.
Awesome! Love to see it! I would love if we could simplify the local IP configuration. It can be confusing because sometimes there are several options. With docker model runner it's a bit easier because you just need to point at the internal docker DNS
ah, I think this was the cache being automatically GCed repeatedly... opened an issue here to provide a better experience in this scenario: https://github.com/dagger/dagger/issues/10504
What is the issue? When testing out Dagger locally, layers seemed to fail to cache randomly. It was confusing to me because it seemed like Dagger caching wasn't working at all as advertised. I ...
One nice thing about living in DFW.
I don't get it! But hello fellow DFWer π I live in Fort Worth.
I don't get it! But hello fellow DFWer
Maybe we can get a hackathon day group in this area. I had so much fun in SFO, wish the cost of living was less.
Maybe! We're thinking about where our next Hack Night should be π
Would be happy to help however I can
Dallas? Round Rock? Austin?
Fort Worth! Dallas would be ok too
I'm down that way a few times a year! That would be fun!
expression of interest in basic sorting functions for https://daggerverse.dev/
perspective of a newcomer to Dagger, a major signal would have been finding recent packages that address the kinds of things people are generally up to these days. my ideal first step would be to sort by recently updated and/or most updoots, and additionally the default sorting is just kind of a mess
Hi there. Quick question about the use of insecure-entitlements config...
Is it possible to use the dagger engine with insecure-entitlements = [] in production when deploying to k8s?
I am guessing this will just block the use of InsecureRootCapabilities: true when supplying .WithExec()?
Just FYI we want to use dagger-in-dagger (ExperimentalPrivilegedNesting: true) ... would setting the insecure-entitlements to [] block this?
I believe it won't block it. And if it does, I think it would be a bug, as nesting is no longer considered insecure (nested clients are fully sandboxed)
Thanks Solomon appreciate the fast reply!
yes this is correct! only insecureRootCapabilities will get blocked. nesting is still allowed (though in this case, there's still only one dagger engine, i assume that's what you want?).
btw, i'd recommend using the engine.json configuration - the engine.toml config is legacy, and new config options probably won't be added to it
If you are in Timisoara on June 19, join the Cloud Native Timisoara meetup: https://community.cncf.io/events/details/cncf-timisoara-romania-presents-cloud-native-timisoara-summer-2025/
(You can listen to me yap about Dagger)
In-person Event - Exciting talks at our upcoming meetup: Alessandro & Adrian on "The first CNCF / Linux Foundation Operating System - Flatcar Container Linux" and Mark presenting his "Accelerate Your Development and CI/CD Pipelines with Dagger" .
Join us at Cloudbase Solutions office, in Timisoara on June 19th.
@analog raven π β€οΈ
If i clone the https://github.com/dagger/dagger i can run dagger call --help. But my editor complains (vscode) about "undefined: dag" in the .dagger/main.go.
I have that with a module i am testing locally also? It this something that other people also have, i can't seem to find the issue online.
Anyone has a pointer where I can look to debug this?
Never mind sorry i found dagger develop π¦
all good, it's a thorn in our side too but tricky to fix - we don't want to be numb to it, so thanks for raising!
Hi there! Question about codgen. We are thinking of removing the .gitignore files and checking in all our codegen.
There are a few reasons for wanting to do this:
- reduces steps required to get started after a fresh clone
- allows renovate bot to easily update the dependencies (because it needs a complete go project to work)
- makes it easier to batch changes across our repos
- synk scanning requires a complete go project to run
In order to keep the codegen consistent, we have created a job which runs on pull request that runs dagger develop on all the modules in our repo and then compares the git diff. If the working tree is dirty, the check fails and the developer is forced to update the generated code.
I have a few questions about this approach though:
- is codegen consistent everytime? - sometimes I have noticed things changing order in the codegen (could be just me but worth asking)
- is the codegen output bound to the dagger engine being run or the dagger version of the
dagger.json?
thanks!
Thanks for the clarification!
is codegen consistent everytime? - sometimes I have noticed things changing order in the codegen (could be just me but worth asking)
ah it should be - but there may be a bug there. if you notice that the codegen isn't consistent, that's a bug, a bug report would be very useful!
is the codegen output bound to the dagger engine being run or the dagger version of the dagger.json ?
both π so, theengineVersionin thedagger.jsonspecifies the compatibility level to use - we try our best to do codegen that's compatible with the specified version - but there will likely be drift between the engine version used.
allows renovate bot to easily update the dependencies
You don't want to update dagger dependencies with Renovate right? Mostly because codegen recreates the deps to the version needed by the engine version used. How do you prevent that?
Something I am seeing in the industry. Lots of vibe coders and software like Claude Code, Goose, improved context aware agents.
They make huge commit sets, often commit helper scripts, markdown and just refactor sources regularly. While functionally it works there is a need for an AI mege and integration suite. To handle these massive merges, ensuring existing work doesn't break, that understands the purpose of the branch source etc.
What we have today will overwhelm even the most sr developers.
Another business idea if anyone wants to run with it or knows who is already doing that.
It is not necessarily Dagger, but it is SDLC adjacent.
We actually reverted our decision to do this for now. As the engine gets upgraded we noticed the codegen is changed so this wasnt such a good idea. We would eventually like to use renovate to update non engine related dependencies but deferring that to the future now.
We use renovate for everything but dagger. Just ignore the dagger module folder. Not sure if you were present but a daggernaut did a presentation at the community call on how they integrated renovate within their environment to manage module versions (not other deps). Here's that session https://youtu.be/d0Y5QplCwl0?si=4Bknvn-C89toibBR. Doesn't seem like a trivial process though.
Christoph from Puzzle ITC shares how he automated Dagger module updates using a Dagger Renovate Agent. He walks through building a custom Renovate manager that detects Dagger CLI versions and runs dagger develop automatically within GitHub Actions. The setup helps streamline dependency updates, close noisy PRs, and ensure pipelines stay compatib...
π New Community Content Format! π
If youβve been with us for a while, you know weβve hosted livestreams featuring community demos every other week.
Starting this week, weβre changing things up!
To deliver more community content faster, weβre shifting to pre-recorded demos. This new format allows us to spotlight the amazing things youβre building with Dagger more quickly and more clearly.
I already have several users lined up to share their Dagger stories, but if youβve got a cool use case or demo, weβd love to feature it too!
Drop your information in this form or DM me directly.
Letβs keep building and showing off what Dagger can do! π₯
I can't wait to get out @amber quail and @karmic sand interviews out soon!
**All the content will be on our YouTube, so don't forget to subscribe ! **
Congratulations @sonic obsidian for launching a new open-source coding agent today, https://app.build ! You may have seen it on the first page of Hacker News today π
I'm very proud that app.build makes heavy use of Dagger for its code execution backend. If you're interested in how they use Dagger, here are the relevant files: https://github.com/search?q=repo%3Aappdotbuild%2Fagent dagger&type=code
App.build is an open-source AI agent that generates and deploys full-stack apps with Postgres. Use it as a reference to build your own agent.
Open Source AI Agent: Build Full Stack A...
Hey. I know dagger runs everything in a sandbox. But is there a way to bridge sbx to a host? I'd like to explore the llm module more, perhaps I could bridge some linux devices (/dev/) or named pipes/sockets or ttys/ptys for llm to work on my issues? E.G. I'm curious whether it would solve issues with my router-switches configuration [can only be accessed via serial], if I gave it the means to access them and devices connected to them.
Sure, I can set up connections in my host and tel llm to ssh into it, but this way it would get full access to the host, not just the parts of it I want to share. Ofc I could set up permissions and all, but that seems a bit too involving
The sandboxing is pretty tight, by design. There are escape hatches but they might not be suitable for your situation.
One way you could do this without escape hatches, is ssh access. Ssh client + credentials in the container, wrapped in dagger functions. Then bind those functions to LLM context
I see... That's unfortunate :/ Especially with this LLM module. Every day I run into similar situations more than once: I do smth on my host laptop, something borks up, and then I switch to copy-paste-routing between my terminal and ChatGPT. And every time I think to myself "what a perfect use-case would that be for an LLM agent, like dagger. But these sbx restrictions are so in a way..."....
This morning I decided to ask, hoping dagger client can operate in a full-duplex RPC proxy mode. Too bad π Now I don't even have a hope that there is a simple way π
@here Solomon's keynote at AI Engineer World's Fair is happening now. Tune in now - https://www.youtube.com/watch?v=U-fMsbY-kHY
Repo that he just open-sourced on stage - https://github.com/dagger/container-use
Development environments for coding agents. Enable multiple agents to work safely and independently with your preferred stack.
I wish I could live code on stage, I am too shy π Massive work, congrats!
haha agreed! @winter linden is a special breed π€©
AI Engineer Worldβs Fair 2025 - Day 2 Ke...
That session POPPED β€οΈ
Hey guys we are testing out assuming the node role on EC2 instances from within a dagger module (via the runtime container). Getting some issues with reaching the irsa server.
Currently not using a *dagger.Service to pass that into our dagger module but might test that next.
Do we know if the irsa would be unavailable due to sandboxing or is it more likely something to do with our setup?
We are using the aws sdk for go.
no EC2 IMDS role found, operation error ec2imds: GetMetadata, canceled, context deadline exceeded
π you might find this help post useful #1337111768027103272 message
Cheers for that. Got our issue sorted
Getting stuck into private repositories. I've got a Terraform container and it needs to be able to source modules from private repositories... I pass the SSH_AUTH_SOCK env var as a parameter of type *dagger.Socket (can I just +default this?) so the function has the socket. The TF container now needs the WithUnixSocket method... What's the path here? Does it matter?
Hello everyone, is anyone down to get on a discord chat with me? I started looking into dagger and need to use it for work to build functions for steps for our pipeline - I just have some questions
Pipeline functions questions
What can we expect Dagger's focus on CI/CD use-cases to be in the future? I'm looking at using Dagger for all our CI/CD, but all the AI stuff is extremely concerning.
(To be clear, I'm not anti-AIβI use Claude Code every day. Just the Dagger docs and marketing feels very unfocused and confused and pivot-y. The first ten examples in the docs are all LLM examples, and the quick start starts with building an AI agent!)
Sorry for the confusion.
The focus on CI/CD remains the same. The whole point of Dagger is to be a modular workflow engine, with a rich set of system primitives that you can compose into arbitrarily complex workflows. LLMs are a new primitive in the set. So now you can have deterministic workflows that can embed agentic functions. And your agentic functions can themselves call more workflows. All of this still in the frame of the same composition model.
Embedding agents inside the CI workflow is something that you will see happen more and more. Even the big AI labs are starting to talk about it. Well Dagger supports it natively.
Once consequence of coding agent tools like Claude Code, is that tasks that were part of your devloop, can be automated, and are really part of the "delivery loop". The same loop that CI is part of. That is a major change to how we ship software, that goes beyond just the generation of code. As a result legacy CI systems (which were already showing their age) will become completely irrelevant. By contrast, we want Dagger to have all the capabilities to natively run this "agent-native" delivery loop
The way I see it, the LLM primative enables things like CodeRabbit or other code review LLM tools to be built into your same CI system you already use with Dagger. Only a matter of time before an open source version pops up on Daggerverse that you can just use without an extra service.
This is a valuable question to ask - as an internal advocate who spent a lot of time convincing a team at my company to adopt another CI product (Earthly) just to have it shut down, I think it's worth being mindful about messaging.
I see the vision of the LLM primitive and how it fits into the larger Dagger workflow... But in my opinion, it definitely confuses the messaging, and that could hurt adoption. I know it's a balance between providing an open source brand that projects stability and providing a startup brand that projects "keeping up with the cutting edge..."
Just wanted to share one data point where focus on one can definitely hurt the other. When I've showed Dagger around to that same team internally, the heavy LLM focus was a bit of a red flag. Enough to make some folks go "wait, is this even a CI/CD tool at all?"
I've seen this same sentiment at my company too. When I point folks at dagger.io they are initially put off and I hear phrases like "ah this is an AI tool", "All this AI stuff is cool but can we use it?". I have to convince them that AI is not the focus and it's first and foremost a containerized workflow engine.
LLMs in general are still very restricted access within my company.
This is terrific feedback - weβre updating the homepage to make it clear this is about software engineering workflows (includes both software delivery and development) with the option to put LLMs inside.
Also weβre participating in both platform-and AI-centric events, tailoring the content accordingly. We just wrapped up at an AI event (AI Eng World Fair) so you likely saw a spike in AI-flavored content. Thereβs GH Universe, Kubecon US, and multiple DevOps Days coming up which will feel more familiar.
Thank you for the response! I do understand the appeal of the long-term vision. Like I said, I use claude code myself every day, and I'm looking at integrating more agents like coderabbit into our workflows.
To be blunt though, I'm not particularly receptive to the idea that we can or would want to build our own coding agents today. IMO claude code is the only good coding agent, so it clearly isn't a simple as just prompting an LLM with You are an expert Go programmer.... I'm sure this will change at some point as LLMs become better and better out of the box, but when I ask myself "what solutions am I looking for right now," a build-your-own agent platform is not one of them.
So it's great to hear you don't think of this as a pivot. I would suggest from a sales perspective though (data point of one), keeping grand future visions secondary in public-facing content to what the main problems Dagger solves today are.
E.g., I would make Build a CI Pipeline the first project in the Quickstart section of the docs, and Build an AI Agent the second one. And move at least some of the non-LLM CI examples to the top of the Examples page.
I could be wrong and maybe we should all be using Dagger right now instead of Claude Code and Coderabbit. This is all just the perspective of one potential customer π But if that is what you really believe, then you should work instead on selling me on that vision because I don't feel sold on that at all
If it weren't for Depot having a Dagger integration I wouldn't even have gotten this far
@slender relic you're misunderstanding what I explained to you about the agentic use case. It's not a grand future vision, it's happening today.
The goal is not to reinvent claude code but to demistify the primitives that it's built from, and make them available to platform engineers.
If you don't learn to do this in your own pipelines within the next 12 months you will be left behind.
Thank you for your feedback.
I appreciate the conviction.
Apple just launched native support for linux container in MacOS? That's huge for Dagger! https://www.apple.com/newsroom/2025/06/apple-supercharges-its-tools-and-technologies-for-developers/
Apple supercharges its tools and technol...
Hey, will you consider opening the Open telemetry produced ? ( to read it with some tool like Datadog ?)
FYI - I started building some MPC scaffolds for what I am doing based on open telemtry just today...
Totally embracing it. As I have a protocol to add to it hopefully...
Hi again, i see all my dependencies broken, something happened on the Daggerverse side ? :
! select: Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β β finding module configuration 0.5s
β ! input: moduleSource failed to resolve dep to source: failed to load git dep: select: failed to resolve git src: failed to resolve git tags: select: Get
β ! "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β β β moduleSource(refString: "Pricing/Infra/GraphSessionRenewalScheduler/pipeline"): ModuleSource! 0.4s
β β ! failed to resolve dep to source: failed to load git dep: select: failed to resolve git src: failed to resolve git tags: select: Get
β β ! "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β β β β moduleSource(refPin: "1464b057adc8229e79fcf9ab4b96670517e70a8e", refString: "github.com/vito/daggerverse/testcontainers@1464b057adc8229e79fcf9ab4b96670517e70a8e"): ModuleSource! 0.0s
β β β ! failed to resolve git src: failed to resolve git src: select: Get "https://github.com/vito/daggerverse/info/refs?service=git-upload-pack": EOF
β β β β β git(url: "github.com/vito/daggerverse"): GitRepository! 0.0s
β β β β ! Get "https://github.com/vito/daggerverse/info/refs?service=git-upload-pack": EOF
β β β
β β β β moduleSource(refPin: "dea7c3f08641fd37e72e45530c5091fda2334b08", refString: "github.com/vbehar/daggerverse/git-info@v0.13.2"): ModuleSource! 0.0s
β β β ! failed to resolve git src: failed to resolve git tags: select: Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β β β β β git(url: "github.com/vbehar/daggerverse"): GitRepository! 0.0s
β β β β ! Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF```
Hi @dusty knoll ! Even though vbehar or vito used the word daggerverse in the path, the modules are not pulled from Daggerverse itself. Daggerverse only indexes modules that are stored in git elsewhere. GitHub in this case.
Just for information i tried with a vpn and it seems to work but very very slowly... does dagger need to have constant connexion with the network (internet) ?
Yes, Dagger will check SHAs, etc and may have had objects in local cache that got pushed out and need to be downloaded again, so a network connection is important.
i do not understand why without vpn i got : β git ls-remote --symref https://github.com/kpenfound/dagger-modules HEAD HEAD^{} 0.0s fatal: unable to access 'https://github.com/kpenfound/dagger-modules/': TLS connect error: error:00000000:lib(0)::reason(0) ! git error: exit status 128 ! stderr:
does offline mode exist ?
This has been something very desirable, but not yet fully implemented.
We started with working behind corporate proxies:
- https://github.com/dagger/dagger/issues/5240 β
- some changes underway will give us more control over these offline modes π§
Some issues about full offline-ness
cc @pseudo stream π
thank you yes very important π
i'm still having issue with the network... don't know why ( i'm not behing corporate proxy)
I was having a bunch as well - but pushing to github, not with daggger
Im not sure - but looks like a bunch of spikes, but they dont all line up...
Hackathon Ideas/MCP AI
Hey, will you consider opening the Open
where can i ask dev questions?
is discord the place? or do you have slack channels for that?
THIS is the place π Welcome!!
- the help forum is a good place to ask a focused question if you're stuck
- there are channels for folks doing dev on dagger itself, mostly in #maintainers
- and for Dagger module development there is #daggernauts
- AI agent/LLMs/environments/container-use stuff in #agents
etc
i have a question slash feature request
its about how the dagger engine could interpret non-primitive parameters to dagger functions (assuming that's not possible which is my current observation/experimentation)
where should I ask this?
#daggernauts π is a fine place to start
Catching up here. Been busy at Cisco Live. If anyone is attending I would love to say Hi at DevNet Share Your Experience.
I wonder if we could bring Dagger into the DevNet sandboxes and labs to help stand them up quickly or automate some things.
Hey, I have a quick question about Dagger Engine: when running on Kubernetes, does the engine still use DinD to execute jobs or does it create additional Kubernetes pods & containers?
Hello! Dagger works the same whether it's running on Kubernetes or not. So, it does not rely on Kubernetes (or Docker) for running containers. Only for running the engine itself.
But the containers are run somehow - they are OCI containers, not systemd-nspawn or something else, right? So it's either some form of docker-in-docker or else it's creating additional workloads through Kubernetes.
It's not docker-in-docker. Dagger runs the containers via its own customer worker which leverages runc, the same underlying plumbing that docker / containerd uses. So Dagger effectively is a complete independent software workflow engine which runs everything in containers
That sounds like containers-in-container? I mean I guess the difference is that dagger doesn't rely on any external container engine to launch its containers. Does that sound right?
Okay, so if I understand correctly that means that in Kubernetes Dagger does not use the Kubernetes host container runtime and instead bundles it's own? So the Dagger Engine container runs in privileged mode and uses its own bundled runc so to create containers?
it is container-in-container depending on how you're running the dagger engine. If you're running the dagger engine in a "container", then yes, the containers that dagger spawns will live under the same cgroup hierarchy as the parent's
On the contrary, if you run the dagger engine directly on the host, then there's no container-in-container happening
Right
yes, that's correct
Thanks
sure! happy to anwser any other questions
Are there possible risks or vulnerabilities in installing remote modules from daggerverse? How are all those sources vetted?
Are there possible risks or
I'm getting a backtrace after coming out of a .Terminal() call where I was modifying a mounted file from host for testing purposes. Am I doing somethin wrong?
I'm getting a backtrace after coming out
Hi guys Iβm testing out the cookbook functions with dagger go-sdk, why is it that in youtube videos, where in a custom application a client (*dagger.Client) can give me access to the host() method but in the when I am using the dagger function route - I canβt gain access? - https://docs.dagger.io/api/reference/#query-host - I know in custom applications they always import that dagger/dagger.io line initially too
In Dagger functions in modules you are always using a Dagger SDK, like Go, Python, Java, etc.
So we don't need to rely on your actual host machine (e.g. laptop) having a Go, Python, or Java runtime environment, Dagger creates a Go, Python, or Java runtime container to execute the function in and provides you with a Dagger client called "dag" so you can use the Dagger API. All that means that from the function's perspective, the "host" is now that runtime container and not your actual host machine which is still not directly accessible from the sandbox. You have a few ways to explicitly provide args from your host machine like env vars, files, directories, sockets, secrets, etc, but you have to explicitly pass them in via the CLI/shell. Similarly you can ask for certain things like a directory or file to be exported to your local host from the CLI/shell.
So is it something like dagger tells docker daemon initially to spin a Go SDK container within which the module functions will run? So itβs like containers in my go sdk container?
That way I donβt need to use my hostβs run time and instead rely on the container go sdk setup
Similar to that except ALL of the containers are created by the Dagger Engine. We donβt use Docker to do that work.
Docker, Podman, Nerdctl et al are just used as a convenience to bootstrap the running of the Dagger Engine which we distribute as an OCI image. Folks also run Dagger Engines in Kubernetes without any Docker.
You can create containers without any underlying docker daemon? I understand now that dagger is running in a docker container at least
Yep!
- Dagger does not depend on Docker to build containers.
- It uses Docker (or Podman, etc) only to get started (like using a launcher).
- After that, it builds containers, runs services, etc on its own, using BuildKit (an open source component used by
docker buildtoo) and other Dagger components , inside its own engine. - Thatβs why it works even on systems without Docker, like Kubernetes.
I've run into an issue where Container.Sync() is returning nil, err. I was following the cookbook for Continue using a container after command execution fails as I wanted to get the return code and whatnot. Why would Sync() return a nil container? This is using the Go SDK.
I've run into an issue where Container.
Thank you so much for clarifying - so the only reason docker would need to be installed if a new user is trying out dagger is to make sure that there is a docker container for the dagger engine to run in and everything else is handled by the dagger engine in regards to the other containers?
quick question: is there a way to get the last result in dagger shell to do something with it eg chain another call
it's a directory: Directory@xxh3:3ddc3114d451511a if that helps at all
Yes, you can assign that to a variable and pass it over to another function call
Just $var=Directory@xxh:... ?
Like this. Feel free to ask any other questions!
https://docs.dagger.io/features/shell#variables
if ive already called a function and want to use the result - is that possible?
If you call the function again with the same args, it should just come out of cache
So you can run
β container | from alpine | with-new-file hi.txt "hi carnage" | directory .
Directory@xxh3:d7869640f05d1248
β mydir=$(container | from alpine | with-new-file hi.txt "hi carnage" | directory .)
β $mydir
Directory@xxh3:d7869640f05d1248
@winter linden @rain oriole feels like $_ here π should also point to the Directory ideally (doesn't today). Wdyt?
cross-posting here, as im not sure which channel is more appropriate :
Hi all π , I'm new to the Dagger ecosystem. Would it be reasonable to describe dagger workflows exclusively using the dagger shell language, or is picking one of the sdks recommended beyond adoc usage?
Hi all. I'm a dagger noob so forgive me if this is a silly question.
https://docs.dagger.io/api/module-structure: "Only types and functions in the top-level package are part of the public-facing API for the module."
IIUC, all custom types must be in the main package? I can't have a custom type Foo in pkg/foo/foo.go that is returned by a top-level module function in main.go?
not possible at the moment... it's not a structural limitation of dagger, just how the go sdk works at the moment
would you mind filing a github issue? π
will do, thanks for the prompt response!
Any specific EC2 instance type suggestions for a Dagger engine? Searched discord, figured this would have been asked before, not sure I found anything concrete
@wispy tapir did we start hiding dag.host() for Modules here?
https://github.com/dagger/dagger/pull/10326/files#diff-d4c892e5583ff7fad1d3c54c7a0ae74eed26e7d3cf6ab236b5904ae365d3225dR515
Oh, that's just for generated clients?
I see it's been like this for a minute: #daggernauts message
Previously I think we had dag.host() though in a Modules context, it gave access to the runtime container for the SDK (e.g. Go, Python, TypeScript container that ran the module's functions) instead of the actual host (e.g. laptop, server). I think we were debating changing the name of host in this context to make it more clear that the runtime container was being accessed.
cc @winter linden
No, this PR exposed dag.Host for generated client because it's a possible use case, however it has been hidden for modules since a year I think, maybe more.
If you want to access the host of your module, you can do it with dag.CurrentModule().XXX() so it's scopped to your module only and not the caller's host on invocation (we don't want a caller to share his host implicitely, it should be done through a directory argument)
So you need to use things like
dag.CurrentModule().Source().Directory("/foo")
Yes, so you can access your module host
You can check example there: https://github.com/quartz-technology/daggerverse/blob/main/magicsdk/main.go#L42 using modSource, but you can use Dag, it's the same depending on where you are
This access the module context dir (from the SDK)
wait
something seems wrong here
if you append to an array, then this modifies the original (even though it returns another value, it's not a clone)
If you quickly need a Dagger developer environment: https://labs.iximiuz.com/playgrounds/dagger-developer-47d32299
It has Go and TypeScript installed with VSCode included
Is there prebuilt container for dagger, or is best practices just curl <link> | bash for gitlab runner workflows?
for the CLI or the Engine? The engine image is here: https://docs.dagger.io/configuration/custom-runner/
e.g. registry.dagger.io/engine:v0.18.10
Oh I was think of runner as in gitlab/github runner:
Thats pretty close to this page: https://docs.dagger.io/ci/integrations/gitlab
Hi everyone. Just making sure I am not missing something. with dag()->git()... is there a way to apply the --single-branch option ? It would make a huge difference on my end
I think you do a --branch checkout with $(repo)/$(SITE_NAME)#$(SITE_BRANCH)
I think so too. My point exactly. Is tehre a way to add the single-branch option ?
Hmm TIL --single-branch as a workaround you can just clone it locally and pass it in as a normal *dagger.Directory then I think there's an AsGit() method that you can use to interact with the git components
I could but I find it provides a lesser DX to require the dev to know and write (or copy) the full git repo
Yeah I wrapped mine in a makefile for now but it definitely could be a bit easier
Should I be pulling images from ghcr or registry.dagger.io? Does it matter?
hello, i posted this in the th epython chat, posting here as well:
--
hello!
I am stuck on this.
I need to generate YAML in my python function and then I need to load that YAML in a container as a file and execute helm command on it.
How can i load string/YAML into a container as a FILE object?
I found the solution.
@function
async def test_stuff(self) -> str:
helm = self.test_container()
f = dag.directory().with_new_file("/foo.txt", "Hello World")
await helm.with_directory("/foo", f).terminal()
return ""
I have confirmed that the files exists at path "/foo" in the container.
Is it possible to launch a "work-session" that's a container build with effectively .. | terminal that lands you in zellij, that you can then dettach and re-connect to, until a task / session is complete?
TIL about Zellij. You can run Zellij within a dagger terminal but once Zellij exits, the pipeline will finish
Registry.dagger.io I believe, as it will allow us to implement CDN or another load balancing of pulls @heavy gazelle
This is a novice question but how are people who do not have a dagger engine on k8s cluster making use of dagger engine in their pipelines, is it getting spinned up every single time? How is the dagger engine in k8s cluster helping here and how is work normally done without the cluster for the pipeline scripts? I apologize if itβs a basic question
Hey, I'm getting 429 error when running curl -fsS https://dl.dagger.io/dagger/install.sh. Is my IP getting rate limited somehow or is it some other issue?
Ok I can see this in the response: x-reason: Rate limit exceeded. You are allowed 10 requests every 10 minutes. Please reach out to contact@dagger.io for help.
1 request per minute really? So am I supposed to host my own mirror just for the cli install script so that I can use dagger in my CI?
Hello, we received some abuse lately which broke downloads for normal usage. We're rolling out rate limiting but it should not affect you, sorry about that. We're tuning the limits and the problem should go away.
Thanks for the response. I was curious why I never saw us hitting any rate limit before
We just rolled out a fix with higher limits, let us know if you see any other errors.
A lot of times people use Dagger workflows in something like GitHub actions. You can also embed the SDK into an app to handle HTTP requests/events.
Can you expose a service to peers on a host? I've got host-> container working but not sure how to publish it out further
Can you expose a service to peers on a
Hey @winter linden gave this a try with a vite app and tried to get hot reloading working. I wasn't using the dagger shell but I was using the // +defaultPath="/" attribute. My code was as follows:
dagger call dev up
func (m *Backend) Dev(
// +defaultPath="/frontend"
src *dagger.Directory,
) *dagger.Service {
src = src.WithoutDirectory(".dagger")
return m.env(src).
WithMountedDirectory(".", src).
WithEntrypoint([]string{"npm", "run", "dev", "--", "--host"}).
WithExposedPort(5173).
AsService()
}
func (m *Backend) env(src *dagger.Directory) *dagger.Container {
return dag.Container().
From("node").
WithMountedCache("/root/.npm", dag.CacheVolume("npm-cache")).
WithWorkdir("/src").
WithFiles(".", []*dagger.File{src.File("package.json"), src.File("package-lock.json")}).
WithExec([]string{"npm", "install"})
}
Let me know if I'm doing something wrong.
I was expecting that changes to files made on the host would propogate to the service container but they don't seem to
Could be something on my end, or perhaps I misinterpreted how this feature should work π
@mild coral unfortunately what you're describing is a separate feature which we haven't shipped yet. But we really want to π
What we shipped is the ability to run your function multiple times from the same dagger shell session, and have the latest changes to local directories be used each time
All good. There isn't a strong need for this feature right now within our organisation, but it came up as a question from the frontend development teams.
Does container-use support using Podman instead of Docker ?
You'll probably need to alias docker=podman
https://github.com/dagger/container-use/blob/635b640a146bd83d9947610479ed4b5956cce1cc/install.sh#L43
Though technically cu uses the Dagger API and Dagger doesn't need Docker beyond getting it's BuildKit environment up; so the alias is merely plumbing to deal with that
Seeing a ton of "healthcheck failed fatally" on a our dagger engines after upgrading to 18(.10). We have not verified any adverse effects but it sounds worth investigating. I know that there is this issue but there has been no traction and I cannot verify that this is the same issue.
We are running engines in k8s and clients are run on selfhosted github actions on the same nodes in k8s.
yes, it needs dagger basically, so following this guide works for container-use https://docs.dagger.io/ci/integrations/podman/
**Calling all of our Daggernauts in France! π£ **
@paper grove and @tropic remnant will be at the following places this week during their Dagger tour:
Tomorrow - Livestream in French - https://www.linkedin.com/events/7341139672217145346/about/
Breizhcamp - This Wednesday - In-person in Rennes, FR - https://www.breizhcamp.org/
Sunny Tech - This Thursday - In-person in Montpellier, FR -
If y'all get to meet in-person, don't forget to share pictures π
Hello where can I find the latest helm chart for the dagger engine?
Hello where can I find the latest helm
Still looking for an input on HTTPS auth in https://discord.com/channels/707636530424053791/1385569508487331840 if any of you have any experience with this. It's the last barrier to greater adoption for us
instead of using this I'm using ssh auth with deployment keys to access repositories.
Not an option for us unfortunately. CI_WEB_TOKEN, or a very close similar HTTPS auth method is required
before_script:
- |
echo -e "\e[0Ksection_start:$(date +%s):ssh-key[collapsed=true]\r\e[0KSSH Config"
mkdir -p ~/.ssh
mv "$DAGGER_DEPLOY_KEY_PRIVATE" ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519
echo -e "\e[0Ksection_end:$(date +%s):ssh-key\r\e[0K"
π this is what i'm doing as part of the dagger job template
PAT auth works, but we can't have developers using PATs in pipelines - CI_JOB_TOKEN should work equally well but it doesn't
Hello! I recommend starting with the "CI quickstart" in the docs: https://docs.dagger.io/quickstart/ci
Hi there guys. As we are running self hosted dagger engines in kubernetes, something we want to be able to do is feed engine stats into our metrics platform (grafana, mimir). Things like how full is the disk and how much cache is in use would be interesting... there are other ways we could do this probably ( node metrics )... but just wondering if there is a way to do this currently within dagger itself? Thanks!
https://github.com/dagger/dagger/pull/10555 was just merged which seems relevant π cc @pseudo stream
Starting out with just a very simple Prometheus gauge for the number of connected clients + a few high-level metrics on the local cache (total disk space + number of entries). This is meant to supp...
Here is a good link for that use case https://docs.dagger.io/cookbook#build-image-from-dockerfile
let us know if you have any questions!
Do you want to pass the ssh socket like this? https://docs.dagger.io/api/remote-repositories/#pass-the-host-ssh-agent-socket-as-argument
https://docs.dagger.io/cookbook?sdk=Go+(SSH)#clone-a-remote-git-repository-into-a-container
Notice the code in the Cookbook link (second link). Seems like same use case you're looking for if you're converting from doing things in a Dockerfile to doing things in the Dagger Go SDK.
Ah, I read more scrollback. I see you said
For example I want to build a Docker image from a Dockerfile and push it to ECR
I think you'll have a better experience overall in this case. Though you can use Dockerbuild() on a dagger.Directory as docker context with Dockerfile, it seems that the opts you want for SSH mount aren't there today
https://pkg.go.dev/dagger.io/dagger#DirectoryDockerBuildOpts
Do you want what this issue asks for?
https://github.com/dagger/dagger/issues/6736
The Dagger Engine has historically relied heavily on buildkit as an internal component, but we are steadily removing our dependency on buildkit, so there is not always an easy passthrough.
It could be that converting your Dockerfile is not too hard π
#1337138258475483323 message
Got it. So you could create a module that takes in the build context, creates a Docker engine service and CLI and does the build. Perhaps we could pass in the SSH socket and you could use the --ssh option.
Dagger is sandboxed from the host, but you can pass in directories, files, sockets, secrets, etc from the host and also export things back to the host. You just have to be explicit.
// Build a Docker image from a Dockerfile
package main
import (
"dagger/nrs/internal/dagger"
)
type Nrs struct{}
// Returns a container with source code, docker cli and engine
func (m *Nrs) Build(source *dagger.Directory) *dagger.Container {
return dag.Container().
From("alpine").
WithDirectory("/app", source).
WithWorkdir("/app").
WithExec([]string{"apk", "add", "docker-cli"}).
WithExec([]string{"apk", "add", "docker-cli-buildx"}).
WithEnvVariable("DOCKER_HOST", "tcp://docker:2375").
WithServiceBinding("docker", dag.Docker().Engine())
}
Somewhere to start.
You can get that going by:
mkdir nrs && cd nrs
dagger init --sdk go
dagger install github.com/shykes/x/docker # dependency module that gives us Docker engine π
# (replace main.go with code above)
dagger call build --source <a directory or git ref with a docker build context> terminal
# you'll be in a terminal, in the container, and can try running `docker build .`
Alternatively, you could pass in your docker socket and mount that.
There may be a breaking change related to ENUMS in 0.18.11. I don't see it mentioned in release notes. I see the following error
Error: generate code: template: module.go.tmpl:86:3: executing "_dagger.gen.go/module.go.tmpl" at <ModuleMainSrc>: error calling ModuleMainSrc: failed to generate type def code for FmrDaggerEngine: failed to convert method Publish to function def: unknown enum value ""
I remember seeing a PR about ENUM namespacing, could be related.
π€
yeah, that's probably that change
it's in the go release notes
curious, do you have a code link? or at least the enum definition for any args in Publish
Let me see what I can share. I'm assuming it's not supposed to be a breaking change? (it is so far)
not supposed to be
This is the best! Thanks for sharing π Great to see Daggernauts getting together.
Wow! the https://github.com/apple/container project is legit. Still early with some gaps/rough edges, but makes bootstrapping Dagger engine on MacOS super easy!
https://github.com/apple/container/issues/206#issuecomment-3011293908
The -v /var/lib/dagger is likely to be problematic as container does not support anonymous volumes yet.
I wonder how this affects dagger.
to paraphrase how @pseudo stream described the problem - it depends on the implementation details of filesystems in container. For Docker, we need the anonymous volume in order to make that directory an overlayfs, which has significant performance impact
Apple container -v /var/lib/dagger
hey all, super interesting project and thereβs a lot of info so im wondering if someone can help me with some questions i have
-
the immediate use case is ephemeral environments for agentic tooling, but im wondering how folks have taken that one step further. does anyone have a full blown βagenticβ k8s cluster doing mind blowing stuff?
-
funnily enough, I found this project for agentic tooling, but it hit me that, this could be used for CI in general, and noticed that was an intended use case by dagger team. has anyone successfully revamped their enterprise CICD with dagger? weβre currently using GitHub actions runner controller on k8s
hey all, super interesting project and
π¨ New in Dagger Cloud: Share any trace with a link β even from private repos and local runs!
Until now, public traces were only available for public repos. That was great for open source, but what about local dev or private CI? Today, that changes.
With one click, you can now make a single trace public. Perfect for:
- Sharing local LLM prompts and builds with your teammates
- Debugging CI runs in private repos together
- Collaborating async across teams and orgs
Watch @slender charm 's demo π
https://www.youtube.com/watch?v=EPEGTfaFnpA
Anyone can try it here - https://dagger.cloud/
I wonder if this makes product like Orbstack essentially obsolete, as that product's main draw was the low level hacks the developer is doing to get speed - perhaps these new api's make that unnecessary now
Not sure yet, but I was def impressed that it "just works".
Hi guys. Quick question about tracing in the typescript SDK. For context I am on dagger 0.18.8 and I haven't tried any higher engine versions yet...
I am currently doing a POC for a few teams who might be interested in using the typescript SDK for dagger development. One of the features we have found almost essential so far is the ability to create your own spans:
@func()
async checkPullRequest(prId: number): Promise<void> {
const tracer = trace.getTracer(MyModule.name)
await tracer.startActiveSpan("unitTest", async () => this.unitTest())
await tracer.startActiveSpan("integrationTest", async => this.integrationTest())
await tracer.startActiveSpan("dangerJs", async () => this.dangerJs(prId))
}
We love that this allows us to group different processes together and see them in dagger cloud. Something I have noticed however is that when using tracer.startActiveSpan, if the function fails ( that is the function passed to startActiveSpan ), anything that would have otherwise appeared in the dagger cloud trace is lost.
We end up with a trace like this with no leave nodes under the failing dagger function.
Just wondering if this is a know issue or potentially something that I am doing wrong on my end...
Thanks for your time as always π
... tried 0.18.11 and got the same result
cc @elfin frigate π
if you want the trace urls I can DM them to you
yes please! we can then follow up.
@mild coral have you updated your module with dagger develop after you bumped to the latest version? Trying this myself in v0.18.12 with a very simple case and seems to be working correctly. I'm aware that Alex has been improving this recently so not sure if it's working because of my simple repro or the fact that I'm in 18.12 and you are in 18.12.
here's my trace and the code that I'm using:
https://dagger.cloud/dagger/traces/f2b54f722b3cad8499d6b53b011fd3e4#fac2af63e21278cf
@object()
export class Tracer {
/**
* Returns a container that echoes whatever string argument is provided
*/
@func()
async containerEcho() {
const tracer = trace.getTracer(Tracer.name);
await tracer.startActiveSpan("containerEcho", async (span) => {
await dag
.container()
.from("alpine:latest")
.withExec(["ls", "/fails"])
.stdout();
});
}
}
Hi @sharp marsh I didn't update by genned code when running dagger develop. I'll try that now. However the thing I am wondering even with your example is, I actually can't see container, from, withExec and stdout in the trace link that you sent. That is what I would expect to see even during a failure.
Tried on 0.18.12:
Still not seeing the dag in the trace:
What I would have expected is this:
^ which is what I get if I remove the tracer
that makes sense. cc @wispy tapir seems like startActiveSpan is somehow not rendering child spans when there's an error π€
Hello, would I need to manually upgrade the dagger engine on my device everytime thereβs a new engine version? How would I do that?
if you're using the dagger CLI, it'll take care of using the right engine once you update the binary
this is mostly when running dagger via the CLI outside a custom setup like provisioning the engine fleet yourself or things like that
I'll have a look!
Where do I update the binary from?
you can install it from the official Dagger docs here: https://docs.dagger.io/install
is there an easy way to spin up a container for an entire environment to use to spin up containers from (not nested). i want to be able to have a terminal multiplexer open for a container that i can use to orchestrate running containers, applications, agents, etc. sort of a uniquely addressable "workspace"
π is this in the context for container-use https://github.com/dagger/container-use ? Or unrelated?
i'm not sure if cu solves it or not exactly.
i'm trying to develop a workflow where the agent isn't the only one who has access to the throw away environment. i want to be in there with it, and I want it to be resumable later like a terminal multiplexer.
yes, cu I think it's the closest to what you're looking for
I'd suggest giving the readme a try and asking any questions or share ideas in the #container-use channel
there's a recent cu terminal command that allows you to jump into any environment to fiddle in there
amazing
Hi Daggernauts! π
We officially have a Dagger server tag on Discord! If you want to rep the Dagger community and wear the DAG tag with pride, follow the instructions here:
Once youβve added it, you should see βDAGβ in your server tag list and next to your name.
Thanks for being part of the journey. We appreciate your support! π
Cool!
/cc I found the problem, fixes is here: https://github.com/dagger/dagger/pull/10677 π
@mild coral I'll ping you when it's merge so you can lookup for the next release to see theses traces on cloud π
EDIT: actually it's already merged, you should get that change in the next release π
Raised by @marcosnils on Discord: #general message
Fixed by correctly awaiting sdk.shutdown and closing telemetry when an error...
β . Good catch tom. Thx for fixing
Amazing guys! thank you so much!
Hey, quick question. In dagger is there a mechanism where-in I can prune cache which isn't being used. Similar to how it's done in nix garbage collector.
Maybe what you are looking for is dagger core engine local-cache prune
$ dagger core engine local-cache prune --help
βΆ connect 0.2s
β loading type definitions 0.3s
β parsing command line arguments 0.0s
Prune the cache of releaseable entries
USAGE
dagger core engine local-cache prune [arguments]
EXPERIMENTAL
dagger core engine local-cache prune is currently under development and may change in the future.
Oh, thanks a lot!
Btw, just wanted to let the dagger team know that. I completed a contract where I had to migrate the entire CI/CD from GHA to Dagger, they were quite happy with the performance. And now I am doing the same for my current org. Couldn't have done without the help from you guys! So thanks a ton π !
when you run container | terminal or container | up, where does that container "run"? and then follow up question, is that the same strategy container-use uses to run a container?
-
Dagger bundles its own container runtime. So the container is executed in an ephemeral way by the Dagger engine. The stack is: Dagger CLI -> Dagger engine -> Linux kernel
-
Yes, container-use is powered by dagger under the hood for container execution. Stack: Container-use -> Dagger engine -> Linux kernel
That's fantastic! Congratulations, and thank you for your support π
@topaz blade congrats and thanks for helping us making Dagger better. Mind sharing what was the main reason your contractor decided to use Dagger? Was it performance, vendor lock-in or better overall pipeline architecture?
I'm working on an idea around light weight, resumable sessions, with a goal that nothing is stored locally. One idea is something like with-mounted-cache, but instead of local-cache, a volume is pulled from, for instance, s3, and when the pipeline completes, the volume is written back to s3. Brainstorming out loud π . Is this a thing already? If not, would it be achievable in the dagger ecosystem, perhaps with a custom function? Is there any api to "backup" an entry in the engine cache?
A couple of reasons
- Caching, The caching which is provided by GitHub via a plugin or something wasn't working for them. The (n+1)th builds won't use the cache and hence the builds were slow.
- It was a mono-repo, where they had a couple of apps Go and others in TS. So the GitHub pipeline would trigger a build for all of apps, even though they were not changed.(This still happens, cause they didn't to delve into path based builds. Since there were no changes in other services, it would build from cache. )
- Maintainability, for each service they had a Dockerfile(they were quite long as well, with a lot of common config and setup). With CI as Code in dagger, this was significantly reduced.
- Performance, they were running like 7 independent parallel builds for each service which took ~8mins or so. With the Dagger pipeline it was reduced to ~4mins and no independent parallel builds, (just a single graph like flow build, not sure what's the right term. DAG maybe)
|| They also moved from GitHub's Runners to their self-hosted mac-mini. This could also be a contributor to reduced time ||
hey folks. i've moved my github based CI to dagger.
it runs using the dagger-for-github.
but even though dagger command exists with a non zero status. the github step marked as successful
e.g - name: Run Quality Checks via Dagger
uses: dagger/dagger-for-github@8.0.0
with:
version: "latest"
verb: call
module: apps/api/dagger
args: checks --module-dir apps/api --repo-dir .
and checks is basically does this:
return hasFailures ? 1 : 0
Hello! Could you setup dagger cloud (free) and share a trace url? That way we can see exactly what happens at execution
will do, a bit later
π hi
Hello! The closest thing is probably persistent environments: https://github.com/dagger/dagger/discussions/10370
That makes sense itβs still incubating. Iβll dig into this!
Hey, is the java sdk somewhere published?
π I don't think it's yet published into maven central https://github.com/dagger/dagger/issues/9194 cc @jagged flicker
That's right, the Java SDK (when used without modules) is not yet published on maven central
We are looking to implement Dagger more widely in our processes this year, and our first step is to replace our Jenkins pipelines so that can be run on any CI system or locally.
Our initial concept was to have the whole pipeline in Dagger.
So we'd have something like an orchestration module, that would then call other dagger modules like lint, build, test etc.
However from the CI documentation I see that this high level orchestration is still handled by the CI scripting, with calls to dagger modules for each job (lint, build, test).
I can foresee that trying to send jobs to CI runners from a Dagger module could be complex, if not impossible.
Is an orchestration module not feasible with Dagger due to the way the CI systems handle the pipelines and control the runners?
Hello! I guess this is the docs page you're referring to? https://docs.dagger.io/ci/adopting#integrating-with-ci
Hi, it was these ones
https://docs.dagger.io/ci/integrations/jenkins
https://docs.dagger.io/ci/integrations/gitlab
https://docs.dagger.io/ci/integrations/github-actions
Dagger provides a programmable container engine that allows you to replace your Groovy-based Jenkins pipelines with with Dagger Functions written in a regular programming language. This allows you to execute your pipeline the same locally and in Jenkins, with intelligent caching, while keeping all of your existing Jenkins infrastructure.
Dagger provides a programmable container engine that allows you to replace your YAML pipeline definitions in GitLab with Dagger Functions written in a regular programming language. This allows you to execute your pipeline the same locally and in GitLab, with the additional benefit of intelligent caching.
I see. In that case, it's worth reading the link I shared, in particular these paragraphs:
Daggerizing leads to simplifying. It's common to merge several large CI pipelines into a single one that just wraps dagger call. This usually leads to massive simplification of the CI configuration, as complex YAML/Groovy/shell spaghetti is replaced by clean code. Taken to the extreme, this process reduces the entire CI configuration to a single dagger call, with everything else happening inside Dagger. Although this sometimes happens, in practice most projects converge to a middle ground, where the CI configuration shrinks to just enough dagger call invocations to take advantage of proprietary CI features. Usually these features are job scaling, and job visualization. The more dependent you are on these proprietary CI features, the more granularity you will need to keep in your CI configuration.
Remember that Dagger pipelines are not distributed. Each dagger call will execute a single Dagger pipeline on a single Dagger engine. It's the responsibility of the CI system to dispatch jobs across multiple machines. This means that if a single dagger call pipeline doesn't fit in a single machine, you should split it into smaller dagger call pipelines, and configure your CI to run them separately. This way, you can take advantage of the usual scaling features of your CI.
Caching makes everything faster. As a general rule, CI pipelines are very inefficient, so it's common that daggerizing them will make them faster. Importantly, it may also change your scaling requirements. In extreme cases, a pipeline that needed horizontal scaling across many machines, might fit comfortably on a single machine after daggerizing.
Thanks for the response, that's helpful. I'll give the link a full read through as well. Much appreciated
No problem.
Our goal is to make horizontal scaling a native feature of Dagger. Once that is done, that paragraph will change drastically. It will remove a barrier to collapsing the CI configuration into a single Dagger entrypoint function, which then calls other functions etc.
Until that happens, the current best practice is a pragmatic middle ground - daggerize as much as you can without jeopardizing scalability
Hello! What channel/whom can I ask some clueless questions?
Hello! If it's a general question, here is good. If it's specific to a particular tool or technology Dagger integrates with, look for a channel in the "dagger and..." category. If it's a specific request for help, try #1030538312508776540
Hey all, just started exploring Daggerβs MCP capabilities and Iβm really excited about what Iβve seen so far.
One thing I was curious about was if itβs possible to pass Dagger core types over MCP? I was trying to invoke a Dagger function as an MCP tool, and it required a dagger.Secret. From what I could tell, there doesnβt seem to be a way to marshal that through MCP the way you can with the env:ENV_VAR syntax in the CLI. Is there a supported way to handle this?
It was easy to replace this with a string value (and fine from a security standpoint), but it would have been convenient to use this module off the shelf instead of forking it.
I think this is not possible with third party MCP clients given that the secret call is currently removed from the --env-privileged mode so the LLM won't be able to create a new secret object out of that to pass it to your function. (https://github.com/dagger/dagger/pull/10106) cc @modest pier @elfin frigate @winter linden
While I am still getting my ducks in a row with all my scatter_brained_projects -- as I need Dagger for my main ambitious project - I thought I would try and condense some understandings - I very frequently re_check_in on all sorts of things becuase they always evolve and I am learning so much that I am also forgetting at an alarming rate - so I need to keep looping back on things I already knew several months back (even my own inventions Ill do four to five times to make sure I truly am creating something)
--
Anyway --
I linked this from Gemini:
Hey guys when upgrading from 0.18.8 to 0.18.12 we noticed that module errors were passed back slightly differently. I believe that before they used to be prefixed with input: and now they are not. This detail isn't really important perse, however as we were relying on the error string for some module tests, they started to fail with the upgrade. We have since changed our module tests to reflect the new error string and the problems are gone. One of the issues we will probably face is that upgrades will have to be coordinated quite carefullly. We currently host a single self hosted dagger engine on our own infrastructure that runs a specific version of the engine. We don't allow the repo to choose which dagger version it runs on, as we are running just one self hosted dagger runner version at a time. The case like this morning was trivial and only affected the platform engineering team, but changes between versions could introduce differences that do cause more issues with pipelines. I understand that at the current time, dagger is at major version 0 and therefore we should expect a few breaking changes from time to time... just wanted to highlight our current position to you guys. To mitigate this in the future on our end, we might look at spinning up a new version of the engine alongside the old and then running a few of our pipelines on this before proceeding with the full upgrade. π the joys of self hosted
Thanks for the report! And sorry for the inconvenience... Would you mind filing an issue so we have this in the record? π
Quick note on compatibility: we actually have a feature called compat mode, which allows newer engines to emulate older engines depending on the version required by each module. This has allowed us to introduce occasional breaking changes without actually breaking modules. Unfortunately you hit a "shadow breaking change" - since the contents of error messages are not considered part of the API, we don't implement compat mode for those.
But as a general rule, our strategy is to make it as painless as possible to upgrade, so that users do it as often as possible.
Note: we also have an alpha version of a hosted service that spins up an engine on the fly, and makes sure the engine version always matches the current CLI version. Let me know if you're interested in evaluating that π
How do I get dagger to not "squash" things a method prints to stdout when the cli returns?
what do you mean by "squash"?
things printed to stdout by a method are output while the dagger cli is running but then removed from the screen (squashed) when the cli returns (when --progress auto) .. but --progress plain is TOO VERBOSE
Calling all <@&1113692044158836736> fans! The TypeScript SDK is now 2x faster, and @wispy tapir shared how we did it.
We slashed cold starts from 20β30s to ~11s by bundling the entire SDK.
Read the full story from @wispy tapir here:
https://dagger.io/blog/typescript-sdk-performance
Try it out and let us know what you think in the #typescript channel!
New link - seems like old link is invalid
https://dagger.io/blog/typescript-sdk-performance
I came here to solve an issue with running AMD64 containers and binaries on a Mac M1 and immediately found the solution in #1030538312508776540! This is a fantastically organized Discord π
Thanks Solomon. I have created an issue here to discuss it further: https://github.com/dagger/dagger/issues/10713
Regarding the dagger engine service, we chatted to Lev about that yesterday. Might give it a go π
Dagger cloud suggestion: .exitCode doesn't need an expando, put the exit code after Container.exitCode on the same line
Anyone have any success spinning up a kafka container under dagger ?
"Kafka under Dagger" is a pretty ominous sounding
Anyone have any success spinning up a
Iβve made a first hack at migrating from Earthly to Dagger. While it works, thereβs a chance I didnβt do things in optimal Dagger best practices.
If more experienced eyes would be willing to take a look, both the original Earthly and new Dagger configs can be viewed here: https://gitlab.com/veilid/veilid/-/tree/migrate-from-earthly-to-dagger?ref_type=heads
I do find it odd that literally everyone has been attacking bespoke methods for proper project scaffolding.
There was a really great post I shared by someone who mad a ux for clicking and selecting Cursor Rules options for a project and it spits out rules files.
βI keep seeing in my head the need for much easier project templating especially in the agentic age.
I have >~150 experimental projects in some state of agentic-disarray.
Iβve been working on an inventory system for my AGENTIC_LITTER as I call stub projects that sue because it becomes too costly to re-contextual use new agents to the core premise of a project experiment.
β-
But the thing is Iβve been trying to use template blocks so one can check off the tools the project would rely on and then bespokenly properly setup up.
If youβve ever used Ninite.com to select various windows packages to install and setup a new machineβ¦
A page with checkboxes that says β
Give me a project setup thatβs going to be built with cursor in d:\outputs\new project and it will use guvsonai for the schema build and will be a local Postgres with project meta sdocumented in local sql lite and will use a dagger line for the test and xo harness, vercel deploy, xyz other apps
But you just check off the tooling the scaffold requires and then it will know how to properly scaffold up the project.
Just seems we are all spending overlap tokens where we truly are supposed to be using an agent to fix exactly this problem.
I should be able to just say βgive me XYZβ and it should know the correct scaffold to pull.
We published HotpotQA, a groundbreaking multi-step question answering dataset in 2018, which has since motivated and facilitated numerous AI agent research works. But you should probably reconsider using it for your AI agents research in 2025.
Can you use #links for posting links please? Especially links that are not directly about Dagger π
Thanks
I'm experiencing more unexpected outcomes with enums since 0.18.12. I moved my enum values to var () from const () to avoid panic: failed to unmarshal parent object: unknown enum value "" but in var they... don't work.
Using this:
var (
// Terraform
Plan TerraformCommand = "plan"
Apply TerraformCommand = "apply"
)
dagger call <name> --help shows the underlying type (string) not the enum type TerraformCommand, and supplying an invalid value (--command hello) doesn't cause an error but instead happily works.
Moving them back to const produces the expected error: invalid argument "hello" for "--command" flag: value should be one of PLAN,APPLY but doesn't actually work for expected usage: --command plan or --command PLAN both result in panic: failed to unmarshal parent object: unknown enum value ""
Summary:
Enums in var appear descriptive at best (dagger call <> --help: --command string Terraform command (default "plan")). The input validation enums used to have in const seems to have vanished, and the actual enum type isn't shown anywhere in dagger call <> --help
Enums in const do show in dagger call <> --help (--command PLAN,APPLY Terraform command (default PLAN)), do validate the input, but do not actually work for valid input
Will do.
@loud briar mind renaming plan to PLAN in your code to see if that fixes it?. Enum values are case-sensitive and they should be upper cased by convention. π§΅
hi everyone! Our latest Daggernaut story is up.
**@karmic sand shares how he built autonomous testing agents with Dagger. **
Check it out here: https://www.youtube.com/watch?v=Shwv8KrlQfE
I had so much fun putting his demo together. If you want to share your Dagger story with the world, please DM me. I'd love to help π
Meet Kambui Nurse, Founder of AI Agency Services, as he walks through how he built an intelligent, autonomous CI workflow using Dagger. In this deep-dive, Kambui demonstrates how his agents use generative AI to:
- Automatically generate and validate tests in a self-correcting loop
- Handle pull requests with smart automation
- Index code semant...
π£ Reminder!
Tomorrow is our Engineering Deep Dive on Agentic CI π§ π₯
@slender star and @warm temple will be joined by @rustic brook to break down why traditional CI/CD isnβt cutting it anymore, and how you can make Agentic CI work for you.
Tomorrow @ 8:30 AM PT
Register here: https://dagger.io/deep-dives/agentic-ci
Donβt miss it!
Hi dagger people! I am facing an issue when using interfaces and dagger shell together. We are trying to use dagger shell to help us initialise "dependency" modules and inject them (dependency injection style) into a main module which is going to house most of the CI/CD logic.
We are internally calling this "main" module a "workflow" module. We then install these "workflow" modules into application repos as a dependency. When we install them, we install them with the alias workflow by doing a dagger install --name workflow <workflow-module> on the application repo.
Update: this doesn't have much to do with dagger shell, as I was able to reproduce this in some fully codegenned scenarios too, seems to be related to the module aliasing
To tell the truth, blueprint modules would probably solve the underlying concern for us here because the reason why we were aliasing the workflow module name is so we could supply -m workflow everywhere where we wanted to invoke the workflow module
But blueprint modules would allow us to simply do . <constructor params> | <module-function> in dagger shell or dagger call <constructor-params> <module-function>... so its a minor issue for us
not a blocker
I am getting the following error at the moment.
! marshal: json: error calling MarshalJSON for type *main.GoService: json: error calling MarshalJSON for type *main.openBaoImpl: returned error 422: {"data":null,"errors":[{"message":"Cannot query field \"loadGoServiceOpenBaoFromID\" on type \"Query\". Did you mean \"loadWorkflowOpenBaoFromID\", \"loadServiceFromID\", \"loadInterfaceTypeDefFromID\",
\"loadSourceMapFromID\", or \"loadTerminalFromID\"?","locations":[{"line":1,"column":7}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}}]}
Hi ! I am using container-use with gemini cli. It works well but I want to start from a pre-built image. So I update my environment.json. it works well however I want different images. It is a monorepo composed of python and nodejs. Can I do that or should I create a bug image with all reqs?