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.