Declarative
Workflow DSL
for
Define complex multi-agent pipelines in YAML. Let LLMs do creative work. Let duckflux handle the plumbing.
Design Philosophy
duckflux isn't another "AI framework". It's an opinionated workflow engine with clear rules about what belongs where.
Declarative-first
Describe what your workflow should do, not how to do it. YAML is the source of truth β readable, version-controlled, diffable.
Deterministic
A state machine β not an LLM β controls flow. Your pipeline runs the same way every time. No hallucinated next steps.
Multi-runtime
Run workflows with the Go CLI for production deployments or the Bun JS/TS runtime for Node.js ecosystems. Same YAML, any runtime.
Powered by CEL
Google Common Expression Language for all conditional logic. Type-safe, sandboxed, and battle-tested in Kubernetes.
Agent-native
Built from the ground up for AI agent orchestration. Participants can call LLMs, MCP tools, HTTP APIs, or shell commands.
Human-readable
YAML you can read in a code review. Self-documenting workflows that any engineer can understand without a PhD in distributed systems.
Features
From simple scripts to complex multi-agent pipelines β duckflux speaks the same YAML regardless of complexity.
Loops
Parallel execution
Conditionals
Guards & retry
Events
Emit events to named channels and pause execution waiting for external events. Perfect for human-in-the-loop workflows.
Input/Output schemas
Typed inputs and outputs with validation. CEL expressions reference inputs and previous outputs by name β fully type-aware.
Nested workflows
Compose complex pipelines from smaller reusable sub-workflows. Pass context down and collect results back up.
Error handling
Powered by Google CEL
Google's Common Expression Language keeps your logic safe, predictable, and readable. The same engine that powers Kubernetes admission controllers.
steps:
- run: analyze
output: result
- run: approve
when: "result.score >= 0.9 && result.issues.size() == 0"
- run: review
when: "result.score >= 0.6 && result.score < 0.9"
- run: reject
when: "result.score < 0.6" CEL expressions used
result.score >= 0.9 Direct field access with comparison
result.issues.size() == 0 CEL built-in: list length check
&& Boolean AND β both conditions must be true
Building Blocks
Every step in a duckflux workflow is powered by a participant. Six types cover everything from shell commands to event-driven coordination.
exec Shell commands & scripts
Execute any shell command, script, or binary. Perfect for AI agent CLIs, build tools, or custom runners.
Full exec referenceLive Editor
Try Yourself
Edit, visualize, and experiment with duckflux workflows in real time. Click any node in the diagram to inspect its configuration.
Same YAML, any Runtime
One workflow definition runs anywhere. Use the Go CLI for production and edge deployments, or the JS/TS runtime to integrate with your Node/Bun ecosystem.
Go CLI
Production-ready binary
# Install with Go
go install github.com/duckflux/spec/cmd/duck@latest
# Or download binary
curl -sSL https://install.duckflux.dev | sh
# Run a workflow
duck run ./my-workflow.duck.yaml
# Run with inputs
duck run ./pipeline.duck.yaml \
--input repo=https://github.com/org/repo \
--input branch=main
# Watch mode
duck run ./pipeline.duck.yaml --watch JS/TS (Bun)
Bun & Node.js compatible
# Install with Bun
bun add -g duckflux
# Run a workflow
duck run ./my-workflow.duck.yaml
# Use as library in your Bun app
import { run } from 'duckflux';
const result = await run('./pipeline.duck.yaml', {
inputs: { repo: 'https://github.com/org/repo' }
}); Not sure which to choose?
Read the runtime comparison guideHow duckflux Compares
An honest comparison with popular workflow orchestration tools. Different tools solve different problems β here's where duckflux fits.
| Feature | duckflux YAML DSL for agents | Temporal Workflow platform | LangGraph LLM graph orchestration | n8n Visual automation | Step Functions AWS managed workflows |
|---|---|---|---|---|---|
| YAML DSL Define workflows in human-readable YAML | β | β | β | β | β |
| Agent-native First-class support for AI agent orchestration | β | β | β | β | β |
| CEL expressions Google CEL for safe, typed condition evaluation | β | β | β | β | β |
| Multi-runtime Run on multiple language runtimes | β | β | β | β | β |
| MCP support Native Model Context Protocol integration | β | β | β | β | β |
| Loops Iterate over collections natively | β | β | β | β | β |
| Parallel steps Fan-out parallel execution | β | β | β | β | β |
| Event wait Pause execution for external events | β | β | β | β | β |
| Self-hosted Run on your own infrastructure | β | β | β | β | β |
| Open source Fully open-source license | β | β | β | β | β |
Comparison based on publicly available documentation. Table reflects capabilities, not quality.
Ready to quack?
Stop orchestrating
imperatively.
Write your first workflow in 5 minutes. Run it with a single command. Let duckflux handle the state machine so you can focus on what matters.
$ duck run ./hello.duck.yaml