Self-hosted/Single binary/Zero dependencies

The workflow engine that doesn't turn into an SRE project.

Dagu is a lightweight alternative to Airflow or Cron with a Web UI. Define DAGs in a simple declarative YAML format. It supports shell commands, docker containers, k8s jobs, remote commands via SSH, and more. It was designed to be easy to use, self-contained, and require no coding, making it ideal for small teams.

Dagu is built for developers who want powerful workflow orchestration without the operational overhead.

Try Live Demodemouser / demouser
daily-report.yaml
on schedule
# runs every night at 02:00
schedule: "0 2 * * *"
steps:
- name: fetch data
command: python fetch.py
retryPolicy:
limit: 3
- name: build report
command: python report.py
- name: notify
command: ./notify.sh
last run · 02:00:04 · exit 03/3 steps

Trusted by developers at

1Password
Intel
MongoDB
Baidu
ByteDance
Canonical
Grab
Douban
Debian
NASA / JPL
Gitee
Plaid
Geodis
Aleno
Mambu
Audibene
NINAnor
RUBIX GmbH
cynkra
DataLad
dandi
QNIB Solutions
modoolar
TTT Studios
vital-software
m3dev
Build On Technologies
Dalibo
InfoInnova
infront-quant
gfx-labs
t54-labs
sajo
ANZX
1Password
Intel
MongoDB
Baidu
ByteDance
Canonical
Grab
Douban
Debian
NASA / JPL
Gitee
Plaid
Geodis
Aleno
Mambu
Audibene
NINAnor
RUBIX GmbH
cynkra
DataLad
dandi
QNIB Solutions
modoolar
TTT Studios
vital-software
m3dev
Build On Technologies
Dalibo
InfoInnova
infront-quant
gfx-labs
t54-labs
sajo
ANZX
1Password
Intel
MongoDB
Baidu
ByteDance
Canonical
Grab
Douban
Debian
NASA / JPL
Gitee
Plaid
Geodis
Aleno
Mambu
Audibene
NINAnor
RUBIX GmbH
cynkra
DataLad
dandi
QNIB Solutions
modoolar
TTT Studios
vital-software
m3dev
Build On Technologies
Dalibo
InfoInnova
infront-quant
gfx-labs
t54-labs
sajo
ANZX

Easy to use

Define workflows in plain YAML. Install with one command and ship your first DAG in minutes.

Reliable

Built for production: retries, timeouts, alerts, and full logs for every run.

Open source

GPLv3, community-driven, and built in the open. No black boxes in your infrastructure.

The control plane

Every job, every run, one screen.

Schedules, statuses, and logs live in one Web UI. Trigger a run, watch it move through its steps, and read the output without leaving the browser.

Jobs
Run Job
NameScheduleStatusLast Run
daily-report0 2 * * *Success2m ago
data-sync*/15 * * * *Success7m ago
cleanup0 3 * * 0Success1h ago
weekly-summary0 4 * * 1RunningNow
dagu — zsh
$ dagu start daily-report
INFO[0000] Starting DAG daily-report
INFO[0001] Step 1/3: fetch data
INFO[0002] Step 2/3: build report
INFO[0003] Step 3/3: notify
INFO[0004] DAG daily-report finished ✓

Built-in MCP server for workflow operations without exposing secrets

Authorized MCP-capable clients can inspect and request DAG operations through Dagu. Private systems stay behind a security boundary: Dagu injects credentials at runtime and does not pass them to the MCP client.

MCP client

Requests an approved operation without receiving private credentials.

Request

Dagu MCP

Enforces granular access control before any workflow can run.

Authorize

DAGs

Runs the exact script, container, SQL, HTTP, SSH, or sub-workflow you already trust.

Execute

Private systems

Production tools and data stay behind Dagu, not inside the client context.

ShellSQLSSH

MCP-capable clients request named workflow actions through Dagu MCP instead of receiving shell, database, or API credentials.

Dagu checks access, injects secrets only at runtime, and can pause sensitive workflows for human approval.

Every run keeps logs, outputs, status, history, and audit evidence for humans and MCP clients to inspect.

Scoped access

Expose only the actions each MCP client is allowed to run.

Managed secrets

Inject credentials at runtime without passing them to the MCP client.

Audit trail

Track who or what requested each workflow and with which inputs.

Approvals

Pause high-risk operations for human review.

Safe results

Return status and outputs without opening raw system access.

The agent gets a bounded tool. Your private systems keep the secrets, logs, permissions, and operational history in Dagu.

Deployment models

