IronFlowDocs

Getting started with IronFlow

Use a prebuilt binary to run Lua workflows directly, or Docker to start the API without installing IronFlow on your machine. Both include the Lua runtime. The README Quick Start walks through your first flow and API request.

Download a binary

Open the latest stable release and expand Assets. Download the archive matching your system and the checksums-sha256.txt file from the same release. Asset names include the release version; <version> below stands for that version, such as 1.20.0.

SystemDefault archive
Linux x86-64ironflow-v<version>-x86_64-unknown-linux-musl.tar.gz
macOS Apple Siliconironflow-v<version>-aarch64-apple-darwin.tar.gz
macOS Intelironflow-v<version>-x86_64-apple-darwin.tar.gz
Windows x86-64ironflow-v<version>-x86_64-pc-windows-msvc.zip

Choose the default archive for local JSON or SQLite state storage. For PostgreSQL or Redis storage, choose the matching archive with -full before .tar.gz or .zip. The full variant enables both storage backends; it does not bundle database servers. Linux ARM64 and Windows ARM64 native binaries are not currently published.

No Rust compiler or separate Lua installation is required. Some nodes need additional tools or libraries: for example, PDF image rendering needs native Pdfium even with a full binary or the Docker image. See the example requirements.

Linux and macOS

In the directory containing the downloaded archive, verify its SHA-256 hash against its entry in checksums-sha256.txt:

# Linux; replace the filename with the asset you downloaded.
sha256sum ironflow-v1.20.0-x86_64-unknown-linux-musl.tar.gz

# macOS Apple Silicon; use x86_64-apple-darwin for an Intel Mac.
shasum -a 256 ironflow-v1.20.0-aarch64-apple-darwin.tar.gz

Only continue if the hash matches. Extract your archive with tar -xzf, for example on Linux:

tar -xzf ironflow-v1.20.0-x86_64-unknown-linux-musl.tar.gz
./ironflow --version

You can keep using ./ironflow in that directory. To make ironflow available elsewhere without sudo:

mkdir -p "$HOME/.local/bin"
install -m 755 ironflow "$HOME/.local/bin/ironflow"
export PATH="$HOME/.local/bin:$PATH"
ironflow --version

Add the export PATH line to your shell startup file (for example ~/.zshrc or ~/.bashrc) to keep it in future terminals. If macOS blocks a downloaded binary, verify the checksum and use System Settings → Privacy & Security to approve that binary.

Windows

In PowerShell, verify the archive hash against its entry in checksums-sha256.txt, then extract it. Substitute the version you downloaded:

Get-FileHash .\ironflow-v1.20.0-x86_64-pc-windows-msvc.zip -Algorithm SHA256

After confirming that the hash matches:

Expand-Archive .\ironflow-v1.20.0-x86_64-pc-windows-msvc.zip -DestinationPath .\ironflow
Set-Location .\ironflow
.\ironflow.exe --version

Use .\ironflow.exe validate hello.lua and .\ironflow.exe run hello.lua with the workflow from the Quick Start. Optionally move ironflow.exe to a permanent directory and add that directory to your user Path through Environment Variables.

Use Docker

The public image is published to GitHub Container Registry. Docker Desktop or Docker Engine must be running. Images include PostgreSQL and Redis storage support and currently target linux/amd64 only. On ARM hosts, Docker must support x86-64 emulation; on Windows, use Linux containers.

Select an image

Images are published from main and develop for build-related changes and manual Container workflow runs:

Tag or referenceUse
ghcr.io/skitsanos/ironflow:latestMost recently published build from main; the Quick Start default.
ghcr.io/skitsanos/ironflow:developMost recently published build from develop; may include unreleased changes.
ghcr.io/skitsanos/ironflow:sha-<full-commit>A specific published source revision.
ghcr.io/skitsanos/ironflow@sha256:...An exact image digest for reproducible deployment.

In Bash or Zsh, select an image once for the commands below:

