Release 10.0.0
v10 🎉
React Flow v10 comes with many new features and improvements. Besides a complete rewrite of the internal state management, the separation of the graph elements into nodes and edges, several bug fixes and refactorings, these are the most important new features:
- Sub Flows: Support for sub flows, nested flows and grouping of nodes
- Touch Device Support: The UX for connecting nodes on touch devices has been improved
- Key Handling: Multiple keys and key combinations are now supported
- Several new hooks:
useReactFlow
,useNodes
,useEdges
,useViewport
,useKeypress
have been refactored to provide a better dev experience - Fit View Property: Fit all nodes and edges initially without writing custom logic
- Edge Marker: More options to configure the start and end markers of the edges
If you want to migrate from v9 to v10, you can check out the migration guide.
- chore(bezier-edge): less curvy by default (bfe06a5)
- Improve UE-style Bezier Edge calculation (6f51af2)
- refactor(bezier-edge): only do calculations when necessary (9fff0e5)
- refactor(cypress): cleanup (3b87563)
- chore(deps): update (2d714dc)
- Merge pull request #1968 from wbkd/v10-ue-edge (bf2f9e5)
- refactor(edges): add BaseEdge (bc5d1df)
- refactor(edges): use new edge as default, add simplebezier (b362c11)
- chore(readme): wording (dfc91d7)
- Rename to "unreal" edge, fix for both horizontal and vertical handles (3c96b07)
- Add Unreal Engine style bezier edge (726bc2e)
- chore(attribution): update options (64a3c2d)
- chore(version): bump (466a0af)
- chore(version): bump (1424cf8)
- Merge pull request #1947 from Himself65/v10-fix (5cc3502)
- fix: type error (a48276e)
- refactor(useReactFlow): pass generic nodedata and edgedata closes #1944 (414d7ec)
- Merge branch 'main' into v10 (7fc7dc3)
- refactor(rollup): treeshakable (ebf10fa)
- fix(nocss): use correct entry points (67428d8)
- refactor(builds): drop cjs bundle, add type=module (9156a22)
- chore(version): bump (36fdf20)
- refactor(rollup): define all deps as external (2d9f04c)
- chore(readme): add useUndoable (ca30793)
- chore(readme): add useUndoable (ce2aa46)
- refactor(keys): accept null as key #1463 (fe5337d)
- refactor(nodeTypes/edgeTypes): show warning when not memoized closes #1620 (6630935)
- refactor(handle): only listen to left click events closes #1852 (a45af5f)
- fix(selection-change): only trigger once (67b71a9)
- fix(selection): deselect nodes when select edge and vice versa closes #1899 (007bdab)
- refactor(onmove-handler): pass source event #1676 (a514c0e)
- fix(types): onEdgesDelete (8e41c0d)
- chore(version): bump (c599a45)
- fix: export type OnNodesDelete and OnEdgesDelete (76ff491)
- feat(props): add onNodesDelete and onEdgesDelete handler (e011375)
- chore(version): bump (f7dd26b)
- fix(ts): dont make viewport optional for move callbacks (522780e)
- Delete dependabot.yml (3f2d606)
- fix: enhance type (d250a7d)
- chore(version): bump (6de04df)
- refactor(hooks): export key press hook (3067b72)
- refactor(props): rename paneMoveable to panOnDrag (b3b8ac9)
- update deps (7d9a0ac)
- refactor(useViewport): use shallow for selector (b1791ea)
- chore(version): bump (24593f7)
- refactor(rf): cleanup (4e97472)
- feat(nodes): add group type (8dcb875)
- removed wrong type (4ad17d8)
- refactor(wrapnode): create mouse handler util hook (578c278)
- refactor(wrapnode): pass shallow clones to handlers (588b590)
- refactor(wrapnode): get node from store in event handlers (c40a36f)
- refactor(nodes): re-init when sourcePos, targetPos or type changes (7e915ad)
- chore(version): bump (8d5231b)
- chore(examples): cleanup (1e8d578)
- refactor(changes): handle expand parent on dimension update (ee1a393)
- fix(fitview): only fit view once (1b45a3f)
- refactor(fitView): use same fitView function for viewport helper and initial prop (af52bab)
- chore(version): bump (0244c93)
- refactor(types): add NodePositionChange type (067d681)
- refactor(defaultNode/Edges): always trigger onNodesChange and onEdgesChange (0cfcf65)
- chore(version): bump (2736492)
- fix(exports): add hooks (bfea566)
- feat(hooks): add useViewport (a182458)
- chore(version): bump (2f4d1e6)
- refactor(types): drop NodeInternalsItem type (e52c5ed)
- feat(hooks): add useNodes and useEdges (08b2696)
- chore(nodes): prevent crashing when data is not set on nodes object (f95f390)
- feat(hooks): add useReactFlow hook, refactor types and properties (c2bae79)
- refactor(controls): add titles for buttons (97b5327)
- feat(general): add defaultNodes, defaultEdges and defaultEdgeOptions (634b592)
- refactor(store): cleanup (660ec00)
- chore(version): bump (3f1d186)
- Merge branch 'main' into v10 (f96391f)
- feat(attribution): add react flow attribution (0b241d2)
- chore(version): bump (d285318)
- feat(subflow): add extendParent option (eaeebdd)
- refactor(useKeyPress): check if key code is string (f01e239)
- Merge branch 'main' into v10 (7a7ddbe)
- chore(examples): use new api (a969c63)
- chore(examples): add examples (7a85bb9)
- chore(version): bump (c1e5f90)
- test(examples): use new api for test examples (8014fb0)
- fix(edges): draw connection line when there are no edges closes #1785 (ca77d0e)
- fix(selection): use start x and y when direction changes (6bbd06a)
- chore(rollup): bump (0e3ddc2)
- chore(version): bump (016d35c)
- feat(props): add connectOnClick (d8b054c)
- chore(examples): add overview, cleanup (3206d49)
- feat(nodes): connect on touch device (3b25086)
- refactor(bundle): remove d3-color via rollup alias (639aa1e)
- refactor(examples): use @types/react from lib (efbdd70)
- refactor(deps): remove unused deps (d5cffa7)
- refactor(store): use store.setState directly instead of actions (895e0bc)
- refactor(storeupdater): cleanup (1a2ac5a)
- chore(package.json): bump next version (774db77)
- chore(zoompane): remove unused code (747097f)
- refactor(general): cleanup (81585db)
- refactor(store): remove unused tree generation code (3830878)
- refactor(general): fit view in store to prevent flickering, rename onLoad => onPaneReady (88582a8)
- chore(version): bump (3a52efb)
- feat(rf): add fitViewOnInit option (266007b)
- chore(version): bump (91256c1)
- refactor(hooks): rename useNodeDimensions to useNodeBounds (427c933)
- refactor(onLoad): add new zoom pan helpers (d9c99a8)
- refactor(nodeInternals): widht and height types optional (c2644f1)
- refactor(useZoomPanHelper): add getTransform, getZoom, rename transform to getTransform closes #1746 (b5bba7d)
- feat(hooks): add useNodeDimensions (731918d)
- chore(version): bump (79a32ae)
- refactor(types): add useZoomPanHelperFunc types (5fbf3d8)
- refactor(node): mutate select value before user changes (8710130)
- chore(version): bump (2d4d31b)
- refactor(wrapNode): simplify mouse handler (14b9ec4)
- fix(child-nodes): dragging when parent is selected (2cd047b)
- fix(subflows): handle selections correctly (801d8f2)
- refactor(selection): only fire selection changes that changed (330eefe)
- refactor(actions): addSelectedElements => addSelectedNodes, addSelectedEdges (d260abe)
- feat(hooks): add useNodesState and useEdgesState (a032306)
- refactor(examples): on connect use connection type (713e7e1)
- fix(edges): updatable edge (62f1e90)
- refactor(edge-renderer): cleanup (3325563)
- refactor(edge): pass onEdgeUpdate instead of creating onConnect function (b2ac219)
- refactor(edges): cleanup edge renderer (22f7dd6)
- fix(zIndex): allow zIndex to be set to 0 explicitly (cffefe7)
- chore(markers): cleanup marker api (0f48044)
- chore(version): bump (3011efd)
- refactor(node): disconnect resize observer on unmount (5124b6b)
- chore(version): bump (ea76e55)
- refactor(store): reset on unmount (2962897)
- chore(version): bump (f775cf2)
- refactor(nodes): only observe node when not hidden (8a095df)
- chore(types): enforce defaultProps inside react flow component (9d159c1)
- refactor(subgraphs): calculate z for child nodes (7ffad77)
- feat(selection): disable pane movement when selection is dragged (004dcc6)
- feat(flow): add properties for configuring no-interaction classes (e1f864f)
- refactor(nodes-edges): rename isHidden to hidden (fe9c1f0)
- refactor(nodes): only use node internals (0974aa5)
- feat(stacking): disable auto layering, instead configure via zIndex prop (c29deca)
- refactor(nodes-z): groups start with z=2 (f0e79c6)
- refactor(types): cleanup (8a2ac1e)
- refactor(boolean-props): omit is prefix (a79e953)
- refactor(z-level): implement new stacking logic (050bb31)
- refactor(nodes): stacking order (df25cb3)
- chore(example): add debug node (b0bfefe)
- chore(release): bump next version (9057d3a)
- fix(nested): add nested nodes example, always show nodes on top while dragging or selected (1425a43)
- feat(nodes): add extent option (fdf2571)
- chore(package): bump version (fefcc44)
- refactor(store): rename nodeLookup to nodeInternals (996b1b5)
- refactor(utils): cleanup (cc7debf)
- refactor(graphView): add useOnLoadHandler (b4b1561)
- refactor(connectionline): use abs pos (50250e5)
- refactor(stlyes): use react-flow__container helper (72f1d8b)
- refactor(nodelookup): use ref for node renderer (31ad12e)
- fix(minimap): use abs pos (a3a9249)
- chore(package): bump version (1db53e8)
- Merge branch 'refactor/nested-relative' of github.com:wbkd/react-flow into refactor/nested-relative (8e97232)
- refactor(nodelookup): use as normale store item (5547b0d)
- bump next version (2bcb099)
- feat(stacking): simplify zIndex and treeLevel behaviour (1b390e1)
- wip: multiple edge renderers (79e46d9)
- refactor(nodelookup): add treelevel (7333873)
- refactor(nodes): use relative positions for children (248b563)
- refactor(wrapNode): call update dim when node is not initialized (8cd969d)
- chore(examples): add layouting with new api (65991de)
- refactor(wrapNode): call updateNodeDim when target or source pos changes (6e3ff4e)
- refactor(node): pass width and height dep to style memo (74e8605)
- chore(package.json): release 10.0.0-next.6 (3f992db)
- feat(nested-nodes): simplify nested node rendering (241f604)
- Merge branch 'nested-nodes-flat' of github.com:wbkd/react-flow into nested-nodes-flat (3e0b673)
- feat(noderenderer): convert from flat to nested format internally (5f9bc2e)
- refactor(node-renderer): do not mutate node styles (e8d2600)
- fix(hooks/keypress): check if document is defined (c42ba1f)
- feat(nested-nodes): callback for parent node size change (dc36ebf)
- feat(noderenderer): render nodes recursively (8b95cd7)
- feat(nested-nodes): recursively get children of moved node (c1d5c35)
- feat(nested-nodes): change data structure to flat array of nodes (2252ea1)
- refactor(edgerenderer): cleanup edge utils (64239fb)
- fix(nested-nodes): fix getSourceTargetNode for childNodes (b15d301)
- chore(graph-utils): rename elements to edges (b008c7b)
- Merge branch 'nested-nodes' of github.com:wbkd/react-flow into nested-nodes (8d840b5)
- feat(nodes): add helper functions to iterate over child nodes (9ad894d)
- refactor(hooks): add useVisibleNodes and useVisibleEdges (8f23321)
- refactor(nested-nodes): zIndex (450cb90)
- fix(perf): improve flattenNodes (9350884)
- feat(noderenderer): render child nodes (767fbd4)
- Merge branch 'v10' into refactor/nodes-edges-state (a0b8aa6)
- chore(examples): add old api examples (f957462)
- Merge pull request #1587 from wbkd/feat-markers (11ff5ec)
- refactor(elements): render only visible elements (1525af3)
- refactor(state): separate nodes and edges (410b129)
- feat(markers): bump next version (dc5172e)
- feat(markers): add option to control orientation of markers (b08809d)
- feat(markers): add more properties for custom markers (1b73c8f)
- feat(markers): implement more generic api for markerEnd and markerStart handling (d3b1148)
- Merge branch 'main' into v10 (eed5717)
- refactor(store): cleanup (3dc7927)
- refactor(zustand): use shallow when needed (1f41cc0)
- refactor(graphview): use one hook (3f8c252)
- refactor(state): replace redux with zustand (ee0d290)
- refactor(examples): hide old api examples (e01249a)
- refactor(elements): split into nodes and edges (32ee964)
- Refactor: add possibility to use different keys or combinations as a key code (#1554) (be3b451)