Run a self-hosted instance, use the Dagu managed server, or combine the cloud control plane with private workers in your infrastructure.

Start on one machine. Scale to self-hosted, managed, or hybrid.

Local

Single server

Run `dagu start-all` on one machine with local file-backed state. No database, broker, or platform stack required.

Self-hosted

Your infrastructure

Keep the Dagu server, workers, secrets, logs, and execution inside your own environment.

Dagu

Full managed server

Use a dedicated Dagu server operated by Dagu in an isolated gVisor instance on GKE.

Hybrid

Managed server, private execution

Let Dagu operate the server while private workers run Docker, private-network, or data-local steps.

Hybrid execution

Managed Dagu server
Private worker over mTLS
Docker, private APIs, secrets, and data-local work

Hybrid keeps the Dagu server managed while execution that needs your network, runtime, or data stays under your control.

Production-grade workflow engine features

Battle-tested workflow engine features let you focus on the core value without worrying about orchestration.

Performance

Run thousands of workflow runs per day on one machine, depending on hardware, workflow shape, step duration, and queue settings.

Distributed executions

Use queues, concurrency limits, and distributed workers to control load and spread jobs across machines.

Notifications

Recurring schedules, catchup, durable executions, timeouts, reruns, notification, and incidents routing to responders.

Auth & RBAC

User management, RBAC, workspaces, approval steps, built-in secret management, API Keys, and webhooks.

Real-world use cases

01

Customer Support Automation

Turn repetitive engineering requests into self-service workflows. Business teams run them independently. Engineers stay out of the loop.

02

Cron and Legacy Script Management

Bring existing shell scripts, Python scripts, HTTP calls, and scheduled jobs into Dagu without rewriting them.

03

Infrastructure and Server Automation

Coordinate SSH backups, cleanup jobs, deploy scripts, patch windows, precondition checks, and lifecycle hooks.

04

ETL and Data Operations

Run PostgreSQL or SQLite queries, S3 transfers, jq transforms, validation steps, and reusable sub-workflows.

05

Container and Kubernetes Workflows

Compose workflows where each step can run a Docker image, Kubernetes Job, shell command, or validation step.

06

Media Conversion

Run ffmpeg, thumbnail extraction, audio normalization, image processing, and other compute-heavy jobs across workers.

07

IoT and Edge Workflows

Run sensor polling, local cleanup, offline sync, health checks, and device maintenance jobs on small devices.

08

Agent Harness Workflows

Run any harness to automate certain development workflow with clean context and automatic retry & failover.

Common patterns

Health Check
SSH Backup
Notify

Private Script Workflows

Turn private scripts, internal CLIs, reusable actions, pinned tools, and artifacts into workflows other teams can safely request or run.

  • 1Keep existing scripts and commands intact
  • 2Expose narrow parameters instead of broad production access
  • 3Call versioned Dagu Actions with typed outputs
  • 4Store reports and logs as first-class artifacts
workflow.yaml
tools:
  - jqlang/jq@jq-1.7.1

steps:
  - id: collect
    action: acme/dagu-action-export@v1.4.2
    with:
      dataset: customers

  - id: transform
    run: jq '.items[] | {id, email}' ${steps.collect.outputs.path}
    stdout:
      artifact: reports/customers.json
    depends: [collect]

  - id: publish
    action: outputs.write
    with:
      values:
        report: reports/customers.json
        rows: ${steps.collect.outputs.rows}
    depends: [transform]

Typed parameters

Dagu automatically renders them as a typed parameter input form in the Web UI, useful for making self-service workflows or operation by non-engineers.

workflow.yaml
tools:
  - jqlang/jq@jq-1.7.1

steps:
  - id: inspect
    run: jq --version

  - id: summarize
    action: python-script@v1
    with:
      input:
        rows: [42, 8]
      script: |
        return {"total": sum(input["rows"])}

Tool provisioning uses aqua as the default provider.

Full-fledged Workflow features

Dagu is equipped with production-grade workflow engine features.

Loved by developers

Real comments from the Dagu GitHub community.

I've been looking for an alternative for dynamic agent workflows lately. I started out down the Temporal path. Temporal is powerful, but if all you want is to dynamically chain agents, scripts, data processing, and ops tasks together, the whole stack can feel a bit heavy. Then I came across Dagu, and the direction felt right. It runs as a single binary, workflows are written in YAML, everything lives in local files, it ships with a web UI, and there's no extra DB or broker to stand up. There are plenty of built-in actions too: shell, Docker, K8s Jobs, SSH — all there. A nice surprise was harness.run, which lets you plug external coding agent CLIs straight into a workflow. What I like most: the workflow itself is just a file, and state, logs, retries, dependencies, and the UI are all taken care of for you. For small teams, private environments, personal automation, and agent workflows, Dagu's local-first approach turns out to be a really comfortable fit.
Engineer at Alipay

