Good-bye
"push & pray"

Good-bye
"push & pray"

Good-bye
"push & pray"

Write your pipelines in Go, Typescript or Python. Run locally or in CI. Iterate in seconds, not minutes.
Write your pipelines in Go, Typescript or Python. Run locally or in CI. Iterate in seconds, not minutes.
Write your pipelines in Go, Typescript or Python. Run locally or in CI. Iterate in seconds, not minutes.

Trusted by

Trusted by

Benefits

Code > YAML

Code > YAML

Replace complex CI scripts with a programmable platform for running containerized pipelines

Replace complex CI scripts with a programmable platform for running containerized pipelines

Benefits

Code > YAML

Replace complex CI scripts with a programmable platform for running containerized pipelines

Standardized Dagger Functions

Standardized Dagger Functions

Dagger Pipelines just chain reusable and standardized Dagger Functions - built by your teams or by the community

Dagger Pipelines just chain reusable and standardized Dagger Functions - built by your teams or by the community

Standardized Dagger Functions

Dagger Pipelines just chain reusable and standardized Dagger Functions - built by your teams or by the community

Eliminate Push and Pray

Eliminate Push and Pray

Dagger makes your pipelines truly portable. If it works on your laptop it'll work in CI. Any CI.

Dagger makes your pipelines truly portable. If it works on your laptop it'll work in CI. Any CI.

Eliminate Push and Pray

Dagger makes your pipelines truly portable. If it works on your laptop it'll work in CI. Any CI.

Cached for Speed

Cached for Speed

Super fast: Dagger avoids unnecessary rebuilds and test reruns when nothing has changed

Super fast: Dagger avoids unnecessary rebuilds and test reruns when nothing has changed

