Building Workflows

Connect nodes into directed acyclic graphs and run them.

A workflow is a connected graph of nodes that describes a data processing pipeline. You build workflows visually on the canvas by placing nodes and wiring their ports together. Floww handles the execution order, data passing, and error propagation automatically.

DAG Basics

Floww workflows are directed acyclic graphs (DAGs). This means:

  • Directed — Data flows in one direction, from output ports to input ports. Wires have a clear from-node and to-node.
  • Acyclic — There are no loops in the graph. A node's output cannot eventually feed back into its own input through a chain of connections.
  • Graph — Nodes can have multiple inputs and multiple outputs. Branches can diverge and converge.

The DAG constraint ensures that every workflow has a deterministic execution order. Floww can always figure out which nodes need to run first and which can run in parallel.

Why No Cycles?
Cycles (feedback loops) create ambiguity: which node runs first? How many times does the loop iterate? Floww avoids this by enforcing a DAG structure. If you need iteration, use the Loop node, which provides controlled iteration over arrays without creating a graph cycle.

If you attempt to create a connection that would form a cycle, Floww rejects the wire and shows a brief warning. The connection simply will not be made.

Connecting Nodes

Connections (wires) carry data from one node's output to another node's input.

Creating a Connection

  1. Hover over an output port on the right side of a node. The port highlights.
  2. Click and drag from the output port. A wire follows your cursor.
  3. Drop the wire on a compatible input port on another node.
  4. If the types are compatible, the wire snaps into place and turns solid.

You can also drag in the reverse direction: from an input port to an output port. Floww automatically orients the connection correctly.

Wire Colors

Wires are color-coded by the data type they carry:

Type Color Description
Text White Plain text strings
Number Blue Integers and floats
JSON Amber Structured objects and arrays
File Green File path references
Any Gray Accepts any type

Removing a Connection

To delete a wire, click on it to select it (it highlights and shows a small X icon), then press Delete or click the X. You can also right-click a wire and select Disconnect.

Execution Order

When you run a workflow, Floww determines the execution order using topological sorting. This algorithm processes nodes level by level:

  1. Source nodes (nodes with no inputs, or trigger nodes) execute first.
  2. Once a node completes, its output data is sent to all connected downstream nodes.
  3. A downstream node executes only when all of its input ports have received data.
  4. The process continues until all reachable nodes have executed.

Parallel Branches

When a node's output fans out to multiple downstream nodes that are independent of each other, those branches execute in parallel. Floww automatically detects parallelism opportunities.

File Read
  ├── Claude Prompt (summarize)    ← runs in parallel
  └── Claude Prompt (translate)    ← runs in parallel
        └── Merge                  ← waits for both

In this example, both Claude Prompt nodes receive the same file content and run simultaneously. The Merge node waits for both to complete before combining their results.

Sequential Chains

When nodes are connected in a straight line (A → B → C), they execute strictly in order. Each node waits for the previous one to finish before starting.

Tip
You can see the execution order by hovering over the Play button. Floww displays a numbered overlay on each node showing its position in the execution sequence.

Variables & Template Expressions

Variables let you pass data between non-adjacent nodes without connecting them with wires. They act as a shared key-value store scoped to the current workflow run.

Setting Variables

Use the Variable Set node to store a value:

  1. Add a Variable Set node.
  2. Configure the variable name, e.g., api_response.
  3. Connect its input to the data you want to store.

You can also set variables in JavaScript and Python nodes:

// JavaScript node
floww.setVariable("processed_count", items.length);
return items;

Getting Variables

Use the Variable Get node to retrieve a stored value anywhere in the workflow. Configure it with the same variable name used in the Set node.

Template Expressions

Many node configuration fields support template expressions using double-brace syntax:

Summarize the following in {{language}}: {{input}}

Template expressions can reference:

  • {{input}} — The data received on the node's input port.
  • {{variableName}} — A workflow variable set by a Variable Set node or scripting node.
  • {{env.VAR_NAME}} — An environment variable from your system.
Variable Scope
Variables are scoped to a single workflow run. They are created when set and destroyed when the run completes. If you re-run the workflow, variables from the previous run are not available. Use File Write if you need persistent storage between runs.

Running Workflows

Floww provides several ways to execute your workflow:

Run All

Click the Play button in the top toolbar (or press Ctrl + Enter) to execute the entire workflow from all source nodes to all terminal nodes.

Run Selected

Select one or more nodes and press Enter to run only the selected subgraph. Floww automatically includes any upstream dependencies that need to run first. This is useful for testing a specific part of a large workflow.

Re-run

After a workflow completes, click Re-run (or press Ctrl + Shift + Enter) to execute it again with the same configuration. Changed nodes (nodes whose configuration was modified since the last run) are highlighted before re-execution.

Cancel

Click the Stop button (or press Esc) to cancel a running workflow. Currently executing nodes finish their current operation, but no new nodes start. Partially completed results are preserved.

Execution Status
During execution, the top toolbar shows a progress indicator with the count of completed, running, and pending nodes. Each node's status indicator updates in real time so you can watch the workflow execute step by step.

Error Handling

When a node encounters an error during execution, Floww provides several mechanisms to handle it gracefully.

Node Error States

A node that fails turns its status indicator red and displays the error message in its result area. By default, an error in any node halts the entire workflow—downstream nodes are not executed.

Retry

For transient errors (network timeouts, rate limits), configure automatic retries in the node's settings:

  • Retry count — Number of retry attempts (0–5).
  • Retry delay — Milliseconds between attempts. Supports exponential backoff.

Retries are available on all node types but are most useful for HTTP Request, Claude Prompt, and Database Query nodes.

Skip on Error

Enable Continue on Error in a node's settings to allow the workflow to proceed even if this node fails. The node's output is set to null, and downstream nodes receive null on the corresponding input.

Error Output Port

Some nodes expose an error output port in addition to their main output. When the node fails, the error message and details are sent through this port instead of the main output. You can connect the error port to:

  • A Template node to format an error notification.
  • An Email Send node to alert you of failures.
  • A File Write node to log errors for later review.
  • A Conditional node to implement custom recovery logic.
HTTP Request
  ├── [output] → JSON Parse → ...     (success path)
  └── [error]  → Template → Email Send  (error path)
Tip
Combine Continue on Error with the error output port to build resilient workflows that handle failures without halting. This pattern is especially useful in long-running batch processing workflows.