The heart of FreeFlowCharts is the canvas — the infinite, zoomable, pannable workspace where you drag nodes around and connect them with edges. Here's how we built it.
Why React Flow
We evaluated several options: Konva, D3, Cytoscape, and React Flow. React Flow won because:
Custom node types
We built 20+ custom node types, each with its own visual style:
Each node has a rich properties panel where you can set descriptions, assignees, due dates, costs, and approval statuses.
Auto-layout with dagre
When you generate a flow from AI or import a template, we run the dagre graph layout algorithm to automatically position nodes in a clean, readable hierarchy. This prevents the spaghetti problem that plagues most flowchart tools.
Version history
Every save creates a snapshot. You can browse previous versions and restore any point in time. We store the full canvas state (nodes, edges, zoom, pan) as a Firestore document.
Performance
The biggest challenge was keeping the canvas responsive with lots of nodes. Key optimizations:
React.memoThe result is a canvas that feels snappy even with 50+ nodes and complex edge routing.