func (g *Golang) Base(version string) *Golang {
	mod := dag.CacheVolume("gomodcache")
	build := dag.CacheVolume("gobuildcache")
	image := fmt.Sprintf("golang:%s", version)
	c := dag.Container().
		From(image).
		WithMountedCache("/go/pkg/mod", mod).
		WithMountedCache("/root/.cache/go-build", build)
	g.Ctr = c
	return g

Cached for Speed

Super fast: Dagger avoids unnecessary rebuilds and test reruns when nothing has changed
func (g *Golang) Base(version string) *Golang {
	mod := dag.CacheVolume("gomodcache")
	build := dag.CacheVolume("gobuildcache")
	image := fmt.Sprintf("golang:%s", version)
	c := dag.Container().
		From(image).
		WithMountedCache("/go/pkg/mod", mod).
		WithMountedCache("/root/.cache/go-build", build)
	g.Ctr = c
	return g

import { dag, Container, Directory, object, func } from "@dagger.io/dagger"

@object()
// eslint-disable-next-line @typescript-eslint/no-unused-vars
class Ci {

  /**
   * example usage: "dagger call ci --source ."
   */
  @func()
  async ci(source: Directory): Promise<string> {
    // Use Golang module to configure project
    var goProject = dag.golang().withProject(source)

    // Run Go tests using Golang module
    await goProject.test()

    // Get container with built binaries using Golang module
    var image = await goProject.buildContainer()

    // Push image to a registry using core Dagger API
    var ref = await image.publish("ttl.sh/demoapp:1h")

    // Scan image for vulnerabilities using Trivy module
    return dag.trivy().scanContainer(dag.container().from(ref))
  }
}

Multi-Language

Multi-Language

Pipelines in the same language as your app. Each Dagger Function is just an API call away.

Pipelines in the same language as your app. Each Dagger Function is just an API call away.

import { dag, Container, Directory, object, func } from "@dagger.io/dagger"

@object()
// eslint-disable-next-line @typescript-eslint/no-unused-vars
class Ci {

  /**
   * example usage: "dagger call ci --source ."
   */
  @func()
  async ci(source: Directory): Promise<string> {
    // Use Golang module to configure project
    var goProject = dag.golang().withProject(source)

    // Run Go tests using Golang module
    await goProject.test()

    // Get container with built binaries using Golang module
    var image = await goProject.buildContainer()

    // Push image to a registry using core Dagger API
    var ref = await image.publish("ttl.sh/demoapp:1h")

    // Scan image for vulnerabilities using Trivy module
    return dag.trivy().scanContainer(dag.container().from(ref))
  }
}

Multi-Language

Pipelines in the same language as your app. Each Dagger Function is just an API call away.

Visualize your pipelines

Visualize your pipelines

My test failed.
Is it a broken Pipeline?

Gain visibility into every aspect of your pipelines. Interactive debugging right at the point of failure.

My test failed. Is it a broken Pipeline?

Gain visibility into every aspect of your pipelines. Interactive debugging right at the point of failure.

Visualize your pipelines

My test failed. Is it a broken Pipeline?

Gain visibility into every aspect of your pipelines. Interactive debugging right at the point of failure.

Don't take our Word for it…

Don't take our Word for it…

  • Conor Barber

    Airbyte

    Before Dagger it was 'Push and Pray.' Now, we have the same tool running locally and in CI, and that just streamlines everything. Now our mantra is test, test, test, test.

  • Andy Gonzalez

    Fortune 500 company

    Replacing our makefiles with Dagger has greatly simplified our process for deployments since it’s much faster (1-3 hours to 3 minutes)...The power, flexibility and capability behind Dagger is something that gets me excited.

  • Tony Worm

    hof - the high code framework

    With Dagger, I can define what I want my desired results to be, and Dagger figures out what needs to happen to get those results.

  • James Qualls

    Discern

    We want to be able to ship every single day, multiple times a day, as fast as we possibly can. Dagger is enabling us to do that.

  • Kevin Minehart

    Grafana

    With Dagger, we were able to go from something that takes an hour to something that takes 8 minutes.

  • George MacRorie

    Flipt

    Dagger feels like an actual innovation in CI/CD. There's a real attention to getting feedback from everyone and feeding that back into the design and building something that people need.

  • Jason McCallister

    Craft Cloud

    Dagger with the Go SDK powers our build system. It allows us to programmatically construct a highly scalable and efficient pipeline for orchestrating complex builds, eliminating the need for manual Dockerfile manipulation.

  • Conor Barber

    Airbyte

    Before Dagger it was 'Push and Pray.' Now, we have the same tool running locally and in CI, and that just streamlines everything. Now our mantra is test, test, test, test.

  • Andy Gonzalez

    Fortune 500 company

    Replacing our makefiles with Dagger has greatly simplified our process for deployments since it’s much faster (1-3 hours to 3 minutes)...The power, flexibility and capability behind Dagger is something that gets me excited.

  • Tony Worm

    hof - the high code framework

    With Dagger, I can define what I want my desired results to be, and Dagger figures out what needs to happen to get those results.

  • James Qualls

    Discern

    We want to be able to ship every single day, multiple times a day, as fast as we possibly can. Dagger is enabling us to do that.

  • Kevin Minehart

    Grafana

    With Dagger, we were able to go from something that takes an hour to something that takes 8 minutes.

  • George MacRorie

    Flipt

    Dagger feels like an actual innovation in CI/CD. There's a real attention to getting feedback from everyone and feeding that back into the design and building something that people need.

  • Jason McCallister

    Craft Cloud

    Dagger with the Go SDK powers our build system. It allows us to programmatically construct a highly scalable and efficient pipeline for orchestrating complex builds, eliminating the need for manual Dockerfile manipulation.

Get Involved With the community

Discover what our community is doing, and join the conversation on Discord & GitHub to help shape the evolution of Dagger.

Subscribe to our newsletter

Get Involved With the community

Discover what our community is doing, and join the conversation on Discord & GitHub to help shape the evolution of Dagger.

Subscribe to our newsletter

Get Involved With the community

Discover what our community is doing, and join the conversation on Discord & GitHub to help shape the evolution of Dagger.

Subscribe to our newsletter