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: done
Why Flowra?
The 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
llm nodes 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
python node; the fast, single-binary engine is Go.
- 📦 One binary, zero runtime —
go install and ship. Self-host on a box, a container, or a cron job.
- 🔌 Composable nodes — chain
http, llm, transform, python, and print; pass data between steps with Go templates ({{ .stepID.field }}).
How it compares
|
Flowra |
n8n |
Zapier / Make |
Airflow |
| Workflows as code (git-native) |
✅ YAML |
⚠️ JSON export |
❌ |
✅ Python |
| AI / LLM as a first-class node |
✅ |
⚠️ add-on |
⚠️ add-on |
❌ |
| Self-hosted single binary |
✅ Go |
⚠️ Node + DB |
❌ 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.
Install
go install github.com/adam-eques/flowra@latest
Or 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 .
Quickstart
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 + Claude
Override any workflow variable from the CLI with --set key=value.
Node types
| 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.* }}.
How it works
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/.
Roadmap
- DAG execution with parallel branches and
depends_on
- Triggers:
webhook (HTTP server) and schedule (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.
Contributing
Contributions welcome! Good first issues: new node types, connectors, and examples. See CONTRIBUTING.md.
License
MIT © adam-eques