IronFlowDocs

Engine manual / v1.20.0

Build the flow. Run the graph.

IronFlow is a Rust workflow engine with a Lua surface. Steps form a graph, independent branches run in parallel, and the engine owns retries, timeouts and cancellation.

  • v1.20.0documented release
  • 105built-in nodes
  • 23node categories

Your first run

Download a binary or use Docker. No Rust compiler or separate Lua installation needed.

01 / INSTALL

Download a binary

Open the latest release’s Assets and extract the archive for Linux x86-64, macOS Apple Silicon or Intel, or Windows x86-64. Choose a -full archive for PostgreSQL or Redis storage. Checksums are included on the release page.

./ironflow --versionDownload the latest release ↗
02 / RUN

Run your first flow

Save this as hello.lua beside the extracted binary. Run the command from that directory.

local flow = Flow.new("hello")
flow:step("greet", nodes.log({ message = "Hello from IronFlow!" }))
return flow
./ironflow run hello.lua

On Windows, use .\ironflow.exe run hello.lua. The result includes “Hello from IronFlow!” and a successful status.

Explore the documented release’s example ↗
03 / DEFINE

Write a Lua flow

Give steps names, connect dependencies and let independent branches run together.

Flow.new("my_flow")Learn the flow structure →
04 / EXTEND

Pick a capability

Browse 105 generated node references, grouped by the work they do.

nodes.http_request({ ... })Find a node →

Or start with Docker

A local API server with persistent run history.

With Docker running, paste this into Bash or Zsh:

docker run --rm --pull always --name ironflow --platform linux/amd64 \
  -p 127.0.0.1:3000:3000 \
  -e IRONFLOW_ALLOW_UNAUTHENTICATED_API=true \
  -e IRONFLOW_STORE_DIR=/data/state/runs \
  -v ironflow-data:/data \
  ghcr.io/skitsanos/ironflow:latest

In another terminal, check readiness:

curl --fail http://127.0.0.1:3000/health/ready

Then run the same hello workflow through the API:

curl --fail http://127.0.0.1:3000/flows/run \
  -H 'Content-Type: application/json' \
  -d '{"source":"local flow = Flow.new(\"hello\")\nflow:step(\"greet\", nodes.log({ message = \"Hello from IronFlow!\" }))\nreturn flow"}'

The response includes a run ID and "status":"success".

The server is available at http://127.0.0.1:3000. This localhost demo explicitly allows unauthenticated requests. For hosted use, configure API authentication.

:latest follows published builds from main; :develop follows development builds. Images include PostgreSQL and Redis support and target linux/amd64. ARM hosts need x86-64 emulation; Windows Docker users need Linux containers.

Stop with Ctrl+C. The ironflow-data volume preserves run history at /data/state/runs; reuse the same volume and store setting when restarting. Use a published commit tag or digest if a moving tag is not available yet. Hosted deployments should pin a digest.

Browse container images ↗ · Getting started · Build from source ↗

Some nodes need additional tools: PDF image rendering requires native Pdfium, including with full binaries and Docker. This manual documents v1.20.0; check your binary’s version when choosing examples.

Go deeper

Read by task, from flow syntax to the execution core.

For AI assistants and integrations

Read the same release documentation in Markdown or browse its JSON index.

IronFlow documentation

Find the next step

Type a keyword to search the documentation.

↑ ↓ to move · Enter to open · Esc to close