Files
app/docs/interface/flow-editor.md
T
2026-10-13 10:02:20 +02:00

150 lines
5.8 KiB
Markdown

# The flow editor
Build a flow by naming its messages and configuring its nodes. Fluksio draws
the connections and arranges the canvas for you.
## The canvas
The graph runs left to right on desktop and top to bottom on phones.
- **Nodes** show their execution status.
- **Edges** pulse when values pass through. Click one to inspect its payload.
- **Endpoints** show flow inputs, dashboard widgets and nodes in other flows
that exchange messages with this flow.
Values update over a websocket. A connection banner tells you when the editor
cannot reach the engine.
## Adding a node
Choose **Add node** in the bottom dock, or use ⌘P / Ctrl-P. The command palette
also jumps between flows and offers reusable nodes. Select a type to add it
and open its settings.
## The node panel
**Consumes** and **Provides** declare the node's ports. Each has a port name,
payload type, bound message and delivery interval. Outputs also have a
streaming toggle.
Message fields suggest existing names. Matching an output's message is how
you connect an input.
A blank port-name field follows the message's last segment. Set a port name
to keep the argument name fixed while changing its message binding. Names use
letters, digits and `_`, cannot start with a digit, and must be unique among
the node's inputs or outputs.
Renaming an output's message updates its consumers in the flow. Changing an
input binding points that input at a different message.
### Settings
Built-in nodes show forms for their configuration. Credential fields offer
stored [secrets](operations.md#secrets). JSON settings open a larger editor
and save only when the value parses.
Function nodes also let you add settings passed as arguments alongside the
ports. See [Where a node's values come from](../concepts/values.md).
**Timeout** on a Function node limits silence, not total duration. A node
yielding regularly can run longer than its timeout. Empty or `0` means no
limit, the default.
**Resources** selects a shared worker pool, a named flavor or custom CPU,
memory and GPU requirements. Placement by `device` and `device_policy` is
configured through the API or flow JSON; see [Remote workers](../code/workers.md).
### Code and reuse
Define `process(...)` in **Code**. If the file instead contains exactly one
public function, Fluksio uses that function.
Code saves as you type. ⌘S / Ctrl-S in the code editor saves immediately;
**Publish** applies ordinary node code to the running flow. Generated code
from `fluksio sync` is read-only: edit its source repository and sync again.
Only superusers can add or edit code-running nodes. Other users can read code
and configure permitted built-in nodes.
**Reuse** shares node code as a library entry. Saving shared code takes effect
immediately in every flow using it, so check its users before changing it.
## The flow panel
Open **Flow settings** from the pencil button in the dock.
| Setting | Purpose |
|---|---|
| **Running** | starts or stops the published live flow's subscriptions, schedules and webhooks |
| **Mode** | chooses continuous `live` operation or requested `batch` runs |
| **Inputs** | declares external messages and starting values; batch inputs become run parameters |
| **Result** | selects batch output messages |
| **Contents** | shows the node count and message namespace |
For live inputs, **Publish this value now** sends the starting value immediately.
Changing a stored starting value alone does not replace an existing message.
## Inspecting an edge
Click an edge to see its latest payload, timestamp and recent numeric history.
Republish its value from the producer to run downstream nodes without waiting
for the next sensor reading.
## The dock
| Control | Action |
|---|---|
| **Add node** | opens the command palette |
| **Fit to screen** | fits the graph; desktop only |
| **Run** | executes the current live flow once; for batch flows, asks for run parameters |
| **Pause / Resume** | holds or releases pending work while values still arrive |
| **Step** | releases one held item while paused |
| **Flow settings** | opens the flow panel |
| **Publish** | puts the saved draft live |
| **Discard** | removes unpublished changes |
| **Issues** | lists problems by node |
| **Logs** | shows filterable node output |
**Run** uses the current draft when one exists without publishing it. It
executes real node code, including device and network actions. To try a single
value in a live flow, publish it from a flow input or edge inspector.
Pause and step are useful for inspecting held work. They do not make a draft
run a simulation.
## Shortcuts
Use ⌘ on macOS and Ctrl elsewhere.
| Shortcut | Action |
|---|---|
| ⌘P / Ctrl-P | command palette |
| ⌘S / Ctrl-S | publish the flow; inside the code editor, save code |
| ⌘Z / Ctrl-Z | undo a graph edit |
| ⌘⇧Z / Ctrl-Shift-Z | redo a graph edit |
| ⌘C / Ctrl-C | copy selected nodes |
| ⌘V / Ctrl-V | paste nodes, including into another flow |
Text fields and the code editor keep their own undo and clipboard behavior.
## Drafts, conflicts and issues
Edits are saved as drafts. The engine keeps running the published version until
you publish; shared code follows the exception above. **Discard** returns to
the published version. Delete a never-published flow to remove it.
If another editor saved the same flow, a stale save or publish returns a
conflict. Reload and review their changes before retrying.
The canvas reports unconnected inputs, missing starting values, cycles and
code-load errors. These prevent the affected flow from running. Unauthenticated
webhooks are advisory; runtime node-health problems clear when the node
recovers. See [Flow issues](../concepts/flows.md#when-a-flow-needs-attention).
## See also
- [Flows, nodes and messages](../concepts/flows.md)
- [Node types](../reference/node-types.md)
- [Writing node code](../code/nodes.md)