Edge Structure
Every item in a workflow’s edges array is a WorkflowEdge. It represents a connection between an output port on one node and an input port on another.
Schema
Section titled “Schema”interface WorkflowEdge { id: string; source: string; target: string; sourceHandle?: string; targetHandle?: string; type?: ConnectionLineType; selectable?: boolean; deletable?: boolean; data?: { label?: string; condition?: string; metadata?: { edgeType?: EdgeCategory; sourcePortDataType?: string; }; };}| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique edge identifier (e.g., "e-loader-analyzer"). |
source | string | Yes | ID of the source node. |
target | string | Yes | ID of the target node. |
sourceHandle | string | No | ID of the specific output port. See Handle IDs. |
targetHandle | string | No | ID of the specific input port. See Handle IDs. |
selectable | boolean | No | Whether the edge can be selected in the editor. |
deletable | boolean | No | Whether the edge can be deleted by the user. |
data.label | string | No | Display label on the edge. |
data.condition | string | No | Condition expression (used with gateway branches). |
data.metadata.edgeType | EdgeCategory | No | Visual styling category. |
data.metadata.sourcePortDataType | string | No | Data type of the source output port. |
Handle IDs
Section titled “Handle IDs”Port handles follow a deterministic naming pattern:
{nodeId}-{direction}-{portId}For example:
content_loader.1-output-items— the “items” output port on nodecontent_loader.1analyzer.1-input-content— the “content” input port on nodeanalyzer.1router.1-output-high— the “high” branch output on a gateway node
This format lets FlowDrop map edges back to specific ports during rendering and execution.
Edge Categories
Section titled “Edge Categories”The edgeType field controls the visual style of the edge on the canvas:
| Category | Visual Style | When Used |
|---|---|---|
data | Solid gray line | Default — general data flow between nodes. |
trigger | Solid line with trigger color | Control flow connections (port dataType: "trigger"). |
tool | Dashed amber line | Tool interface connections (port dataType: "tool"). |
loopback | Dashed gray line | Loop iteration connections (targets a loop_back port). |
The editor sets edgeType automatically based on the source port’s data type. You generally don’t need to set it manually in JSON.
Examples
Section titled “Examples”Data Edge
Section titled “Data Edge”A simple data connection between two ports:
{ "id": "e-loader-analyzer", "source": "content_loader.1", "target": "analyzer.1", "sourceHandle": "content_loader.1-output-items", "targetHandle": "analyzer.1-input-content"}Trigger Edge
Section titled “Trigger Edge”A control-flow connection that triggers execution:
{ "id": "e-start-loader", "source": "start.1", "target": "content_loader.1", "sourceHandle": "start.1-output-trigger", "targetHandle": "content_loader.1-input-trigger", "data": { "metadata": { "edgeType": "trigger", "sourcePortDataType": "trigger" } }}Tool Edge
Section titled “Tool Edge”A dashed connection linking an agent to a tool:
{ "id": "e-agent-tool", "source": "search_tool.1", "target": "agent.1", "sourceHandle": "search_tool.1-output-tool", "targetHandle": "agent.1-input-tool", "data": { "metadata": { "edgeType": "tool", "sourcePortDataType": "tool" } }}Gateway Branch Edge
Section titled “Gateway Branch Edge”A conditional edge from a gateway branch:
{ "id": "e-router-high", "source": "router.1", "target": "urgent_handler.1", "sourceHandle": "router.1-output-high", "targetHandle": "urgent_handler.1-input-input", "data": { "condition": "priority > 8", "metadata": { "edgeType": "data" } }}Connection Validation
Section titled “Connection Validation”The editor validates connections automatically before creating edges:
- Type compatibility — only compatible port data types can connect
- Cycle detection — prevents circular dependencies (O(V+E) algorithm)
- Loopback prevention — nodes cannot connect to themselves
For more on data type compatibility rules, see Port System & Data Types.
Next Steps
Section titled “Next Steps”- Node Structure — the nodes that edges connect
- Port System & Data Types — port definitions and compatibility rules
- Workflow Structure — the top-level document containing edges