This is literally my dream project. I have set up GitLab at some point just to run some commands and this project is perfect for all my use case. Thank you very much!

@vnghia

Developer

#827

Dagu is really a gem in the open source world! ❤️ What a release — with GitHub Actions as well. Thanks guys.

@borestad

Elk Studios

#1313

Dagu is an amazing tool!! It works perfectly now, thank you so much! 💖

@jarnik

Freelance developer

#1294

I've been exploring Dagu for a few weeks and really love the Zero-Ops philosophy. The declarative YAML approach is exactly what the workflow orchestration space needs.

@vincent067

Developer

#1814

Amazing! I did not expect this to be delivered that fast! Multiple schedulers do not compete and the locking mechanism works as expected. Good job!

@jonasban

Developer

#1130

I've recently played around with Dagu for private stuff and think it could also be worth introducing at work.

@DarkWiiPlayer

Developer

#924

Awesome, it works like a charm! I second the update of the doc on this one.

@thibmart1

Developer

#1320

That's very impressive. The exit code dictionary will make these DAGs even further sophisticated. Once again, very good features. 🫡

@ghansham

Developer

#1076

This is literally my dream project. I have set up GitLab at some point just to run some commands and this project is perfect for all my use case. Thank you very much!

@vnghia

Developer

#827

Dagu is really a gem in the open source world! ❤️ What a release — with GitHub Actions as well. Thanks guys.

@borestad

Elk Studios

#1313

Dagu is an amazing tool!! It works perfectly now, thank you so much! 💖

@jarnik

Freelance developer

#1294

I've been exploring Dagu for a few weeks and really love the Zero-Ops philosophy. The declarative YAML approach is exactly what the workflow orchestration space needs.

@vincent067

Developer

#1814

Amazing! I did not expect this to be delivered that fast! Multiple schedulers do not compete and the locking mechanism works as expected. Good job!

@jonasban

Developer

#1130

I've recently played around with Dagu for private stuff and think it could also be worth introducing at work.

@DarkWiiPlayer

Developer

#924

Awesome, it works like a charm! I second the update of the doc on this one.

@thibmart1

Developer

#1320

That's very impressive. The exit code dictionary will make these DAGs even further sophisticated. Once again, very good features. 🫡

@ghansham

Developer

#1076

This is literally my dream project. I have set up GitLab at some point just to run some commands and this project is perfect for all my use case. Thank you very much!

@vnghia

Developer

#827

Dagu is really a gem in the open source world! ❤️ What a release — with GitHub Actions as well. Thanks guys.

@borestad

Elk Studios

#1313

Dagu is an amazing tool!! It works perfectly now, thank you so much! 💖

@jarnik

Freelance developer

#1294

I've been exploring Dagu for a few weeks and really love the Zero-Ops philosophy. The declarative YAML approach is exactly what the workflow orchestration space needs.

@vincent067

Developer

#1814

Amazing! I did not expect this to be delivered that fast! Multiple schedulers do not compete and the locking mechanism works as expected. Good job!

@jonasban

Developer

#1130

I've recently played around with Dagu for private stuff and think it could also be worth introducing at work.

@DarkWiiPlayer

Developer

#924

Awesome, it works like a charm! I second the update of the doc on this one.

@thibmart1

Developer

#1320

That's very impressive. The exit code dictionary will make these DAGs even further sophisticated. Once again, very good features. 🫡

@ghansham

Developer

#1076

I love how simple this is now.

@n3storm

Estudio Nexos

#1593

Fantastic! Thanks for the quick reply — keep up the great project!

@mitchplze

Developer

#1359

Amazing support! Thank you!

@kacamific

Developer

#760

It works perfectly with v2.6.1. Thank you very much for the correction.

@napnap75

Developer

#1638

Thanks for the fix. Works great now.

@triole

Developer

#831

As always, appreciate the great work — just sharing feedback to help shape the roadmap.

@jonnochoo

Developer

#770

it's awesome you keep working on it 👍

@fishnux

Developer

#328

Thank you so much for the quick fix! I tested it, and it now correctly stores the files where it should.

@IngwiePhoenix

Developer

#423

I love how simple this is now.

@n3storm

Estudio Nexos

#1593

Fantastic! Thanks for the quick reply — keep up the great project!

