Installation
This guide covers how to install Ironflow on your machine.
All public install paths verify against Sigstore cosign keyless signatures — you can confirm any binary or image was built and signed by the official release pipeline before running it.
Licensing
Ironflow ships under the Functional Source License v1.1, Apache-2.0 future grant. Free for development, evaluation, personal projects, internal non-revenue tooling, education, and non-commercial research. A commercial license is required for any externally-facing production or commercial product feature. See Licensing for worked examples.
Server
You can run the Ironflow server using Homebrew, Docker, a direct binary download, a Helm chart (Kubernetes), or by building from source.
Cluster mode
Multi-node clustering (--node-id, --nats-url) requires PostgreSQL plus external NATS. SQLite + embedded NATS is single-node only. See Self Hosting for cluster topology.
brew tap sahina/tapbrew install ironflow
# Start the server (SQLite, port 9123)ironflow serve
# Custom port and open dashboard in browserironflow serve --port 8080 --open
# Persistent NATS storageironflow serve --nats-store-dir ./data/nats
# PostgreSQL backendIRONFLOW_DATABASE_URL="postgres://user:pass@localhost:5432/ironflow" ironflow serveThe Homebrew formula resolves binaries from the public release mirror (sahina/ironflow-releases); no GitHub token is required.
See the ironflow serve CLI reference for all available flags and options.
docker pull ghcr.io/sahina/ironflow-releases:latestdocker run -p 9123:9123 ghcr.io/sahina/ironflow-releases:latest serveThe image is published to public GitHub Container Registry. To verify the signature before running:
cosign verify ghcr.io/sahina/ironflow-releases:latest \ --certificate-identity-regexp '^https://github\.com/sahina/ironflow/\.github/workflows/release\.yml@(refs/heads/main|refs/tags/v.*)$' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'See the ironflow serve CLI reference for all available flags and options.
# Replace VERSION with the latest release (see GitHub Releases)VERSION=v0.23.0
curl -L -o ironflow.tar.gz \ "https://github.com/sahina/ironflow-releases/releases/download/${VERSION}/ironflow_${VERSION#v}_linux_amd64.tar.gz"curl -L -o ironflow.tar.gz.bundle \ "https://github.com/sahina/ironflow-releases/releases/download/${VERSION}/ironflow_${VERSION#v}_linux_amd64.tar.gz.bundle"
# Verify the signature against the release-pipeline OIDC identitycosign verify-blob \ --certificate-identity-regexp '^https://github\.com/sahina/ironflow/\.github/workflows/release\.yml@(refs/heads/main|refs/tags/v.*)$' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ --new-bundle-format \ --bundle ironflow.tar.gz.bundle \ ironflow.tar.gz
tar xzf ironflow.tar.gz./ironflow serveSubstitute linux_amd64 with linux_arm64, darwin_amd64, darwin_arm64 (use .tar.gz), or windows_amd64 (use .zip) as appropriate.
Source access is governed by the LICENSE — see the Licensing guide for permitted purposes. If you have a commercial license that grants source access:
Prerequisites: Go 1.25+, Node.js 24+, pnpm, Buf CLI (for protobuf generation), Docker (PostgreSQL tests only).
git clone https://github.com/sahina/ironflow.gitcd ironflow
# Build and runmake dev
# Or build onlymake build./build/ironflow serveSee the Getting Started guide for details on building from source.
Published as an OCI Helm chart on GitHub Container Registry:
helm install ironflow oci://ghcr.io/sahina/charts/ironflow --version 0.23.0The chart provisions a deployment, service, and optional PostgreSQL/NATS connections. See the chart values.yaml for tunables.
Desktop App
Ironflow Desktop is a free GUI front-door to Ironflow. It bundles the engine, so you can run functions, browse events, and work with the AI agent without touching the CLI.
Availability
macOS on Apple Silicon (M1/M2/M3/M4) is available today. Windows and Linux builds appear on the releases page as they ship.
-
Download the
.dmgfrom the latest release. -
Open the
.dmgand drag Ironflow Desktop into Applications. -
First launch: the app is not notarized yet, so macOS Gatekeeper may block it. Right-click the app and choose Open, then Open again. If it still won’t open, clear the quarantine flag:
Terminal window xattr -dr com.apple.quarantine "/Applications/Ironflow Desktop.app"
The app auto-updates from the release feed, so you only download it once.
TypeScript SDK
The TypeScript SDK is published as four packages under the @ironflow organization on npm. All packages are public and install without authentication.
| Package | Description |
|---|---|
@ironflow/core |
Shared types, schemas, utilities (used by every other package) |
@ironflow/node |
Workers, serve handlers, step execution (Node.js) |
@ironflow/browser |
Real-time subscriptions, workflow triggers (browser) |
@ironflow/langgraph |
LangGraph saver — durable checkpoint surface for LangGraph agents |
npm install @ironflow/corenpm install @ironflow/node # for Node.js / server-side workersnpm install @ironflow/browser # for browser / client-sidenpm install @ironflow/langgraphSee the JavaScript SDK API reference for full package documentation.
Go SDK
The Go SDK is published to a public mirror on every release and indexes on pkg.go.dev. It is a drop-in Go module — no private-repo access required.
go get github.com/sahina/ironflow-go/ironflow@latestOr pin to a version:
go get github.com/sahina/ironflow-go/ironflow@v0.23.0See the Go SDK API reference for full documentation.
Contributing to the Go SDK
The engine source uses an internal module path (github.com/sahina/ironflow/sdk/go/ironflow) for in-repo imports. The public mirror rewrites the import path at sync time (see ADR 0022). When contributing, edit the engine source; the public mirror is regenerated by make mirror-go-check / make mirror-go-sync.
Python SDK
The Python SDK is an auto-generated HTTP client covering the full REST API surface. It is published to PyPI and has zero external dependencies (uses only urllib and json from the standard library).
Experimental — client only
The Python SDK provides client API methods only (emit events, list runs, manage resources). Worker execution runtime (step.run, step.sleep, push/pull mode) is not yet implemented. For durable step execution, use the Go SDK or TypeScript SDK. See the SDK Comparison matrix for the full feature breakdown.
pip install ironflowRequires Python 3.9+.
from ironflow import IronflowClient
client = IronflowClient( server_url="http://localhost:9123", api_key="ifkey_...",)
# Emit an eventclient.events_create(body={ "name": "order.placed", "data": {"order_id": "123", "total": 99.99},})
# List runsruns = client.runs_list()See the Python SDK API reference for full documentation.
Verifying Release Integrity
Every public artifact is signed via Sigstore cosign keyless. The expected signing identity is the release.yml workflow on a versioned tag in sahina/ironflow. If cosign verify ever fails on a downloaded artifact, do not run it — email the security address in the LICENSE with the exact cosign verify output.
cosign v3 single-bundle format (v0.22+)
Starting with v0.22, the release pipeline writes signatures in the modern single-bundle format (ironflow_<ver>_<os>_<arch>.tar.gz.bundle). Verification uses --new-bundle-format --bundle <file>, as shown in the Direct Binary tab above. Pre-v0.22 releases used the older split --signature + --certificate format — if you are upgrading from a v0.20 install and have verification scripts, switch them to the v3 form.
Next Steps
- Getting Started — Emit events, projections, and time-travel in 5 minutes
- Self Host — Run Ironflow with PostgreSQL in production
- Workflow Guide — Learn about recorded execution (durable workflows)
- JavaScript SDK Reference — Full TypeScript/JavaScript API documentation
- Go SDK Reference — Full Go API documentation
- Python SDK Reference — Full Python API documentation
- Licensing — Permitted purposes, worked examples, commercial licensing