Headless CLI (fc)
Run .flo flow files from a terminal or CI, without opening the app.
fc runs .flo flow files headlessly , no GUI, just the flow’s nodes executing, producing the
same results as clicking Run in the desktop app. It exits 0 only if every node in every run flow
succeeded, so it drops straight into CI.
fc ships as a prebuilt binary for Linux, Windows, and macOS in the same release as the desktop
app.
Run flows
fc run -a # every .flo file in the current directory
fc run <file.flo> ... # one or more specific .flo files
fc version # print the fc version
The current directory is the workspace root , same meaning as a workspace root in the desktop
app: it’s where code/<lang>/ and the .flo files themselves live. fc run -a only looks
directly in that directory, not recursively.
-a scans the current directory only, non-recursively. If your .flo files live in a
subdirectory, either cd into it first or pass the file paths explicitly.
Flags on fc run:
| Flag | Default | Meaning |
|---|---|---|
-a | off | Run every .flo file in the current directory |
-timeout | 30s | Per-flow run timeout |
What it does on startup
When you run fc, it applies the same workspace setup the desktop app would:
- Loads every enabled language’s code project, so Code Nodes resolve the same way they do in the app.
- Applies the workspace’s default environment variable set, so
${env.NAME}references in your flow resolve the same way they would from the app , see Template Syntax Reference. - A language whose project fails to open is skipped, not fatal , a flow that doesn’t need it still runs fine.
Output
Each flow prints its path, then one line per node as results land , + <name> on success,
x <name>: <error> on failure:
checkout.flo
+ Get user
+ Extract login
A non-zero exit means at least one node in at least one flow failed , check the printed x lines
for which one and why.