Built-in types
| Type | Purpose | Description |
|---|---|---|
default | Full-featured nodes | Input/output port lists, icon, label, description |
simple | Compact layout | Header with icon and description, space-efficient |
square | Icon-only | Minimal design for simple operations |
tool | AI agent tools | Tool metadata with badge label |
gateway | Branching logic | Conditional output paths with multiple branches |
terminal | Start/end points | Circular nodes for workflow entry and exit |
idea | Conceptual flow | BPMN-like flow nodes for conceptual diagrams |
note | Documentation | Markdown-enabled sticky notes (no execution) |
atom | Value supplier | Minimalist label-only pill that supplies a value |

default
Full-featured node with input/output port lists, icon, label, and description. Suitable for most workflow steps.
simple
Compact layout with header icon and description. Space-efficient for nodes that don’t need visible ports.
square
Icon-only minimal design. Ideal for simple operations where the icon alone conveys the purpose.
tool
Designed for AI agent tools. Displays tool metadata including version, badge label, and description.
gateway
Branching logic node with conditional output paths. Supports multiple branches for routing workflow execution.
terminal
Circular start/end point nodes. Used to mark workflow entry and exit points.
idea
Conceptual idea node for BPMN-like flow diagrams. Lightweight node with a colored top border accent.
note
Markdown-enabled sticky notes for documentation. These are non-executing nodes meant for annotations.
atom
A minimalist, label-only node that renders as a compact pill hugging its content — designed for “supplies a value” nodes such as a Constant (and Cast in the future). The atom owns no domain semantics of its own; what it shows and the data type it emits are driven entirely by configuration, so a single node type can back many small value-providing nodes.
The body text resolves in order:
- The value of the config key named by
valueKey(using the field’soneOftitles when present) - The node’s
label - The
placeholder, rendered dimmed
color accents the pill border.
Display and behavior are configured through extensions.ui.atom (AtomUIConfig):
| Property | Type | Description |
|---|---|---|
valueKey | string | Config key whose value becomes the node body. Falls back to data.label. |
valueTypeKey | string | Config key holding the selected value’s type (a port dataType id). The bound output port adopts this type. |
outputPortId | string | Output port id driven by valueTypeKey. Defaults to the first output port. |
shape | 'pill' | 'rectangle' | Body shape. 'pill' (default) is fully rounded; 'rectangle' is lightly rounded. |
prefix | string | Dimmed affordance rendered before the body (e.g. '→ '). Stays visible while the body ellipsizes; hidden in the empty state. |
placeholder | string | Text shown (dimmed) when the resolved body value is empty or unset. |
maxWidth | number | Max body width in px before the label ellipsizes. |
Connection validation
FlowDrop validates connections automatically:- 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