Skip to content

The flow canvas

The flow canvas is where you build an automation: drop nodes, wire their ports together, and configure each one in the inspector. This page is a tour of the editing surface.

Adding nodes

Open a flow file and you get an infinite canvas. Add a node from the node menu and it appears as a box you can drag anywhere. Every node shows its name, a small handle for each input port on one side, and a handle for each output port on the other.

You'll almost always start with a Start node and finish with an End node — the two ends of every runnable flow. In between go the working nodes: If, Switch, ForEach, Set, Template, HTTP, Email, MongoDB. Browse them all in the Node reference.

INFO

📸 Screenshot — the flow canvas with a Start node, an If node, and an End node placed but not yet wired.

Wiring ports

A connection is a wire from one node's output port to the next node's input port. Drag from an output handle to an input handle to create one. The wire is directional — it says "after this port, go here".

  • Nodes that always continue expose a single next output.
  • If exposes true and false; Switch exposes one output per case plus default; ForEach exposes loop (the body) and next (after the loop).
  • Every node also has an error output you can wire to a handler branch. Leave it unwired and failures surface as a run error instead. See Error handling.

You can wire more than one connection out of the same port; the engine follows all of them. A port with nothing connected simply ends that path.

TIP

As you wire, the trigger bar re-checks the flow. If it turns red, hover the issues chip to see what's wrong — a missing Start, a missing End, or a node that isn't connected to anything. See Testing & the trigger URL.

The inspector

Select a node and the inspector opens its configuration. What you see depends on the node:

  • An If node asks for a condition.
  • An HTTP node asks for a method, URL, headers, and body.
  • An Email node asks for a recipient, subject, and body.
  • A Set or Template node asks for a variable name and its source or template text.

Most text fields accept references to values produced earlier in the flow, plus ${env.X} and ${secrets.X} placeholders that resolve at run time. Those are explained in Data & references.

Configuration is stored with the node and applied when the flow runs on the server — the inspector never executes your node in the browser. Custom, workspace-authored nodes render their own settings inside a sandbox, so a third-party node can't reach into the rest of the editor.

INFO

📸 Screenshot — a node selected on the canvas with the inspector panel open showing its config fields.

The trigger bar

Running along the top of the canvas is the trigger bar. It is the flow's control strip:

ElementWhat it tells you
Method chipsThe HTTP methods this flow answers — one chip per Start node (GET, POST, …). "no Start node" if there are none.
Endpoint pathThe public URL this flow is callable at, e.g. /api/run/<project>/<flow-name>.
Validity chipWiring OK in green, or a count of issues you can hover to read.
Test run buttonThe green Test run (▶) button — opens the run inspector to run the flow with inputs you supply and see it node by node. See Testing & the trigger URL.
Run history buttonThe Run history (clock) button — opens the run-history dialog for this project. See Run history.
Schedule buttonSet the flow to run on a cron schedule as well as on request.
Copy buttonCopies the full trigger URL to your clipboard.

The path is derived from your project and the flow's file name, so renaming the file changes the URL.

See also

Starter templates

An empty flow canvas offers ready-made starting points — valid wiring with placeholder config you then fill in:

TemplateWhat it builds
Webhook → respondReceive a POST, shape a value, return JSON
Call an APIFetch from an external API and return its data
Branch on a valueRoute to one of two responses
Notify by emailSend an email, then confirm
Save to a databaseInsert into MongoDB, then confirm
Take a paymentCreate a Stripe checkout session and redirect the visitor to it
Confirm a paymentReceive a signature-verified Stripe webhook and email a receipt
Log to a spreadsheetAppend each submission as a row in a Google Sheet
Ask a modelSend the input to Claude and return the reply
Query PostgresRun a parameterised SQL query and return the rows

Each carries ${secrets.NAME} placeholders rather than blank credential fields, so you're pointed at the vault instead of pasting a key inline.

You can also start a whole project as an automation — the New project dialog offers these alongside the page starters.

FlowRunner — the no-code platform for small businesses.