Dagu vs Windmill

Dagu vs Windmill:声明式 YAML 对比脚本与应用平台。

两者都能自托管,也都很快。Windmill 把脚本变成 workflow、webhook 和 low-code 应用,并使用 PostgreSQL。Dagu 是一个单一二进制,用声明式 YAML 调用你已有的命令,没有需要运维的数据库。

调用你已有命令的工作流
name: nightly-ops
schedule: "0 2 * * *"

steps:
  - id: extract
    run: python scripts/extract.py

  - id: transform
    run: ./bin/transform
    retry_policy:
      limit: 3
    depends: [extract]

  - id: notify
    run: ./scripts/slack-success.sh
    depends: [transform]

单一二进制,无需 PostgreSQL

Workflow 是调用现有命令的声明式 YAML

面向 shell、Docker、HTTP、SSH、SQL、子工作流和 AI Agent 的 executor

可本地、队列或分布式运行

两种定义工作的方式

Windmill 是 code-first 平台。你用 Python、TypeScript、Go、Bash 或 SQL 写脚本,它为每个脚本配上 webhook 和生成的 UI。Dagu 把 workflow 保留在 YAML 中,把你的脚本和二进制当作步骤。

  • Windmill 在平台内存储和运行脚本,并自动生成输入表单。
  • Dagu 用受版本控制的 YAML 定义图,并调用命令。
  • 两者都提供依赖关系、重试、调度和运行历史。

运维它需要什么

Windmill 需要 PostgreSQL 来保存状态和作业队列,通常在其上运行 server 和 worker 容器。Dagu 是把状态保存在文件里的单一二进制,因此没有需要部署、备份或升级的数据库。

  • Dagu 从一个由本地文件支撑的进程开始。
  • 之后可在不改变 workflow 模型的情况下加入队列和 worker。
  • Windmill 扩展性很好,但前提是 PostgreSQL 存在并被管理。

何时该选 Windmill

Windmill 做的不只是编排,这种广度正是它的价值。如果你想把脚本作为可共享的端点托管,并围绕它们构建内部应用和 UI,Windmill 覆盖了 Dagu 不涉足的领域。

  • 你想要 low-code 应用/UI 构建器,而不只是一个运行器。
  • 你想要自动生成的表单、approval 步骤和大量内置集成。
  • 你的团队更愿意把逻辑写成受管理的脚本,而不是调用外部命令。

Windmill vs. Dagu 速览

Dimension
Dagu
Typical alternative
编写方式
调用你命令的声明式 YAML。
托管在平台内的 Python、TypeScript、Go、Bash 或 SQL 脚本。
运行时
单一二进制,基于文件的状态,无数据库。
由 PostgreSQL 队列支撑的 Rust 服务和 worker。
范围
用 shell、Docker、HTTP、SSH、SQL 和 AI Agent 步骤做编排。
Workflow 加上带 approval flow 的 low-code 应用/UI 构建器。

FAQ

Practical questions before adopting Dagu

Dagu 能替代 Windmill 吗?

不能完全替代。Dagu 替代编排部分:调度、依赖、重试、日志和运行 UI。它不提供 Windmill 的 low-code 应用构建器、生成的 UI 或庞大的集成目录。如果你只需要调度和观测命令,Dagu 是更轻的选择。

Dagu 需要 PostgreSQL 吗?

不需要。Dagu 把状态保存在本地文件并以单一二进制运行,因此没有要安装或管理的数据库。Windmill 依赖 PostgreSQL 来保存状态和作业队列。

Dagu 能运行 Python 和 TypeScript 脚本吗?

能。一个步骤可以运行任意命令,所以 Python、TypeScript、Bash 或编译好的二进制都能用。区别在于 Dagu 调用磁盘上的脚本,而不是像 Windmill 那样托管和管理它们。

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.

Install Dagu