Installation

Install Inflowenger

From zero to a running runtime, plus the developer panel, in two docker compose stacks.

An Inflowenger ecosystem is built from two headless services: Infra, which bootstraps and coordinates everything, and Fractal, the runtime that actually executes workflow graphs. You start with Infra — everything else attaches to it. This page is the conceptual walkthrough — for the hands-on, copy-paste version (including the dev panel), see the getting-started repo.

Step 01

Quick Install

The fastest path. Asks a few questions, brings up Infra + Fractal, and — if you agree — the inspector panel, then prints your API Secret Key and the panel URL.

curl -fsSL https://raw.githubusercontent.com/Inflowenger/getting-started/main/install.sh | bash

It writes real docker compose stacks into ~/inflowenger (override with INFLOW_DIR), so afterward you manage them exactly like the manual steps below. The prompts read from your terminal even through the pipe; to run it unattended, drive it with env vars instead — e.g. accept every default and skip the panel:

curl -fsSL https://raw.githubusercontent.com/Inflowenger/getting-started/main/install.sh \
  | ASSUME_YES=1 INSTALL_INSPECTOR=0 API_JWT_SECRET=my-shared-secret bash
INFLOW_DIRWhere the compose stacks are written. Default ~/inflowenger.
API_JWT_SECRETInfra API Secret Key / shared JWT secret. Default: generated.
OPERATOR_SEEDNATS operator seed. Default: Infra generates one.
INFRA_CLUSTERCluster name for a paid/sponsored license. Default: empty.
FRACTAL_TAGSComma-separated Fractal tags. Default default.
FRACTAL_NAMEFractal container name. Default fractal-1.
INSTALL_INSPECTOR1/0 — install the inspector panel. Default: prompted.
ASSUME_YES1 — accept all defaults, no prompts. Default 0.

Prefer to see every step? The manual walkthrough below does exactly what the script automates, one stack at a time.

Step 02

What You're Standing Up

Two headless services, and then a UI on top for development. The platform is the product; the dev panel is optional tooling on top. They meet on a shared Docker network, inflow_net.

