Define LLM-powered automation pipelines as a single YAML file. Run them as one self-hosted binary. An open-source, developer-first alternative to n8n / Zapier / Make — built for wiring Claude & GPT into real workflows.
flowra lets you describe an AI workflow — fetch data → ask an LLM → transform → notify — declaratively, then run it anywhere a single static binary runs. No nodes-in-a-browser, no SaaS lock-in, no Node runtime. Just Go, your YAML, and your API keys.
name: hello
steps:
- id: ask
type: llm
config:
provider: anthropic
model: claude-opus-4-8
prompt: "Give me one surprising fact about {{ .vars.topic }}."
- id: show
type: print
config:
message: "💡 {{ .ask.text }}"$ flowra run examples/hello.yaml
▶ flowra: running "hello" (2 steps)
✓ [llm] ask (1.2s)
💡 Go's mascot, the Gopher, is released under a Creative Commons license — so you can legally remix it.
✔ flowra: doneThe AI automation space is dominated by drag-and-drop SaaS tools. They're great until you want version control, code review, CI, secrets management, and self-hosting — i.e. until an engineer owns the workflow. Flowra is that engineer's tool:
- 🧩 Workflows as code — YAML you can diff, review, and check into git. No proprietary export format.
- 🤖 AI-native — first-class
llmnodes for Anthropic Claude (official Go SDK) and OpenAI, with templated prompts, system prompts, structured token usage, and optional extended thinking. - 🐍 Go core + Python nodes — heavy data work (parsing, ETL, ML glue) drops into a
pythonnode; the fast, single-binary engine is Go. - 📦 One binary, zero runtime —
go installand ship. Self-host on a box, a container, or a cron job. - 🔌 Composable nodes — chain
http,llm,transform,python, andprint; pass data between steps with Go templates ({{ .stepID.field }}).
| Flowra | n8n | Zapier / Make | Airflow | |
|---|---|---|---|---|
| Workflows as code (git-native) | ✅ YAML | ❌ | ✅ Python | |
| AI / LLM as a first-class node | ✅ | ❌ | ||
| Self-hosted single binary | ✅ Go | ❌ SaaS | ❌ heavy | |
| Runtime dependencies | none | Node.js | — | Python + scheduler |
| Best for | developers | low-code teams | non-technical | data engineers |
Flowra isn't trying to replace a full DAG scheduler or a no-code studio — it's the missing developer-grade glue for AI workflows.
go install github.com/adam-eques/flowra@latestOr build from source:
git clone https://github.com/adam-eques/flowra
cd flowra
go mod tidy # resolves the Anthropic SDK + yaml deps
go build -o flowra .export ANTHROPIC_API_KEY=sk-ant-... # for Claude nodes
# export OPENAI_API_KEY=sk-... # for OpenAI nodes
flowra run examples/hello.yaml
flowra run examples/enrich-and-notify.yaml --set user_id=5
flowra run examples/data-pipeline.yaml # Go engine + Python node + ClaudeOverride any workflow variable from the CLI with --set key=value.
| Type | What it does | Key config |
|---|---|---|
llm |
Call Claude or GPT | provider, model, system, prompt, max_tokens, thinking |
http |
Make an HTTP request | method, url, headers, body |
python |
Run a Python script (JSON in/out) | python, file or code, input |
transform |
Reshape data with a template | template |
print |
Write to stdout | message |
Every step's result is addressable by later steps as {{ .<stepID>.<field> }}; workflow variables live under {{ .vars.* }}.
flowchart LR
Y[workflow.yaml] --> E[Flowra engine]
E --> S1[http]
S1 --> S2[llm · Claude / GPT]
S2 --> S3[python]
S3 --> S4[transform]
S4 --> S5[print / webhook]
classDef n fill:#1e293b,stroke:#38bdf8,color:#e2e8f0;
class S1,S2,S3,S4,S5 n;
The engine loads the workflow, runs each step in order, and threads every step's output through a shared, template-addressable context. Adding a node type is one engine.Register("name", fn) call — see internal/nodes/.
- DAG execution with parallel branches and
depends_on - Triggers:
webhook(HTTP server) andschedule(cron) -
router/ conditional nodes - Built-in connectors (Slack, Postgres, S3, Sheets)
- Structured-output (JSON-schema) LLM nodes
- Retries, timeouts, and per-step error policies
Want one of these? Open an issue or send a PR — see CONTRIBUTING.
Contributions welcome! Good first issues: new node types, connectors, and examples. See CONTRIBUTING.md.
MIT © adam-eques