Feature Configuration
Optional features that extend the core canvas behavior. Enable them via config options.
<div x-data="flowCanvas({
nodes: [
{ id: 'a', position: { x: 0, y: 0 }, data: { label: 'Node A' } },
{ id: 'b', position: { x: 250, y: 0 }, data: { label: 'Node B' } },
{ id: 'c', position: { x: 125, y: 100 }, data: { label: 'Node C' } },
],
edges: [
{ id: 'e1', source: 'a', target: 'c' },
{ id: 'e2', source: 'b', target: 'c' },
],
history: true,
background: 'dots',
fitViewOnInit: true,
controls: false,
pannable: false,
zoomable: false,
})" class="flow-container" style="height: 250px;">
<div class="canvas-overlay" @mousedown.stop @pointerdown.stop style="position:absolute;top:8px;left:8px;z-index:20;display:flex;gap:4px;">
<button x-flow-action:undo class="rounded border border-border-subtle bg-elevated px-2 py-1 font-mono text-[10px] text-text-muted cursor-pointer hover:text-text-body disabled:opacity-40 disabled:cursor-default">Undo</button>
<button x-flow-action:redo class="rounded border border-border-subtle bg-elevated px-2 py-1 font-mono text-[10px] text-text-muted cursor-pointer hover:text-text-body disabled:opacity-40 disabled:cursor-default">Redo</button>
</div>
<div x-flow-viewport>
<template x-for="node in nodes" :key="node.id">
<div x-flow-node="node">
<div x-flow-handle:target></div>
<span x-text="node.data.label"></span>
<div x-flow-handle:source></div>
</div>
</template>
</div>
</div>
History (Undo/Redo)
| Option |
Type |
Default |
Description |
history |
boolean |
false |
Enable undo/redo history tracking. |
historyMaxSize |
number |
50 |
Max snapshots to retain. |
When enabled, Ctrl+Z / Ctrl+Y (or Cmd on Mac) trigger undo/redo. See History.
Auto-Layout
| Option |
Type |
Default |
Description |
autoLayout |
AutoLayoutConfig |
— |
Auto-layout on structural changes. See Layout addons. |
Loading
| Option |
Type |
Default |
Description |
loading |
boolean |
false |
Show loading overlay until setLoading(false) is called. |
loadingText |
string |
'Loading…' |
Custom text for the loading indicator. |
See x-flow-loading.
Drop Zone
| Option |
Type |
Default |
Description |
onDrop |
(detail) => FlowNode | null |
— |
Handle drops from x-flow-draggable elements. Return a FlowNode to add it, or falsy to cancel. |
onEdgeDrop |
(detail) => FlowNode | null |
— |
Handle connection drops on empty canvas. Return a FlowNode to auto-create and connect it. |
edgeDropPreview |
(detail) => string | HTMLElement | null |
— |
Customize the ghost node shown during edge-drop drag. |
Custom Shapes
| Option |
Type |
Default |
Description |
shapeTypes |
Record<string, ShapeDefinition> |
— |
Custom shape definitions merged with built-ins. Each entry provides perimeterPoint and optional clipPath. |
See Shapes.
Child Validation
| Option |
Type |
Default |
Description |
childValidationRules |
Record<string, ChildValidation> |
— |
Per-type child validation rules. Keys are node type strings. |
onChildValidationFail |
(detail) => void |
— |
Called when validation rejects an operation. |
See Groups.
Compute Engine
| Option |
Type |
Default |
Description |
computeMode |
'auto' | 'manual' |
'manual' |
'manual' = explicit $flow.compute() calls. 'auto' = re-propagate on changes (debounced). |