@mitchplze

Developer

#1359

Amazing support! Thank you!

@kacamific

Developer

#760

It works perfectly with v2.6.1. Thank you very much for the correction.

@napnap75

Developer

#1638

Thanks for the fix. Works great now.

@triole

Developer

#831

As always, appreciate the great work — just sharing feedback to help shape the roadmap.

@jonnochoo

Developer

#770

it's awesome you keep working on it 👍

@fishnux

Developer

#328

Thank you so much for the quick fix! I tested it, and it now correctly stores the files where it should.

@IngwiePhoenix

Developer

#423

I love how simple this is now.

@n3storm

Estudio Nexos

#1593

Fantastic! Thanks for the quick reply — keep up the great project!

@mitchplze

Developer

#1359

Amazing support! Thank you!

@kacamific

Developer

#760

It works perfectly with v2.6.1. Thank you very much for the correction.

@napnap75

Developer

#1638

Thanks for the fix. Works great now.

@triole

Developer

#831

As always, appreciate the great work — just sharing feedback to help shape the roadmap.

@jonnochoo

Developer

#770

it's awesome you keep working on it 👍

@fishnux

Developer

#328

Thank you so much for the quick fix! I tested it, and it now correctly stores the files where it should.

@IngwiePhoenix

Developer

#423

Self-hosted on your own infrastructure

Dagu is GPLv3 and free forever. Please consider purchasing licenses to support open source sustainability. Paid license enables useful features for using in a team.

Community
Free forever
Unlimited servers, unlimited workers
  • Full workflow automation and monitoring
  • Web UI with DAG visualization
  • Docker, SSH, and HTTP executors
  • Cron scheduling & retries
  • Up to 2 API keys for automation
Minimum
$50 / mo

3 self-host Dagu server licenses

3 licenses = 3 servers, unlimited workers
Start free license trial
Pro
$150 / mo

15 self-host Dagu server licenses

15 licenses = 15 servers, unlimited workers
Start free license trial
Enterprise
Custom

For teams building event-driven workflow infrastructure in complex environments

Custom licensed server allotment
  • Architecture consulting for distributed setup
  • Custom implementation
  • MCP OIDC/SSO setup guidance
  • Initial migration support
  • Dedicated meetings
What we build
  • Custom Solutions

    Building tailored features for specific company needs.

  • Turnkey Solutions

    Creating ready-to-go setups to help teams scale Dagu easily without burning massive technical or server resources.

Contact Us

Create a 14-day self-host license trial in minutes14 days, No credit card required. Start free license trial

Building this together

As the project grows, managing it requires more time and resources. To ensure Dagu thrives long-term, we are slowly exploring ways to make the project financially sustainable.

Our goal is to build a business model that funds core development without restricting the features you already love.

We want to build this future with you. If you have ideas, feedback, or want to share what features your team would pay for, please drop them in the #feedback channel. Thank you for being an amazing community! 🚀

Solution partner focus

Build the operational control plane around your workflows.

Work with the Dagu team on deployment, security, scale, and workflow design for production use cases.

Dagu is most useful when it wraps real operational work: scripts, containers, SQL, API calls, approvals, and Agent Harness workflows.

Contact us

OIDC/SSO, RBAC, workspaces, and tenant isolation

MCP, distributed workers, queues, and high-volume run history

Persistence and backup strategy for production operations

Secrets, auditability, and least-privilege execution

Event routing, webhooks, notifications, and incident workflows

Container isolation and private worker deployment

Quickstart

Install Dagu with the guided wizard, then continue in the full installation guide or quickstart docs.

1

Install dagu command

The script installers are the recommended path. Homebrew, npm, and Docker remain available for binary-only or container installs.

Mac/Linux Terminal
$curl -fsSL https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash
✓ Guided installer ready
Optional

Connect AI tools

Install the Dagu skill for workflow authoring, or connect an MCP client to a running Dagu server.

Dagu skill
$gh skill install dagucloud/dagu dagu

Helps Claude Code, Codex, Gemini CLI, and other AI coding tools write Dagu YAML.

Dagu MCP endpoint
URLhttp://localhost:8080/mcp

Lets MCP-capable clients read Dagu state, preview changes, and control DAG runs.

OIDC/SSO-backed MCP access is available for enterprise deployments. Contact us to discuss setup.

2

Next steps

The guided installer can finish the first-run setup for you.

# What the installer can do
Add Dagu to your PATH
Set up a background service
Create and verify the first admin

Contact

Questions, enterprise needs, or feedback?

We'd love to hear from you.