Skip to content

For Developers

Flow-Like is easiest to understand as a typed, event-driven programming environment whose source is a graph. Nodes perform work, pins define inputs and outputs, and wires carry execution or data between nodes.

Flow-Like conceptClosest programming concept
AppProject boundary containing executable logic, interfaces, data, and delivery settings
FlowExecutable graph; stored internally as a board
Event nodeEntry function inside a Flow
App EventTrigger configuration that targets an event node
NodeTyped operation or function call
Pins and wiresFunction arguments, return values, and control flow
FunctionReusable, typed function defined within a Flow
LayerNested or collapsed graph used for abstraction
VariableBoard-level in-memory state
Page or WidgetUser-interface surface backed by Flow data and actions

These are working analogies, not serialization guarantees. For example, an App Event is configured outside the graph even though it points to an event node inside the Flow.

Traditional code often composes calls directly:

const raw = await loadFile(path);
const result = normalize(raw);
await saveOutput(result, outputPath);

In Flow-Like, add nodes for the same operations, connect loadFile data to normalize, connect the normalized value to saveOutput, and connect the execution pins in the required order.

There are two distinct connection types:

ConnectionMeaning
Execution wireDetermines when a standard node runs
Data wireSupplies a typed value to an input pin

Standard nodes run when execution reaches them. Pure nodes have data pins but no execution pins and evaluate when a downstream node needs their output. Event nodes are graph entry points.

Flow-Like does not infer that every disconnected branch should run in parallel. Use Sequence for ordered fan-out and Parallel Execution or Parallel For Each when concurrency is intentional.

Pins enforce data types when you connect them. Generic pins can resolve to a concrete type after a compatible connection is made, and complex values can also carry a schema.

For example, this interface:

interface Customer {
id: string;
name: string;
email: string;
orders: Order[];
}

maps to a struct schema with string fields and a typed array field. Use Make Struct, Get Field, and Set Field to construct and transform that value.

Code-level valueFlow-Like representation
ScalarString, Integer, Float, Boolean, Date, or another pin type
ArrayTyped Array value
Set or mapTyped Set or Map value
Object or recordStruct, optionally constrained by a schema
File pathPath value rather than an arbitrary string
Runtime handleTyped reference passed between compatible nodes

Browse the generated node catalog for the current pin and schema contract of every node.

The Variables panel defines typed state shared by the Flow’s graph. Read and write it with Get Variable and Set Variable.

Code such as:

counter += 1
results.append(item)

usually becomes a variable read, a typed math or array operation, and a variable write. Variables are useful for state needed during execution; they should not be treated as a general durable database.

Choose storage by lifecycle:

NeedUse
Temporary execution stateFlow variable
Per-device configuration or a secretRuntime-configured variable
Files owned by the AppApp Storage
Queryable or persistent recordsDatabase nodes and Data Studio
Chat conversation contextChat Event history and session values

For credentials, mark a variable Secret and Runtime Configured, then set its value on the machine that will execute the Flow. Do not place credentials in ordinary node defaults.

Programming constructCurrent Flow-Like node or pattern
if / elseBranch
for item in itemsFor Each
Loop with early exitFor Each (Break)
whileWhile Loop
Ordered fan-outSequence
Parallel workParallel Execution or Parallel For Each
Wait for parallel branchesGather
Bounded operationTimeout
Run only onceDo Once
Alternate between two pathsFlip Flop

Do not translate language-level try/catch mechanically. Some catalogs, such as desktop automation, provide explicit recovery nodes; other operations expose status or result pins that you should validate and branch on. Design the failure path from the contract of the specific node.

Use the smallest boundary that expresses the intent:

  • Define a Flow function and invoke it with Call Function for reusable typed logic within the same Flow.
  • Collapse a section into a Layer when it should read as one higher-level operation.
  • Use an App Event when a user, schedule, API, chat surface, or another supported sink must enter the Flow.
  • Use Pages and Widgets when the automation needs a purpose-built interface.

An event node is analogous to an entry function, but it does not become externally callable until an App Event is configured to target it.

TaskCurrent catalog area
Build and send an HTTP requestWeb/API nodes
Read or write file contentData/Files nodes
Send or receive emailEmail nodes
Query registered data with SQLDataFusion nodes
Work with structured JSONJSON nodes and Struct nodes
Record diagnostic outputLogging nodes

Prefer a dedicated integration node when its contract matches the task. Use the HTTP nodes for an API that does not have a suitable catalog integration.

The Studio keeps run history and node logs. Open a previous run to inspect its timing and logs or rerun it with the same payload. See Logging and tracing.

Saved Flow versions are explicit snapshots rather than an automatic commit for every edit. Production Events can target a saved version instead of the mutable latest Flow; see Versioning.

When validating a migration:

  1. Run representative success, empty-input, invalid-input, and failure cases.
  2. Inspect the data contract at every external boundary.
  3. Confirm that local-only nodes run on a compatible machine.
  4. Configure runtime variables separately for each execution environment.
  5. Pin production Events only after the target Flow version is verified.

If the catalog does not contain the operation you need, custom WASM nodes provide a documented extension model with multiple supported source languages. Review the sandbox and manifest requirements before granting filesystem, network, or other capabilities.

If orchestration should remain in an application, the official Node.js and Python SDKs can trigger workflows, monitor executions, work with files and databases, and access supported AI endpoints.

  1. Define the input and output types before recreating implementation details.
  2. Create one Flow and one event node for a representative entry point.
  3. Replace each source operation with a catalog node or a small typed layer.
  4. Add explicit Branch, loop, Sequence, or Parallel nodes where ordering matters.
  5. Move secrets and environment-specific values to Runtime Variables.
  6. Configure the App Event that will invoke the entry node.
  7. Exercise the Flow locally, inspect its run history, then choose its execution mode.
  8. Extract stable repeated sections into functions or layers.