Skip to main content
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

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;
    };
  };
}
FieldTypeRequiredDescription
idstringYesUnique edge identifier (e.g., "e-loader-analyzer").
sourcestringYesID of the source node.
targetstringYesID of the target node.
sourceHandlestringNoID of the specific output port. See Handle IDs.
targetHandlestringNoID of the specific input port. See Handle IDs.
selectablebooleanNoWhether the edge can be selected in the editor.
deletablebooleanNoWhether the edge can be deleted by the user.
data.labelstringNoDisplay label on the edge.
data.conditionstringNoCondition expression (used with gateway branches).
data.metadata.edgeTypeEdgeCategoryNoVisual styling category.
data.metadata.sourcePortDataTypestringNoData type of the source output port.

Handle IDs

Port handles follow a deterministic naming pattern:
{nodeId}-{direction}-{portId}
For example:
  • content_loader.1-output-items — the “items” output port on node content_loader.1
  • analyzer.1-input-content — the “content” input port on node analyzer.1
  • router.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

The edgeType field controls the visual style of the edge on the canvas:
CategoryVisual StyleWhen Used
dataSolid gray lineDefault — general data flow between nodes.
triggerSolid line with trigger colorControl flow connections (port dataType: "trigger").
toolDashed amber lineTool interface connections (port dataType: "tool").
loopbackDashed gray lineLoop 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

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

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

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

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

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