Workflows
Workflows are the core building block of NodeLoom. Each workflow is a connected chain of nodes that processes data from a trigger through a series of actions.
What Is a Workflow?
A workflow is an ordered chain of nodes where each node represents a discrete unit of work -- an API call, a data transformation, an AI inference, or a control-flow decision. Edges define the order in which data flows from one node to the next.
Every workflow begins with exactly one Trigger node. The trigger determines when and how the workflow starts: on a schedule, via a webhook, from a chat message, or through one of 37 supported trigger types.
Always start with a Trigger
Data Flow
When a node executes, it produces a JSON output. That output is automatically forwarded to every connected downstream node as $json. Nodes can reference upstream data using expressions like {{ $json.fieldName }}.
Data flows strictly from left to right (or top to bottom in Simple Flow mode). There are no cycles -- if you need iteration, use a Loop node which provides structured looping without creating graph cycles.
{
"id": 42,
"customer": {
"name": "Acme Corp",
"email": "ops@acme.com"
},
"total": 299.99
}Execution Order
NodeLoom executes workflows starting from the trigger and working through connected nodes in dependency order. A node only runs after all of its upstream dependencies have completed.
| Step | Description |
|---|---|
| 1. Trigger fires | The trigger node receives an event (webhook payload, cron tick, chat message, etc.) and produces its output. |
| 2. Schedule connected nodes | All nodes directly connected to the trigger are scheduled to run next. |
| 3. Execute nodes | Each scheduled node executes. Branching nodes (If/Else, Switch) only activate the matching branch. |
| 4. Continue | The process continues until all reachable nodes have executed or an error halts the workflow. |
Parallel branches
Workflow States
A workflow is always in one of two states:
| State | Behavior |
|---|---|
| DRAFT | The workflow is saved but will not respond to trigger events. You can edit and test freely. |
| ACTIVE | The workflow is live. Trigger events are processed in real time. Scheduled triggers run automatically. |
Toggle between states using the Activate / Deactivate switch in the top-right corner of the canvas editor. Deactivating a workflow does not delete any execution history.
Versioning and Auto-Save
Every change you make in the canvas editor is automatically saved as you work. You never need to hit a save button -- NodeLoom persists your graph, node positions, and configuration in real time.
NodeLoom keeps a full version history of each workflow. You can view past versions, compare changes, and roll back to any previous state from the workflow settings panel.
Info
Testing and Debugging
NodeLoom provides several tools for testing workflows before they go live:
- Test Node: Right-click any node and choose Test to execute it in isolation with sample or live data. The output appears in the node inspector.
- Test Workflow: Click the Test button in the toolbar to run the entire workflow end-to-end using the most recent trigger data (or sample data you provide).
- Execution Log: Every execution (test and live) is recorded with timestamps, input/output for each node, and error stack traces when applicable.
- Pin Data: Pin static test data to any node so that downstream nodes always receive consistent input during development.
Debug faster
Subflow Reusability
The Subflow node lets you embed one workflow inside another. This enables:
- DRY patterns: Extract common logic (e.g., "enrich contact," "send Slack alert") into a reusable subflow and reference it from multiple parent workflows.
- Scoped variables: Pass data into a subflow using
{{ $subflow.field }}expressions and receive structured output back. - Team collaboration: Different team members can own different subflows while a main orchestrator workflow ties them together.
{
"type": "SUBFLOW",
"parameters": {
"workflowId": "wf_abc123",
"inputs": {
"contactEmail": "{{ $json.email }}",
"companyName": "{{ $json.company }}"
}
}
}