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.
$curl -fsSL https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash# runs every night at 02:00schedule: "0 2 * * *"type: chainsteps:- id: fetch_datarun: python fetch.pyretry_policy:limit: 3interval_sec: 60- id: build_reportrun: python report.py- id: notifyrun: ./notify.sh
Quickstart
Install dagu command
Run your first workflow
Run it
Explore the Web UI
Install Dagu and run your first workflow from the Web UI in a few minutes.
Using Dagu?
A GitHub star helps other developers find Dagu and keeps the repository close at hand.
All workflow ops from chat
Bring fragmented workflows together. Create, edit, debug, recover, and analyze, all from the AI chat you already use.
Learn moreCreate a nightly ETL workflow
Works with every MCP-capable agent
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 moreThe control plane around your real work
Everything below ships in the open-source binary; SSO, RBAC, and audit logs activate with a self-host license.
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.
Observability
Live status, per-step stdout and stderr logs, run history, outputs, artifacts, and approvals in the Web UI. Prometheus metrics like dagu_dag_runs_total on the metrics endpoint.
Language-agnostic execution
run: executes any shell command; docker.run, kubernetes.run, ssh.run, http.request, postgres.query, and 50+ built-in actions cover the rest. No SDK in your code.
MCP server
Streamable HTTP endpoint at /mcp. Agents inspect state, preview and apply workflow changes, and control runs through dagu_read, dagu_change, and dagu_execute.
Agent Harness workflows
Agent CLI runs keep stdout and stderr logs, approval gates, secret masking, and run history in Dagu. Sandboxed execution via Docker or Podman.
Secret management
secrets: references resolve at runtime from env, files, Kubernetes, Vault, and cloud secret managers. Values are masked in logs and the Web UI.
Permission control
Five roles from admin to viewer, OIDC SSO, API keys, workspaces, and audit logs. Licensed self-host features.
50+ built-in step types
Every name below is available as a step today. No plugins to install, nothing to import.
run:execdocker.runkubernetes.runssh.runhttp.requestpostgres.querysqlite.queryredis.*s3.uploads3.downloadsftp.uploadsftp.downloadfile.*archive.createarchive.extractjq.filterdata.convertdata.pickchat.completionharness.runhuman.tasktype: controllerdag.rundag.enqueuerouter.routewait.durationwait.untilwait.filewait.httpnoopapproval:state.getstate.setstate.diffartifact.writeartifact.readoutputs.writetemplate.renderlog.writemail.sendgit.checkoutProduction 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
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
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.
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
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
I've recently played around with Dagu for private stuff and think it could also be worth introducing at work.
@DarkWiiPlayer
Developer
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.
- 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
3 self-host Dagu server licenses
15 self-host Dagu server licenses
For teams building event-driven workflow infrastructure in complex environments
- Architecture consulting for distributed setup
- Custom implementation
- MCP OIDC/SSO setup guidance
- Initial migration support
- Dedicated meetings
- Custom response-time SLA
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.
Create a 14-day self-host license trial in minutes — 14 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.