Browser ─────► Dev panel frontend (Vue)   :8080
                     │ HTTP + WebSocket (logs)
                     ▼
        inflow-inspector-api (Go/Fiber)  :8025
        flows · context · logs · /infra/* proxy
                     │ NATS + HTTP  (inflow_net)
 ┌──────────────────────────────────────────────┐
 │ Platform  (network: inflow_net)              │
 │ Infra  :8022 / :4222  ◄── register ──►       │
 │ NATS + coordinator         Fractal (runtime) │
 └──────────────────────────────────────────────┘
Infra — bootstraps and coordinates everything. Runs an embedded NATS server; mints accounts, credentials, and the onboarding portal. Everything starts here.
Fractal — the runtime that actually executes workflow graphs. It attaches to Infra.
Dev panel — Infra and Fractal are headless by design, and that's enough on its own if you're building your own product on top of Inflowenger. The panel (also called the inspector) is optional dev/admin tooling for when you want to see what's running: inspect context, workflows, and Fractals as they execute. It's itself built on Inflowenger, via Inflow Fusion.
Step 03

Manual Setup: the Platform

Needs Docker with the Compose v2 plugin, and free host ports 8022, 8222, 4222. Everything starts with Infra.

cd platform
cp .env.example .env

Infra needs an API Secret Key — the shared HMAC secret the inspector panel uses to authenticate later. Set it yourself in .env (recommended, predictable across restarts):

openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 60; echo

Or leave API_JWT_SECRET blank and copy the value Infra prints on first boot instead — see below. Either way, you'll reuse this key for the dev panel. Both stacks share an external Docker network — create it once per host, then bring the platform up:

docker network create inflow_net   # once per host; skip if it already exists
docker compose up -d
docker compose logs -f infra

Confirm a Healthy Start

On a healthy start, Infra logs the accounts it bootstrapped, the secrets it generated, and the address you'd use to add another Fractal.

{"level":"info","ts":1783630706.9686565,"msg":"System Account Loaded"}
{"level":"info","ts":1783630706.9711125,"msg":"Inflow Infrastructure Account is ready"}
{"level":"info","ts":1783630706.9714851,"msg":"Plugin Account is ready "}
{"level":"info","ts":1783630706.9714975,"msg":"API Secret Key is : PAykm7EqmSlmJ0NmU2t6WlNYOGRbviMnZMvEOe6RBw5s3tI6ZXlVxMJ9os57rCCC"}
{"level":"info","ts":1783630706.9810252,"msg":"you can add inflow resource by  'curl -fsSL http://192.168.1.4:8022/fractal/11/install.sh | bash'"}

{"level":"info","ts":1783630709.0359278,"msg":"Infra Server on NatsIO is ready on port 4222"}
{"level":"info","ts":1783630709.0359592,"msg":"Infra Server HTTP Monitor is ready on 8222"}
{"level":"info","ts":1783630709.0359704,"msg":"Infra Server Cluster is ready on Port 6222 , Name : abc.xyz..inflowenger.io"}

{"level":"info","ts":1783630709.0445325,"msg":"Infra Started"}
System / Infrastructure / Plugin accounts — the built-in NATS accounts Infra bootstraps on first boot to separate system traffic, platform traffic, and plugin traffic.
API Secret Key — if you left API_JWT_SECRET blank, copy this value — you'll need it for the dev panel.
Ports 4222 / 8222 / 6222 — the NATS client port, HTTP monitoring port, and cluster port respectively.
!

The Fractal service in the compose stack registers itself automatically against Infra's built-in default portal over inflow_net — no manual curl | bash needed for this first runtime. Confirm it with docker compose logs fractal.

Step 04

Add More Fractals

The compose file starts one Fractal. To add more against a running Infra, use the scoped one-liner from Infra's logs — it goes through the same default portal, no token required.

curl -fsSL http://<your-infra-address>:8022/fractal/11/install.sh | bash

Copy the exact line from your own Infra logs — the host, port, and path are specific to that instance. It prompts for a container name and tags, ensures the inflow_net network exists, and joins the new Fractal to it so it can reach Infra.

!

This default portal accepts unauthenticated Fractal installs for easy onboarding. Once you've added the runtimes you need, disable it from the admin panel to close off unauthenticated installs.

Step 05

Manual Setup: the Dev Panel

The panel joins the same inflow_net, so the platform must be running first.

!

This step is optional. Infra + Fractal from Step 03 is already a complete, working ecosystem — if you're implementing your own product directly on Inflowenger, headless is enough. Install the inspector only when you also want a way to see what's running.

cd ../inspector
cp .env.example .env

Edit .env and set INFLOW_INFRA_JWT_SECRET to Infra's API Secret Key — the same value as API_JWT_SECRET, or whatever it printed in its logs:

INFLOW_INFRA_JWT_SECRET=<infra-API-Secret-Key>
docker compose up -d
docker compose logs -f
!

Both images are self-building: rather than a prebuilt binary, each entrypoint clones its source and compiles it inside the container at first start, native to your CPU. The first up takes a few minutes and needs network access (GitHub, Go modules, npm) — a named volume then caches the checkout so later restarts are quick.

inflow-inspector-api

Go · Fiber

The panel backend. Reaches Infra at http://inflow-infra:8022 over the shared network and reverse-proxies /infra/* to it. Source →

inflow-inspector

Vue

The panel frontend. Static assets with no backend URL baked in — you point it at the backend from the Auth dialog at runtime. Source →

Sign In to the Panel

The panel authenticates exactly like Swagger UI: it's static assets with no credentials and no backend URL baked in, and there's no server-side session. You authorize your own browser at runtime.

Go to http://localhost:8080. The Auth dialog opens automatically until you're authenticated.
Fill in the Base Server URLhttp://localhost:8025 — then pick Shared Secret (Infra's API Secret Key; the panel signs an HS256 JWT from it in your browser) or Bearer Token (paste a ready-made JWT).
The URL and token are saved in your browser's localStorage, so you authenticate once per browser. Re-open the dialog and hit Log Out to clear them.
!

The panel being reachable is not access — every request carries a JWT the backend verifies against its shared secret. Treat the API Secret Key as a credential, and don't expose inflow-inspector-api on an untrusted network without something in front of it.

Verify End-to-End

http://localhost:8025 responds — the panel backend is up.
After signing in, the panel lists/creates flows and context, and the Spaces / Resources views load — proving the /infra/* proxy to Infra works.
Running a flow streams logs into the panel's log drawer over WebSocket — confirming the whole chain down to Fractal is wired.
Step 06

Persist Data & Secure the Operator Key

The platform stack mounts ./store:/data so Infra's state survives restarts. Without it, every restart mints new keys and invalidates existing Fractals, plugins, and panels.

Operator Seed

NATS Operator Key

Every account and user JWT in the ecosystem is signed with the NATS operator key — it is the most sensitive credential Infra holds. Generate your own with the nats nkey tool and set it in platform/.env.

OPERATOR_SEED=<seed-from-nk>

API JWT Secret

Shared With the Panel

This is the "API Secret Key" Infra prints on first boot. It's randomly generated if you don't supply one — set your own so it's predictable across restarts and shareable with the dev panel.

API_JWT_SECRET=<your-shared-secret>
Step 07

Licensing

Inflowenger is free for standalone use. At startup, Infra generates a random, anonymous license key for analytics purposes — no action needed. For a paid or sponsored license, name your cluster instead, in platform/.env:

INFRA_CLUSTER=<your-cluster-name>
Reference

Ports & Environment Variables

Ports

8022Infra — HTTP API / onboarding portal.
8222Infra — NATS HTTP monitor.
4222Infra — NATS client (only if connecting locally).
8025inflow-inspector-api — REST + WebSocket log feed.
8080inflow-inspector — the panel UI.

platform/.env

OPERATOR_SEEDNATS operator key signing all JWTs. Blank → generated & persisted.
API_JWT_SECRETInfra API secret. Share this with the inspector panel.
INFRA_CLUSTERCluster name for a paid/sponsored license. Blank for free use.
FRACTAL_TAGSComma-separated tags for the Fractal runtime.

inspector/.env

INFLOW_INFRA_JWT_SECRETInfra's API Secret Key (from its logs / API_JWT_SECRET).
INSPECTOR_API_REFBranch/tag the backend image clones + builds at start. Default master.
INSPECTOR_REFBranch/tag the frontend image clones + builds at start. Default master.
Reference

Troubleshooting & Teardown

Network not found — the shared network doesn't exist yet. Create it once with docker network create inflow_net (the one-liner installer does this for you).
Panel says unauthorized / 401 — the Shared Secret you entered, the backend's INFLOW_INFRA_JWT_SECRET, and Infra's API Secret Key must all match. Restart inflow-inspector-api and re-authenticate after changing it.
Fractal keeps restarting — it retries until Infra is reachable. Check docker compose logs infra.
Port already in use — edit the ports: mapping in the relevant compose file.
# inspector panel (add -v to also drop the cached source-build volumes)
cd inspector && docker compose down

# platform (add -v to also delete Infra's persisted keys in ./store)
cd ../platform && docker compose down