Developer-friendly, minimalism Cron alternative, but with much more capabilities. It aims to solve greater problems.
Go to file
2025-06-26 01:37:54 +09:00
.devcontainer chore: add support for devcontainers (#728) 2024-11-29 23:01:20 +09:00
.github Fix: version name issue (#973) 2025-06-01 17:04:18 +09:00
.vscode fix: environment variable evaluation and test improvements (#1045) 2025-06-21 15:23:15 +09:00
api fix: display logs from all repeated child DAG runs (#1039) 2025-06-20 02:17:32 +09:00
assets/images redo the logo image 2024-05-26 22:03:15 +09:00
cmd fix: support repeat policy for nested DAGs (#1022) 2025-06-18 00:59:07 +09:00
config Compliance with XDG (#619) 2024-07-19 00:40:36 +09:00
docs [#1048] fix: correct repeatPolicy documentation (#1056) 2025-06-23 15:35:51 +09:00
examples feat: add skipTLSVerify option to HTTP executor for self-signed certificates (#1046) 2025-06-21 16:12:16 +09:00
internal fix: DAGU_DAGS_DIR environment variable not recognized (#1060) 2025-06-26 01:02:47 +09:00
schemas fix: support repeat policy for nested DAGs (#1022) 2025-06-18 00:59:07 +09:00
scripts chore: support --prefix 2025-06-18 15:35:11 +09:00
snap chore: Update snapcraft.yaml with dump config 2025-02-28 09:34:50 +09:00
spec fix: support camel case for step exit code field (#1031) 2025-06-19 18:27:30 +09:00
ui fix(ui): prevent full page reload on dashboard date change and handle invalid dates 2025-06-26 01:37:54 +09:00
.codespellrc frontend: Migrate MUI to shadcn (#908) 2025-04-21 12:56:49 +09:00
.gitattributes chore: add support for devcontainers (#728) 2024-11-29 23:01:20 +09:00
.gitignore [#955] fix: queue cpu consumption (#956) 2025-05-27 16:13:27 +09:00
.golangci.yml [#786] API v2 (#900) 2025-04-15 23:41:40 +09:00
.goreleaser.yaml fix: snapshot deprecated warning (Fixes #869) (#870) 2025-02-27 23:47:25 +09:00
.readthedocs.yaml docs: update 2024-04-17 19:12:52 +09:00
CLAUDE.md doc: add PR guideline 2025-06-23 16:20:56 +09:00
CODE_OF_CONDUCT.md doc: Update code of conduct (#843) 2025-02-16 19:00:10 +09:00
codecov.yml [fb-next] Command for migrating history data from v1.16.x to v1.17.x (#969) 2025-06-01 00:56:07 +09:00
CONTRIBUTING.md docs: add link to bluesky 2025-06-20 18:31:18 +09:00
docker-compose.yaml fix: asset serving with base path and Docker storage location (#1037) 2025-06-20 01:06:23 +09:00
Dockerfile fix: asset serving with base path and Docker storage location (#1037) 2025-06-20 01:06:23 +09:00
Dockerfile.alpine fix: asset serving with base path and Docker storage location (#1037) 2025-06-20 01:06:23 +09:00
Dockerfile.dev fix: asset serving with base path and Docker storage location (#1037) 2025-06-20 01:06:23 +09:00
entrypoint.sh fix: asset serving with base path and Docker storage location (#1037) 2025-06-20 01:06:23 +09:00
go.mod fix: prevent step hanging when output exceeds 64KB (#1010) 2025-06-13 01:49:47 +09:00
go.sum fix: prevent step hanging when output exceeds 64KB (#1010) 2025-06-13 01:49:47 +09:00
LICENSE chore: clean up license file 2025-06-18 18:37:29 +09:00
Makefile [#955] fix: queue cpu consumption (#956) 2025-05-27 16:13:27 +09:00
README.md doc: Add roadmap 2025-06-20 21:02:56 +09:00
tools.go Update dependencies: YAML parser migration and other library upgrades (#913) 2025-04-29 22:37:03 +09:00

Dagu Logo

Local-First Workflow Engine, Built for Self-Hosting

Zero dependencies. Language agnostic. Self-contained.

Latest Release Build Status Code Coverage Discord Bluesky

Docs | Quick Start | Features | Installation | Community

What is Dagu?

Dagu solves the problem of complex workflow orchestration without requiring a dedicated infrastructure team. Unlike traditional workflow engines that demand databases, message queues, and careful operational overhead, Dagu runs as a single binary with zero external dependencies.

After managing hundreds of cron jobs across multiple servers, I built Dagu to bring sanity to workflow automation. It handles scheduling, dependencies, error recovery, and monitoring - everything you need for production workflows, without the complexity.

→ Learn the core concepts

Design Philosophy

  1. Localfirst. Workflows should run offline on laptops, airgapped servers, or the cloud—your choice.
  2. Zero footprint. One static binary; no databases, brokers, or sidecars.
  3. Bringyourown language. Bash, Python, Go, or anything just works.

Features

Quick Start

# Install
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash

# Create dagu configuration directory
mkdir -p ~/.config/dagu/dags

# Create your first workflow
mkdir -p ~/.config/dagu/dags
cat > ~/.config/dagu/dags/hello.yaml << 'EOF'
steps:
  - name: hello
    command: echo "Hello from Dagu!"
    
  - name: world  
    command: echo "Running step 2"
EOF

# Execute it
dagu start hello

# Check the status
dagu status hello

# Start the web UI
dagu start-all
# Visit http://localhost:8080

Installation

macOS / Linux

# Latest
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash

# Specific version
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash -s -- --version v1.17.0

# Install to a specific directory
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash -s -- --prefix /path/to/install

# Homebrew
brew install dagu-org/brew/dagu

Docker

docker run -d \
  --name dagu \
  -p 8080:8080 \
  -v ~/.dagu:/var/lib/dagu \
  ghcr.io/dagu-org/dagu:latest dagu start-all

Manual Download

Download from releases and add to PATH.

Documentation

Examples

Find more in our examples documentation.

ETL Pipeline

name: daily-etl
schedule: "0 2 * * *"
steps:
  - name: extract
    command: python extract.py
    output: DATA_FILE
    
  - name: validate
    command: python validate.py ${DATA_FILE}
    
  - name: transform
    command: python transform.py ${DATA_FILE}
    retryPolicy:
      limit: 3
      
  - name: load
    command: python load.py ${DATA_FILE}

Hierarchical Workflows

steps:
  - name: data-pipeline
    run: etl
    params: "ENV=prod REGION=us-west-2"
    
  - name: parallel-jobs
    run: batch
    parallel:
      items: ["job1", "job2", "job3"]
      maxConcurrency: 2
    params: "JOB=${ITEM}"
---
name: etl
params:
  - ENV
  - REGION
steps:
  - name: process
    command: python etl.py --env ${ENV} --region ${REGION}
---
name: batch
params:
  - JOB
steps:
  - name: process
    command: python process.py --job ${JOB}

Container-based Pipeline

name: ml-pipeline
steps:
  - name: prepare-data
    executor:
      type: docker
      config:
        image: python:3.11
        autoRemove: true
        volumes:
          - /data:/data
    command: python prepare.py
    
  - name: train-model
    executor:
      type: docker
      config:
        image: tensorflow/tensorflow:latest-gpu
    command: python train.py
    
  - name: deploy
    command: kubectl apply -f model-deployment.yaml
    preconditions:
      - condition: "`date +%u`"
        expected: "re:[1-5]"  # Weekdays only

Web Interface

Learn more about the Web UI →

Dashboard

Real-time monitoring of all workflows

DAG Editor

Visual workflow editor with validation

Log Viewer

Detailed execution logs with stdout/stderr separation

Use Cases

  • Data Engineering - ETL pipelines, data validation, warehouse loading
  • Machine Learning - Training pipelines, model deployment, experiment tracking
  • DevOps - CI/CD workflows, infrastructure automation, deployment orchestration
  • Media Processing - Video transcoding, image manipulation, content pipelines
  • Business Automation - Report generation, data synchronization, scheduled tasks

Roadmap

  • Run steps in a DAG across multiple machines (distributed execution)
  • Track artifacts by dropping files in $DAGU_ARTIFACTS
  • Pause executions for webhooks, approvals, or any event (human-in-the-loop, event-driven workflows)
  • Integrate with AI agents via MCP (Model Context Protocol)

Building from Source

Prerequisites: Go 1.24+, Node.js, pnpm

git clone https://github.com/dagu-org/dagu.git && cd dagu
make build
make run

Contributing

Contributions are welcome. See our documentation for development setup.

Contributors

License

GNU GPLv3 - See LICENSE


If you find Dagu useful, please star this repository