Workflow Structure
August 30, 2026 · View on GitHub
Workflows are stored as JSON with nodes and edges. See Node Types for available node types and Expression DSL for expression syntax in data fields.
Workflow Object
{
"id": "uuid",
"name": "My Workflow",
"description": "Optional description",
"nodes": [],
"edges": [],
"auth_type": "anonymous",
"allow_anonymous": true
}
Node Object
{
"id": "node-uuid",
"type": "llm",
"position": { "x": 100, "y": 200 },
"data": {
"label": "llm",
"model": "gpt-4",
"userMessage": "$input.text"
}
}
Agent node data (persistent memory)
Agent nodes support an optional knowledge graph per canvas node:
| Field | Type | Description |
|---|---|---|
persistentMemoryEnabled | boolean | When true, load stored graph into the system prompt and merge new facts after successful runs |
memoryShares | array (optional) | Grants other agents access to this node’s memory graph (peerWorkflowId, peerCanvasNodeId, permission: read | write). See Agent Persistent Memory. |
Example:
{
"id": "agent-main",
"type": "agent",
"position": { "x": 200, "y": 120 },
"data": {
"label": "assistant",
"persistentMemoryEnabled": true,
"credentialId": "uuid",
"model": "gpt-4o",
"userMessage": "$input.text",
"memoryShares": []
}
}
See Agent Persistent Memory for API paths, editor behavior, and extraction semantics.
Edge Object
{
"id": "edge-uuid",
"source": "input-node-id",
"target": "llm-node-id",
"sourceHandle": null,
"targetHandle": null
}
Node Types
Common type values: Input (textInput), Cron, WebSocket Trigger (websocketTrigger), LLM, Agent, Condition, Switch, Output, JSON output mapper (jsonOutputMapper), Wait, HTTP, WebSocket Send (websocketSend), Merge, Set, Variable, Loop, and more. Full list: Node Types. Nodes in the same execution level run in parallel.
Editor layout
Each node has position.x and position.y for the desktop canvas layout. On screens below the
768px breakpoint, the editor replaces the freeform Vue Flow canvas with a full-screen, indented
workflow tree. The tree follows connected execution paths, marks parallel branches, and uses the
same node labels, icons, and latest run status as the desktop editor.
Tap a node to select it. If it has a recorded execution result, its full-screen detail opens with input, output, and error tabs. The mobile bottom navigation provides Nodes, Properties, Run, and More; the header retains save, history, search, settings, and share actions. Desktop continues to use the freeform Vue Flow canvas and side panels.
Use Add node in the mobile Nodes tab to search the node library. A regular node opens a connection sheet immediately after it is added: choose an anchor node and place it After, Before, or as a Parallel branch. In edit mode, tap an existing regular node to open the same sheet with its current connection selected. Trigger nodes stay independent because they do not accept regular input. The edit control also exposes a remove action for the selected node. Execution details include previous and next arrows when adjacent node results are available. The AI Assistant opens above the mobile tree as a bottom sheet, without changing the active editor tab.
Related
- Node Types – All node types and descriptions
- Canvas Features – Editor features (data pin, execution logs, enable/disable, extract to sub-workflow)
- Download & Import – Export and import workflows as JSON
- Agent Node – Agent node
datastructure - Agent Persistent Memory –
persistentMemoryEnabled,memoryShares, and memory graph API - Expression DSL – Syntax for
userMessage,condition,$vars,$global, etc. - Parallel Execution – How nodes run in parallel
- Triggers – Start nodes and entry points
- Workflows Tab – Create and manage workflows