What makes React Flow stick for us is how cleanly it stays out of the state layer. You build nodes and handles as standard React components, keep the actual workflow graph in your own store (like Zustand or an external state machine), and let the library handle zoom/pan math, dragging, and edge rendering without fighting DOM reconciliation. The xyflow reorganization also made TypeScript types and sub-flows much easier to work with.