Skip to main content
Ports are the connection points on nodes. Each port has a data type that determines which other ports it can connect to and how the connection renders on the canvas.

NodePort

Every node declares its inputs and outputs as an array of NodePort objects:

Example

Built-in Data Types

FlowDrop ships with 21 built-in data types, each with a distinct color on the canvas:

Basic Types

Collection Types

Complex Types

File & Media Types

Special Types

Your backend can extend this list by returning additional data types from the /port-config API endpoint.

Port Data Type Configuration

Each data type is defined by a PortDataTypeConfig:

Compatibility Rules

By default, ports connect only when their data types match exactly (e.g., string to string). You can add custom compatibility rules to allow cross-type connections:
For example, to allow string ports to connect to json inputs:
Rules are configured via the /port-config API endpoint.

Dynamic Ports

Nodes can let users create additional ports at runtime through special config properties. When dynamicInputs or dynamicOutputs appear in a node’s config, the editor creates port handles dynamically.

Example: Dynamic Input Ports

In the node’s configSchema, declare a dynamicInputs property:
When a user adds entries, the editor creates matching input handles. The same pattern works for dynamicOutputs.

Gateway Branches

Gateway nodes use branches in config to create conditional output paths. Each branch becomes an output port handle.

Example

Each branch creates an output handle: {nodeId}-output-success, {nodeId}-output-error, etc. Edges connect from these handles to downstream nodes.

Handle ID Format

All port handles — static, dynamic, and branch — follow the same naming convention:
Examples:
  • text_input.1-output-text — static output port
  • merger.1-input-extra_data — dynamic input port
  • router.1-output-success — gateway branch output
This format is used in edge sourceHandle and targetHandle fields.

Next Steps