flow is a system for defining, compiling and running parallel
dataflow programs.
Flows are defined declaratively as graphs of connected processes — using a
visual editor or text files — compiled to a manifest, and executed by a runner.
The suite of tools (runner, debugger, remote executor) work together over the
network, discovering each other via mDNS for distributed flow execution.
curl -sL https://github.com/andrewdavidmackenzie/flow/releases/latest/download/install-flow.sh | bashHere's a flow that generates the fibonacci sequence:
This flow has two functions connected together:
add— a library function fromflowstdlibthat adds two numbersstdout— a context function provided by the runner for printing to the terminal
The add function has two inputs (i1 and i2) with initializers: i1 is
set to 0 and i2 to 1 at startup (shown as "once" — they're only set once).
Three connections carry data between functions:
add's output feeds back to its owni2input (the next value)- The previous
i2value feeds back toi1(a feedback connection) add's output also flows tostdout, which prints each value
The output of add includes the input values, enabling feedback of the
previous value. The flow runs until integer overflow produces no output.
flowc -r flowrcli flowr/examples/fibonacci # compile and runThe first flow section of the book walks you through it.
Compiles flow definitions (TOML/YAML/JSON) into flow manifests, compiles libraries and their WASM implementations, and generates SVG flow visualizations.
flowc -d -g -O my_flow/ # compile with debug symbols, graphs, optimization
flowc -c -r flowrcli my_flow/ # compile and run with flowrcli
flowc flowstdlib # compile the standard libraryRuns compiled flows from the terminal. Provides context functions for stdio, file I/O, and image operations. Supports native and WASM execution modes.
flowrcli manifest.json # run a compiled flow
flowrcli -n manifest.json # native implementations only
flowrcli --debugger manifest.json # start with debug serverCommand-line debugger client that connects to a running flow (via flowrcli
or flowrgui with --debugger). Step through execution, set breakpoints,
inspect function state, and view the process tree.
flowrdb # discover and connect via mDNS
flowrdb --address localhost:1234 # connect directlyGUI application for running flows with visual I/O — image display, interactive stdin, and a built-in graphical debugger with state diagrams, breakpoints, and function inspection.
WYSIWYG editor for creating and editing flow definitions. Drag-and-drop process nodes, draw connections, edit properties, and compile directly from the editor.
flowedit # start with empty canvas
flowedit path/to/root.toml # open existing flowflowstdlib provides pre-built functions and flows for common operations:
math, string formatting, control flow, data manipulation, matrix operations,
and more. Install it with:
curl -sL https://github.com/andrewdavidmackenzie/flow/releases/latest/download/install-flowstdlib.sh | bash| Platform | Binary Archive | Native Installer |
|---|---|---|
| Linux x86_64 | .tar.gz |
.deb, .AppImage |
| Linux aarch64 | .tar.gz |
.deb, .AppImage |
| Linux armv7 (Raspberry Pi) | .tar.gz |
.deb |
| macOS aarch64 (Apple Silicon) | .tar.gz |
.dmg |
| Windows x86_64 | .zip |
.exe installer |
| Windows ARM | .zip |
.exe installer |
All packages are available on the releases page.
# Install specific version
curl -sL https://github.com/andrewdavidmackenzie/flow/releases/download/v1.2.0/install-flow.sh | bash
# Via cargo-binstall (binaries only, no flowstdlib)
cargo binstall flowc
cargo binstall flowrmake config # install dependencies
make # build everything (flowstdlib WASM compilation takes a while first time)
make test # run all testsSee building flow for details.
The flow book covers:
- Introduction to Flow
- Your First Flow
- Defining Flows
- Running Flows
- Debugging Flows
- The Standard Library
- Example Flows
The mandelbrot example renders a monochrome fractal using parallel dataflow execution:
See the contributing guide.
MIT — see LICENSE.


