The editor is a canvas (built on @xyflow/react) where each node is a card and each connection runs from an output dot to an input dot of the next node. Items flow along the connections (see Items).
Add a node
- Press Tab or n, or Add node (+) in the canvas controls (bottom left), then search the picker. Categories: Triggers, Flow, Data, Browser, AI, Human, 𝕏, Shopee, My nodes (your script nodes). While you type, the categories give way to one list, best match first (Enter adds it). Triggers are offered whenever you're not adding from a dot, so a flow can have several (Manual and Chat, say). A node added from the controls goes to the middle of the view, below whatever already sits there.
- With one node selected, Tab adds the next node already connected to its first output dot.
- On an empty output dot, press the + next to it to add a node there.
- Select an edge for Insert node (puts a node in its middle) and Delete connection.
- Search actions… (
⌘K) also lists every node type.
The first node of a new flow is usually a trigger; an empty canvas shows Add first step.
Connect and arrange
- Drag from an output dot to a node's input dot to connect. An output dot can lead to many nodes (each gets its items); the upper branch runs first. A node with several inputs (Merge's A and B) shows one labelled input dot each.
- Tidy up (
⇧⌥T) lays the flow out left to right. Undo, redo, tidy up and sticky note sit in the canvas controls (bottom left) next to zoom and fit. - Fit view (
1), zoom with+−, reset zoom with0. ←/→walk the selected node to the previous or next node along the edges.
A node card
| Part | Meaning |
|---|---|
| Icon, name, type | name is yours; the type label comes from the node definition. |
| ⚠ | Required fields missing. A run won't start. |
| Amber dot | Changed since the run: its output may be out of date. |
| 📌 | Pinned output. |
×3 | Ran 3 times in this run (loops). |
| Clock | Ticks while running, then shows how long it took (850ms, 4.2s, 1:05). |
| Window icon | Open browser: the browser this node acted in, or the one it would use (hover to see it before a run). See . |
| Ring colour | Running (pulsing), done (green), failed (red, shakes), waiting for you (amber); skipped nodes are dashed. |
| Note | Shown under the card. |
Edges turn green along the path the run takes and show how many items went through them; the active edge animates. Output dots show their item count too.
The node menu (right-click)
Open · Open browser · Run this step · Run from here · Edit script (script nodes) · Skip (during a run: skip this node when the run reaches it) · Pin / Unpin output · Copy · Convert to flow · Disable / Enable · Duplicate · Delete.
Notes and groups
- Sticky note (
⇧S) adds a note; pick its colour and size. - Turn on Group on a note: dragging the note carries the nodes inside it.
Copy, paste, duplicate
Copy (⌘C), cut (⌘X) and paste (⌘V) go through the clipboard as JSON, so you can paste between flows or into a chat:
{
"mooflair": "flow",
"nodes": [{ "id": "wait", "type": "flow/wait", "name": "Wait", "field": { "mode": "interval", "durationMs": 5000 }, "setting": { "retry": { "count": 0, "waitMs": 1000, "backoff": "fixed" }, "error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } }, "timeoutMs": 86400000, "disabled": false }, "pin": null, "position": { "x": 0, "y": 0 }, "note": null }],
"edges": []
}
Pasted node ids that clash are renamed (wait → wait2) and expressions inside the pasted nodes follow the new ids.
Keyboard shortcuts
Shortcuts are ignored while you type in a field.
| Keys | Action |
|---|---|
⌘K | Search actions… (command palette) |
⌘S | Save |
⌘Z / ⌘⇧Z or ⌘Y | Undo / Redo |
⌘Enter | Test run the whole flow |
⌘B / ⌥⌘B / ⌘J | Collapse or expand the left sidebar / the right side / the bottom panel, like VS Code () |
⌘A | Select all nodes |
⌘D | Duplicate the selection |
⌘C / ⌘X / ⌘V | Copy / Cut / Paste |
Tab / n | Add a node (Tab connects it after the selected node) |
Enter / F2 | Open the selected node's details |
← / → | Walk to the previous / next node |
1 | Fit view |
+ / − / 0 | Zoom in / out / reset |
d | Disable / enable the selection |
p | Pin / unpin the selection's last items |
⇧S | Sticky note |
⇧⌥T | Tidy up |
Saving
Every edit goes into the flow's live document at once, shared with everyone who has it open (see ): there's no Save, and ⌘S waits until the server has your latest edits. Undo takes back only your own changes.
FAQ
How do I run only the nodes I selected?
Select them and choose Run selected (test) from the command palette.
Can I move a whole section at once?
Put a note behind it and turn on Group; dragging the note carries the nodes.