Workflow
Beta Feature: This node is currently in beta. Features and functionality may be subject to changes.
The Workflow Node lets you reuse an existing workflow inside another workflow. It spins up child workflow executions while keeping the parent’s context so you can compose larger processes from smaller building blocks.
When to use: Break down large flows into reusable subflows, or fan out work over a list of items while keeping parent/child traceability.
How Does It Work?
Setup Steps:
- Build your workflow using Graph Edit Mode (minimum setup: input node → workflow node → output node, but you can add more nodes as needed).
- Click on the workflow node settings to open its configuration.
- Configure the following data:
- Select a Workflow: Choose from existing workflow entities in your project. Self-calls are blocked to prevent circular references.
- View or Edit Source: You can preview the referenced workflow or open it in a new tab for full access and updates.
Output:
The Workflow Node executes the selected child workflow and returns its output. The output format depends on the execution mode:
- Single mode: Returns the child workflow’s output directly.
- Loop mode: Returns an array of outputs from each child workflow execution, stored at the configured output path.
Limits
- Max child depth: 5 levels. Depth increases by 1 per nested workflow; hitting the limit throws
Maximum child workflow depth (5) exceeded. - Max loop iterations: 20 items. Exceeding this rejects execution before spawning children.
Looping Behavior
- The array at Input Path is mapped 1:1 to child runs. Each child gets the array item as its input.
- Loop executions run in parallel. Failures bubble up to the parent; the parent fails fast if any child fails.
- The aggregated child outputs are stored at Output Path (e.g.
results.children).
Loop Example
Input path: orders
Input data:
{
"orders": [
{ "orderId": "A-1", "total": 25.5 },
{ "orderId": "B-2", "total": 42.0 },
{ "orderId": "C-3", "total": 18.9 }
]
}Execution: The Workflow Node reads orders (3 items) and spawns three child workflow runs in parallel, each receiving one item as its entire input.
Child #0 input
{
"orderId": "A-1", "total": 25.5
}Child #1 input
{
"orderId": "B-2", "total": 42.0
}Child #2 input
{
"orderId": "C-3", "total": 18.9
}Output path: results.children
Output example (after all children complete):
{
"results": {
"children": [
{ "orderId": "A-1", "status": "processed" },
{ "orderId": "B-2", "status": "processed" },
{ "orderId": "C-3", "status": "failed", "reason": "payment_declined" }
]
}
}Restart / Retry Rules
- Parent with started children: Can only restart from the beginning (partial retries are disabled).
- Parent without started children: Can restart from the beginning or from the last failed node.
- Child workflows: Cannot be restarted directly. Restart the parent workflow instead; this recreates the child context safely.
Error Propagation
- Upward (child → parent): If a child workflow fails, the Workflow Node surfaces the child error and marks the parent as failed. The parent trace shows which child failed and why.
- Downward (parent terminated): Terminating the parent cascades termination to running children. Children end as TERMINATED and the parent records the termination in its trace.
- Adjacent (parallel children): In loop/parallel runs, if any child fails, the parent fails fast and remaining siblings are terminated. Successful siblings stay visible for drill-down; terminated ones show their termination state.
When to Use It?
Use a Workflow Node when:
- You want to break down large workflows into smaller, reusable components.
- You need to apply the same workflow logic to multiple items using loop mode.
- You want to maintain separation of concerns between different workflow responsibilities.
- You need parent/child traceability for monitoring and debugging.
- You want to centralise common workflow logic for easier maintenance.