Skip to main content

What is Dagger?

Dagger is a platform for composing and running software engineering workflows - for example, complex integration testing environments, data processing pipelines, and AI agent workflows.

Dagger lets you build workflows from containers, LLMs, files, repositories, directories, and other resources, as reusable modules that run anywhere, with full type safety and automatic caching.

Dagger is open source and works with any compute platform or technology stack, automatically optimizing for speed and cost.

With Dagger, you:

  • Write workflows once in your preferred language
  • Run workflows consistently across local development, CI, and production
  • Gain complete observability over workflow performance, failures and errors

Common use cases​

Get started​

Dagger platform​

Dagger consists of a number of components, all of which work together in an integrated fashion to provide a framework to build and run composable workflows.

Types​

Types are the basic building blocks - such as containers, directories, files, and LLMs - that hold data (state) and offer operations (methods) you can link together. Each operation on a type runs inside a container, ensuring consistent, isolated execution.

Learn more about types →

Functions​

Dagger Functions are individual units of computation that perform a specific task by combining operations on types with custom logic. Dagger Functions are written in a programming language using a type-safe Dagger SDK, and packaged and shared in Dagger modules.

Learn more about Dagger Functions →

Modules​

Dagger Functions are packaged, shared and reused using Dagger modules.

When a Dagger module is loaded into a Dagger session, the Dagger API is dynamically extended with new functions served by that module. So, after loading a Dagger module, an API client can now call all of the original core functions plus the new functions provided by that module.

Learn more about Dagger modules →

CLI​

The Dagger CLI is your primary entrypoint to Dagger. It is a full-featured, easy to use tool that can be used interactively from a terminal or non-interactively from a shell script or a CI runner. The Dagger CLI also includes a real-time visualization feature called the terminal UI (TUI).

The Dagger CLI acts as a client to the Dagger Engine. It can automatically provision a Dagger Engine if needed.

Learn more about the Dagger CLI →

Engine and API​

The Dagger Engine is the core runtime powering the Dagger platform. It combines an execution engine, universal type system, data layer and module system. It can run on any OCI-compatible system, and is controlled by the Dagger API.

The Dagger API is a unified interface for programming the Dagger Engine. It defines a universal type system based on GraphQL, which can be introspected by any client, and dynamically extended by specially crafted servers. The core features of the Dagger Engine - execution engine, data layer - are available as builtin types.

Learn more about the Dagger API →

SDKs​

Dagger SDKs provide resources for developing Dagger modules using a familiar language and toolchain. Each SDK provides:

  1. A client generator, to consume the Dagger API with native code.
  2. A server generator, to extend the Dagger API with native code.
  3. Examples and reference documentation

Learn more about Dagger SDKs →

Dagger Cloud​

Dagger Cloud complements Dagger with a production-grade control plane. Features of Dagger Cloud include workflow visualization and operational insights. Dagger Cloud provides a web interface to visualize each step of your workflow, drill down to detailed logs, understand how long operations took to run, and whether operations were cached.

Dagger Cloud also collects telemetry from all your organization's Dagger Engines, whether they run in development or CI, and presents it all to you in one place. This gives you a unique view on all workflows, both pre-push and post-push.

Learn more about Dagger Cloud →

Daggerverse​

The Daggerverse is a free service run by Dagger, which indexes all publicly available Dagger modules, and lets you easily search and consume them.

You can use the Daggerverse to find reusable modules, share your own modules, and discover new ways to use Dagger.

Learn more about the Daggerverse →

Community and support​

  • Community - Explore the Dagger community and join upcoming events
  • Daggerverse - Find modules in our community module registry
  • Discord - Get help and share ideas
  • YouTube - Learn about Dagger through videos, community demos, and livestreams
  • GitHub - Contribute to Dagger's open source repository