Built for teams whose main work is not orchestration.

Local-first orchestration that just works.

Define workflows in declarative YAML; one open-source binary runs them, locally or over SSH, with schedules, retries, approvals, logs, and a Web UI. Your scripts, containers, and AI agents stay untouched. No external database, no framework.

Install dagu command
$curl -fsSL https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash
daily-report.yaml
# runs every night at 02:00
schedule: "0 2 * * *"
type: chain
steps:
- id: fetch_data
run: python fetch.py
retry_policy:
limit: 3
interval_sec: 60
- id: build_report
run: python report.py
- id: notify
run: ./notify.sh
last run · 02:00:04 · exit 03/3 steps

Quickstart

Quickstart
1

Install dagu command

Binary
$curl -L https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash
✓ Installed to /usr/local/bin/dagu
2

Run your first workflow

hello.yaml
$cat > hello.yaml << EOF
# Your first workflow
steps:
- command: echo "Hello from dagu!"
- command: ls -la
EOF
✓ hello.yaml created
3

Run it

Terminal
$dagu start hello.yaml
Running hello...
✓ hello finished
Hello from dagu!
Running list...
✓ list finished
-rw-r--r-- hello.yaml
✓ Workflow completed successfully
4

Explore the Web UI

Install Dagu and run your first workflow from the Web UI in a few minutes.

Terminal
$dagu start-all
✓ Server started at http://localhost:8080
Web UI: Real-time monitoring, visual DAG view, execution history

Using Dagu?

A GitHub star helps other developers find Dagu and keeps the repository close at hand.

Star Dagu on GitHub

All workflow ops from chat

Bring fragmented workflows together. Create, edit, debug, recover, and analyze, all from the AI chat you already use.

Learn more
CreateEditDebugRecoverAnalyze
AI chat

Create a nightly ETL workflow

etl-nightly · Dagu
extracttransformloadverify

Works with every MCP-capable agent

Claude CodeClaude Code
CursorCursor
GitHub CopilotGitHub Copilot
OpenAI CodexOpenAI Codex
Gemini CLIGemini CLI
KiroKiro
WindsurfWindsurf
ClineCline
Roo CodeRoo Code
ZedZed
DevinDevin
TraeTrae
ChatGPTChatGPT
JunieJunie
GooseGoose
AmpAmp
OpenCodeOpenCode
AntigravityAntigravity
Amazon QAmazon Q
WarpWarp
VS CodeVS Code
RaycastRaycast
LM StudioLM Studio
PerplexityPerplexity

Wiki and runbooks

Keep Markdown runbooks next to your workflows. Update them in the Web UI or with any MCP-compatible AI agent. Use Git Sync for version control.

Learn more
Wiki and runbooks

50+ built-in step types

Every name below is available as a step today. No plugins to install, nothing to import.

Execute
run:execdocker.runkubernetes.runssh.runhttp.request
Data & files
postgres.querysqlite.queryredis.*s3.uploads3.downloadsftp.uploadsftp.downloadfile.*archive.createarchive.extractjq.filterdata.convertdata.pick
AI
chat.completionharness.runhuman.tasktype: controller
Flow control
dag.rundag.enqueuerouter.routewait.durationwait.untilwait.filewait.httpnoopapproval:
State & delivery
state.getstate.setstate.diffartifact.writeartifact.readoutputs.writetemplate.renderlog.writemail.sendgit.checkout

Full list with inputs and outputs in the Dagu Actions docs

Production operations

The guarantees and the knobs, by their real names.

Performance

Thousands of runs per day on one machine; capacity depends on CPU, disk, and workflow shape. State is local files, so there is no database to size or migrate.

Distributed executions

File-based queues with per-DAG concurrency limits. dagu coordinator dispatches over gRPC to workers selected by labels such as gpu=true.

Notifications

Cron schedules with timezones, catchup_window, overlap_policy, per-step retry_policy, zombie detection, lifecycle handlers, email and webhook notifications, and incident routing.

Auth & RBAC

DAGU_AUTH_MODE none, basic, or builtin; five RBAC roles; workspaces; approval steps; secret masking; API keys; per-DAG webhook tokens.

Architecture

The same binary runs three ways.

Standalone

One dagu start-all process runs the HTTP server, scheduler, and executor, with file-based storage.

┌─────────────────────────────────────────┐
│  dagu start-all                         │
│  ┌───────────┐ ┌───────────┐ ┌────────┐ │
│  │ HTTP / UI │ │ Scheduler │ │Executor│ │
│  └───────────┘ └───────────┘ └────────┘ │
│  File-based storage (logs, state, queue)│
└─────────────────────────────────────────┘

Coordinator and workers

The scheduler enqueues to a file-based queue; a gRPC coordinator dispatches to label-routed workers, which execute locally and report status back.

┌───────────┐        ┌───────────┐
│ Scheduler │        │ HTTP / UI │
│ ┌───────┐ │        └─────┬─────┘
│ │ Queue │ │              │ gRPC
│ └───────┘ │              │
└─────┬─────┘              │
      │ Dispatch (gRPC)    │
      ▼                    ▼
   ┌─────────────────────────┐
   │       Coordinator       │
   └────────────▲────────────┘
                │ poll / heartbeat
   ┌────────────┼────────────┐
┌──┴─────┐   ┌──┴─────┐   ┌──┴─────┐
│ Worker │   │ Worker │   │ Worker │
└────────┘   └────────┘   └────────┘

Headless: DAGU_HEADLESS=true runs the same binary without the Web UI, for CI or API-driven setups.

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]

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

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

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

@DarkWiiPlayer

Developer

#924

Self-hosted on your own infrastructure

Dagu is GPLv3 and free forever. Paid licenses add SSO, RBAC, audit logging, incident routing, and support for teams.

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
  • Custom response-time SLA
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

All paid plans include priority email and chat support with a first response within 1 business day. See support details

Details on what the license covers and how Community compares: Self-host license guide

Need internal approval? Read the Adoption Brief

Contact

Questions, bugs, or ideas?

Open a GitHub issue, ask in Discord, or email. Replies come from the maintainer, not a bot.