Transform your Messy CI Scripts into Clean Code

Powerful, programmable open source CI/CD engine that runs your pipelines in containers — pre-push on your local machine and/or post-push in CI

Transform your Messy CI Scripts into Clean Code

Powerful, programmable open source CI/CD engine that runs your pipelines in containers — pre-push on your local machine and/or post-push in CI

Transform your Messy CI Scripts into Clean Code

Powerful, programmable open source CI/CD engine that runs your pipelines in containers — pre-push on your local machine and/or post-push in CI

Trusted by

Trusted by

The Dagger Platform

Benefits

No More
YAML Soup

No More YAML Soup

Replace complex CI scripts with a programmable platform

Replace complex CI scripts with a programmable platform

Standardized Dagger Functions

Standardized Dagger Functions

Pipelines just chain Dagger Functions - built by your team or by the community

Pipelines just chain Dagger Functions - built by your team or by the community

Eliminate Push and Pray

Eliminate Push and Pray

If it works on your laptop it'll work in CI

If it works on your laptop it'll work in CI

Cached for Speed

Cached for Speed

Avoid unnecessary rebuilds and test reruns when nothing has changed

Avoid 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.

Visualize your pipelines

Visualize your pipelines

My test failed.
Is it a broken Pipeline?
Dagger gives you visibility into every aspect of your pipelines

My test failed. Is it a broken Pipeline?
Dagger gives you visibility into every aspect of your pipelines

Benefits

No More YAML Soup

Replace complex CI scripts with a programmable platform

Standardized Dagger Functions

Pipelines just chain Dagger Functions - built by your team or by the community

Eliminate Push and Pray

If it works on your laptop it'll work in CI

Cached for Speed

Avoid 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

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

Visualize your pipelines

My test failed. Is it a broken Pipeline?
Dagger gives you visibility into every aspect of your pipelines

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.

  • 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.

"Dude, Where's my Platform?"

"Dude, Where's my Platform?"

"Dude, Where's my Platform?"

Solomon explains why he built Docker and Dagger, and why the world desperately needs to invest in optimizing each company's unique software factory.
Solomon explains why he built Docker and Dagger, and why the world desperately needs to invest in optimizing each company's unique software factory.
Solomon explains why he built Docker and Dagger, and why the world desperately needs to invest in optimizing each company's unique software factory.

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