IMAGE=ghcr.io/skitsanos/ironflow:latest
docker pull --platform linux/amd64 "$IMAGE"
docker run --rm --platform linux/amd64 "$IMAGE" --version

Use IMAGE=ghcr.io/skitsanos/ironflow:develop to try development builds. latest follows main, not the GitHub Releases API; check --version when matching an image to a binary release. Moving tags update only after a successful Container workflow run on their respective branch. Pull again before restarting to use an updated image, or use docker run --pull always as shown below. Running containers do not update automatically.

Find published commit tags on the package page, or open a successful Container workflow run and copy the ghcr.io/skitsanos/ironflow@sha256:... reference from its Published container summary into IMAGE. A source commit alone does not guarantee that its image has finished publishing. If an alias is not available yet, use a published commit tag or digest. The buildcache-amd64 tag is build cache, not an application image. Hosted deployments use the digest-pinned deployment procedure.

Start a local API server

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 \
  "$IMAGE"

The image starts ironflow serve automatically. It listens on 0.0.0.0:3000 inside the container; the port mapping exposes it only on your host's 127.0.0.1:3000. The explicit unauthenticated setting is for this local demo. For a hosted server, set IRONFLOW_API_KEY and follow the authentication reference.

In a second terminal, run curl --fail http://127.0.0.1:3000/health/ready, then try the Quick Start API request. Stop the server with Ctrl+C, or run docker stop ironflow in another terminal. The named ironflow-data volume keeps files under /data, including run history at /data/state/runs, when the container is removed. Reuse the same volume and store-directory setting on your next run. The explicit path also works with older images that pre-created /data/runs as root. New images let the runtime UID create the default /data/runs with private 0700 permissions. Remove the volume with docker volume rm ironflow-data only when you want to delete that local demo's stored data.

Updating the image does not repair an existing root-owned store directory. Stop all writers and back up the volume before an operator corrects ownership for the intended runtime UID, or select a new runtime-owned directory and migrate the retained state offline. Do not loosen the store's 0700 directory or 0600 file permissions. Reusing a JSON volume requires the same owning UID; arbitrary-UID containers can initialize fresh volumes, while replicas should use the shared storage described in the deployment guide.

Run a workflow file

Save the Quick Start's hello.lua in your current directory. Mount that directory read-only and use the CLI directly:

docker run --rm --platform linux/amd64 \
  --mount "type=bind,source=$(pwd),target=/data/flows,readonly" \
  "$IMAGE" validate /data/flows/hello.lua

docker run --rm --platform linux/amd64 \
  --mount "type=bind,source=$(pwd),target=/data/flows,readonly" \
  -v ironflow-data:/data \
  -e IRONFLOW_STORE_DIR=/data/state/runs \
  "$IMAGE" run /data/flows/hello.lua

Paths inside workflows are container paths. The flow mount above is read-only; use a writable path under /data for outputs. These commands use Bash/Zsh syntax; for PowerShell, set $IMAGE = 'ghcr.io/skitsanos/ironflow:latest', use $PWD.Path for the host directory, and put each Docker command on one line instead of using backslash continuations.

Build from source

Building is optional. For development or platforms without a published binary, install Rust with rustup plus the native compiler/linker tools for your platform. The repository's rust-toolchain.toml selects the exact Rust version used by the build.

git clone https://github.com/skitsanos/ironflow.git
cd ironflow
cargo build --locked --release
./target/release/ironflow --version
./target/release/ironflow run examples/01-basics/hello_world.lua --context '{"user_name": "Alice"}'

To include PostgreSQL and Redis storage support, build with cargo build --locked --release --features postgres,redis. On Windows, the executable is target\release\ironflow.exe. To build a specific stable release, check out its tag (for example git checkout v1.18.1) before running Cargo.

Next steps

  • Examples: workflows grouped from basics to advanced use.
  • CLI reference: configuration, commands, authentication, and storage.
  • Replica deployment: shared storage and hosted deployment requirements.

IronFlow documentation

Find the next step

Type a keyword to search the documentation.

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