API Gap Analysis: makepad-flow vs xyflow (React Flow)
Comprehensive comparison of features between makepad-flow and xyflow/React Flow .
✅ Implemented
🔶 Partial
❌ Not implemented
Feature
xyflow
makepad-flow
Notes
Nodes rendering
✅
✅
Edges rendering
✅
✅
Pan canvas
✅
✅
Shift+drag
Zoom canvas
✅
✅
Scroll wheel
Fit view
✅
✅
Node dragging
✅
✅
Node selection
✅
✅
Multi-selection
✅
✅
Shift+click, drag box
Delete nodes/edges
✅
✅
Delete/Backspace
Keyboard shortcuts
✅
✅
Ctrl+A, Escape, Ctrl+Z/Y
Feature
xyflow
makepad-flow
Notes
Custom node types
✅
✅
RoundedRect, DoubleRoundedRect, Rectangle, Round, Diamond
Node position
✅
✅
Node dimensions
✅
✅
Node data/label
✅
✅
Node styles
✅
✅
Border width, colors
Node resizing
✅
❌
NodeResizer component in xyflow
Multiple handles
✅
🔶
Currently 1 input + 1 output per node
Handle positions
✅
🔶
Fixed left/right positions
Node toolbar
✅
❌
NodeToolbar component
Selectable prop
✅
❌
Per-node selectable flag
Draggable prop
✅
❌
Per-node draggable flag
Connectable prop
✅
❌
Per-node connectable flag
Hidden prop
✅
❌
Per-node visibility
Z-index
✅
❌
Layer ordering
Parent nodes
✅
❌
Nested/grouped nodes
Extent constraints
✅
❌
Limit node movement area
Feature
xyflow
makepad-flow
Notes
Edge types
✅
🔶
Bezier only (xyflow: bezier, step, smoothstep, straight)
Edge labels
✅
✅
Edge markers
✅
✅
Arrow heads
Edge styles
✅
✅
Solid, dashed, dotted
Animated edges
✅
✅
Flow particles
Edge reconnection
✅
❌
Drag edge to new target
Deletable prop
✅
❌
Per-edge deletable flag
Selectable prop
✅
❌
Per-edge selectable flag
Edge label position
✅
❌
labelBgPadding, labelBgStyle
Custom edge paths
✅
❌
getSmoothStepPath, getBezierPath
Feature
xyflow
makepad-flow
Notes
Connection creation
✅
✅
Drag from port
Connection validation
✅
❌
isValidConnection callback
Snap to grid
✅
❌
snapToGrid, snapGrid props
Selection box
✅
✅
Pan on scroll
✅
❌
panOnScroll prop
Pan on drag
✅
✅
Shift+drag
Zoom on scroll
✅
✅
Zoom on double-click
✅
❌
Prevent scrolling
✅
❌
preventScrolling prop
Node drag threshold
✅
❌
nodeDragThreshold prop
Selection on drag
✅
✅
Feature
xyflow
makepad-flow
Notes
onNodesChange
✅
❌
Node add/remove/position/select
onEdgesChange
✅
❌
Edge add/remove/select
onConnect
✅
❌
New connection created
onNodeClick
✅
🔶
Internal only
onNodeDrag
✅
🔶
Internal only
onNodeDragStart
✅
❌
onNodeDragStop
✅
❌
onEdgeClick
✅
🔶
Internal only
onPaneClick
✅
🔶
Internal only
onMove
✅
❌
Viewport move
onMoveStart
✅
❌
onMoveEnd
✅
❌
onSelectionChange
✅
❌
onInit
✅
❌
ReactFlow instance ready
Feature
xyflow
makepad-flow
Notes
MiniMap
✅
❌
Overview in corner
Controls
✅
❌
Zoom in/out/fit buttons
Background
✅
❌
Dots/lines/cross pattern
Panel
✅
❌
Positioned panel component
NodeResizer
✅
❌
Resize handles
NodeToolbar
✅
❌
Floating toolbar
Feature
xyflow
makepad-flow
Notes
getViewport
✅
🔶
zoom, pan_offset available
setViewport
✅
❌
fitView
✅
✅
zoomIn
✅
🔶
Scroll only
zoomOut
✅
🔶
Scroll only
zoomTo
✅
❌
Zoom to specific level
setCenter
✅
❌
Center on coordinates
fitBounds
✅
❌
Fit to specific bounds
Feature
xyflow
makepad-flow
Notes
getOutgoers
✅
❌
Get downstream nodes
getIncomers
✅
❌
Get upstream nodes
getConnectedEdges
✅
❌
Get edges for nodes
isNode
✅
❌
Type guard
isEdge
✅
❌
Type guard
addEdge
✅
✅
applyNodeChanges
✅
❌
Apply change set
applyEdgeChanges
✅
❌
Apply change set
Feature
xyflow
makepad-flow
Notes
Controlled mode
✅
❌
External state management
Uncontrolled mode
✅
✅
Internal state
useNodesState
✅
❌
Hook for nodes
useEdgesState
✅
❌
Hook for edges
useReactFlow
✅
❌
Instance access hook
useNodes
✅
❌
useEdges
✅
❌
useViewport
✅
❌
Feature
xyflow
makepad-flow
Notes
Export to JSON
✅
❌
toObject()
Import from JSON
✅
❌
Save/restore viewport
✅
❌
Undo/redo
🔶
✅
Ctrl+Z/Y
Feature
xyflow
makepad-flow
Notes
CSS variables
✅
❌
Theming via CSS
Dark mode
✅
🔶
Currently dark only
Custom colors
✅
✅
Via code
Class names
✅
❌
Priority Implementation Order
MiniMap - Essential for large graphs
Controls panel - Zoom buttons for accessibility
Background grid - Visual reference
Snap to grid - Precision layout
Medium Priority (Power Users)
Node resizing - Flexible layouts
Multiple handles - Complex connections
Edge reconnection - Edit existing connections
Copy/paste - Productivity
Lower Priority (Advanced)
Export/import JSON - Persistence
Event callbacks - Integration
Auto-layout - dagre/elkjs integration
Parent-child nodes - Hierarchies
Category
xyflow
makepad-flow
Coverage
Core
10
10
100%
Node Features
15
5
33%
Edge Features
10
5
50%
Interaction
11
5
45%
Events
14
0
0%
UI Components
6
0
0%
Viewport
8
2
25%
Utilities
8
1
12%
State
7
1
14%
Persistence
4
1
25%
Overall: ~30% feature parity with xyflow
Sources: