Build a multi-step workflow visually.
Open the editor
- Go to Flows
- Click New Flow
The canvas
You'll see:
- Left sidebar — Nodes you can add
- Center canvas — Where you build
- Right panel — Node settings
Add an Input node
Every flow starts with an Input node.
- Click + Input in the sidebar
- Click on the canvas to place it
- Define what your flow accepts
v2 editor
The v2 flow editor is the flow page at /flows/{id}.
The v2 editor places the input and output nodes on the canvas for you. They cannot be deleted.
To define the input schema:
- On the input node, click + add input to open the field palette
- Pick a field type: text, integer, number, checkbox, list of strings, list of numbers, list of files, or file
- Drag fields to reorder them. Each field can be edited, duplicated, or removed
- Use the toolbar button to switch between edit fields and view input, which previews the run-time input form
A file field is stored in the input schema as {"type": "object", "format": "file"}. A list of files is an array whose items have that shape.
Example input:
1image (file) — The image to processAdd App nodes
- Click + App in the sidebar
- Search for an app
- Place it on the canvas
Add as many as you need.
In the v2 editor, click the + button at the bottom center of the canvas and choose app to open the app catalog. The same menu adds constant, gate, selector, and merge nodes.
Gate nodes (v2 editor)
A gate node lets downstream steps run only when a condition is true. The platform evaluates the condition at run time against the gate's wired inputs. No app runs for the gate. See Flows API: Gate nodes for operators and runtime behavior.
Add one from the + menu, then wire an upstream output into the gate's input handle. Configure the condition on the node:
| Control | Purpose |
|---|---|
| field | Input key to evaluate. When upstream nodes are connected, this is a dropdown of {sourceNodeId}.{fieldKey} options. Otherwise it is a text input |
| condition | equals, not_equals, contains, gt, lt, is_empty, or is_not_empty |
| value | Right-hand side of the comparison. Hidden for is_empty and is_not_empty |
Connect the steps that should run when the condition is true to the gate's output handle. After a run the gate shows a passed pill when the condition was true and a blocked pill when it was false. When it is false, the steps that depend on the gate do not run and the flow run still completes. See Connecting Nodes: Gate branching.
Selector nodes (v2 editor)
A selector node picks one element from an array input at run time. See Flows API: Selector nodes.
Add one from the + menu and wire an upstream array output into its input handle.
| Control | Purpose |
|---|---|
| field | Array input key to read from. A dropdown of {sourceNodeId}.{fieldKey} options when upstream nodes are connected, otherwise a text input |
| mode | first, last, index, or random |
| index | Zero-based index. Shown when mode is index |
The runtime implements first, last, and index. With random it selects the first element.
Connect the selector's output handle to downstream steps.
Merge nodes (v2 editor)
A merge node joins parallel branches. It runs when all of its upstream nodes have completed. See Flows API: Merge nodes.
Add one from the + menu and connect each branch to its input handle. The node shows how many inputs are wired in. Connect its output handle to the step that should run after all branches. See Connecting Nodes: Merge synchronization.
Constant nodes (v2 editor)
A constant node outputs a fixed value at run time. It has an output handle and no input handle. See Flows API: Constant nodes.
Add one from the + menu, set mode to fixed, then set:
| Control | Purpose |
|---|---|
| type | number, string, or boolean |
| value | The value to emit |
The editor stores fixed values as utility.preset: "constant" with utility.constant. Connect the output handle to a downstream input.
The mode control also offers random with min and max. The editor writes utility.random: true with utility.random_min and utility.random_max. At run time the constant emits a random integer in [min, max) (defaults 0–1000000 when bounds are omitted). See Flows API: Constant nodes.
Add an Output node
Every flow ends with an Output node.
Define what your flow returns.
In the v2 editor the output node is already on the canvas. Wire upstream nodes into it, then use the switch on each field to include it in the flow's output. Use the pencil icon to rename an output key.
Connect the nodes
See Connecting Nodes.
Run the flow
Click Run and provide the input.
Watch each step execute.
In the v2 editor, utility node borders follow run status: purple while ready or running, green when completed, red when failed or cancelled, grey when blocked. Constant and merge nodes show their value (for example → 42) once it is available. App nodes show task status colours in output mode.
The output panel shows the flow's output when it arrives. If the run ends without output, it shows no output yet for a completed run, the error for a failed run, and flow cancelled for a cancelled run.