ReactFlow Architect
Overview
This skill packages the upstream react-flow-architect workflow from sickn33/antigravity-awesome-skills into an operator-ready Omni Skills format without hiding its origin.
Use it when you need to design or improve a serious React Flow application rather than a demo: large diagrams, custom nodes and edges, synchronized side panels, hierarchical drill-down, persistence, and interaction performance that must hold up under real usage.
The skill preserves the upstream intent while adding execution guidance for:
- controlled graph state and clear data boundaries
- hierarchical navigation with explicit parent/group semantics
- performance work driven by profiling, not guesswork
- viewport and layout timing stability
- persistence, versioning, and migration safety
- troubleshooting common production failures
Open the local support files when you need a compact implementation checklist or a realistic worked example:
references/reactflow-production-notes.md
examples/worked-example.md
When to Use This Skill
Use this skill when the request is primarily about building, refactoring, or debugging a React Flow editor with production concerns.
Typical triggers:
- the user needs a graph editor with custom nodes, custom edges, panels, forms, or persistence
- the graph must support hierarchy, grouping, parent/child navigation, or drill-down behavior
- performance is degrading as node count, custom rendering, or side-panel logic grows
- graph edits must synchronize reliably across canvas, inspector, outline, or toolbar
- save/restore, autosave, import/export, or schema migration matters
- the operator needs to preserve upstream workflow intent and provenance while still delivering concrete implementation help
Do not use this skill as the primary router when:
- the task is generic React UI work with no meaningful React Flow architecture
- the user only needs a toy demo and does not need production state, persistence, or performance guidance
- the main problem is backend API design, auth, or infrastructure rather than the graph editor itself
Operating Table
| Situation |
Start here |
Why it matters |
| Simple prototype with limited interactions |
useNodesState / useEdgesState style controlled flow |
Fastest safe path when the editor is small and local state is enough |
| Medium editor with custom panels and save/restore |
This SKILL.md workflow |
Helps define schema, state boundaries, persistence, and performance checkpoints before coding deeper features |
| Multi-panel, persistent, collaborative, or undo/redo-heavy editor |
Controlled React Flow plus an external store with selector-based subscriptions |
Reduces duplicated state and gives one mutation path for canvas, forms, and persistence |
| Hierarchical editor |
### Hierarchical Tree Navigation and examples/worked-example.md |
Prevents relying on visual nesting alone and gives a concrete synchronized tree + canvas pattern |
| Re-render or drag-performance issues |
### Performance Optimization and references/reactflow-production-notes.md |
Provides a profile-first checklist for memoization, selectors, stable props, and hidden subtrees |
Viewport, fitView, or layout instability |
## Troubleshooting and references/reactflow-production-notes.md |
Helps diagnose container sizing, async layout timing, and repeated viewport updates |
| Save/restore or import compatibility work |
## Workflow step 6 and examples/worked-example.md |
Keeps canonical graph data versioned and separates persisted data from transient UI state |
| Reviewer needs provenance and architecture rationale |
This file plus upstream provenance files |
Preserves source identity while making the implementation path auditable |
Workflow
Confirm the graph product shape
- Identify whether the user needs a freeform graph, hierarchical process map, nested editor, or drill-down explorer.
- Confirm expected scale: rough node count, edge count, custom-node complexity, and whether multiple panels read/write graph state.
- Decide whether hierarchy is semantic, visual, or both.
Design the graph contract before coding interactions
- Define node types, edge types, required data fields, and stable id rules.
- Decide which fields are canonical and persisted versus UI-only and recomputed.
- Keep ids stable across editing, layout recomputation, save/restore, and imports.
- Do not generate ids during render.
Choose the smallest state model that will survive expected complexity
- For prototypes and isolated editors, controlled hooks may be enough.
- For editors with sidebars, toolbars, undo/redo, autosave, or synchronized navigation, use a central store with selector-based subscriptions.
- Keep one source of truth for nodes and edges. Do not mirror the same graph truth across local component state, form state, and canvas state.
Define hierarchy explicitly
- Use parent/group metadata or equivalent explicit relationships.
- Do not infer hierarchy from x/y position alone.
- Pair the canvas with a synchronized outline or tree for keyboard-first navigation and context retention.
- Keep selection, focus, and expand/collapse semantics synchronized between the tree and the canvas.
Build incrementally and keep render identity stable
- Keep
nodeTypes and edgeTypes stable by defining them outside render or memoizing them.
- Memoize expensive custom nodes, edges, toolbars, and panels.
- Memoize handlers passed into React Flow when unstable callbacks are causing churn.
- Add one interaction path at a time: selection, editing, expand/collapse, persistence, then layout refinements.
Separate persistence from transient UI state
- Persist canonical graph data, viewport only if needed, and a schema version.
- Avoid persisting temporary hover state, drag state, ephemeral panel visibility, or computed caches unless there is a clear product requirement.
- Validate imported payloads before loading them.
- Add migration logic before accepting old saved diagrams.
Stabilize viewport lifecycle
- Ensure the React Flow container has real dimensions before calling
fitView.
- Load nodes and edges, then complete any async layout or measurement work, then update the viewport.
- If the editor is inside resizable panes, tabs, or accordions, re-run viewport logic only when the container and layout are ready.
- Avoid calling viewport updates on every render or inside tight loops.
Profile before optimizing
- Use React DevTools Profiler or equivalent observation to identify which interactions re-render too much.
- Focus first on node drag, selection, panel edits, expand/collapse, and autosave triggers.
- Apply memoization, selectors, or subtree hiding only where you can point to an actual hotspot.
Validate the finished architecture
- Dragging a node should not force unrelated side panels or all custom nodes to re-render.
- Save/restore should preserve ids, hierarchy relationships, and expected viewport behavior.
- Keyboard users should be able to navigate hierarchy through the companion tree or outline.
- The graph should still behave correctly after reload, import, collapse/expand, and schema migration.
Hierarchical Tree Navigation
Use a combined pattern instead of treating the canvas as the whole hierarchy UI:
- Canvas: spatial editing and visual relationships
- Outline/tree: keyboard-friendly structure and quick navigation
- Breadcrumbs: current context when drilling into a subtree or grouped region
- Zoom-to-selection / reveal action: fast synchronization from outline to canvas
Recommended behaviors:
- selecting an item in the tree highlights or centers the corresponding node in the canvas
- selecting a node in the canvas updates the tree selection
- collapsing a branch updates both the outline state and the canvas visibility state
- parent context remains visible through breadcrumbs or an always-available outline path
- keyboard navigation works in the tree even if the canvas itself is not a full hierarchy control
Accessibility guardrails:
- do not imply the canvas alone satisfies hierarchical navigation needs
- provide visible focus treatment in the tree/outline
- expose expanded/collapsed state through proper semantics
- keep selection synchronization predictable and reversible
Node Schema
Define node and hierarchy structure explicitly.
Minimum schema guidance:
id: stable, persisted, unique across the graph
type: renderer contract
position: canvas placement or layout result
data: business payload needed by the custom node
- hierarchy metadata such as
parentId, group membership, or equivalent explicit relationship fields
- optional UI flags such as
collapsed or hidden, if your app intentionally controls subtree visibility
Recommended separation:
- Persisted: ids, labels, domain payload, hierarchy metadata, canonical positions if user-authored, saved viewport if product-required, schema version
- Transient/UI-only: hover, in-progress drag state, active resize handles, temporary inspector tabs, optimistic flags, derived search matches, computed layout caches
Guardrails:
- do not derive true parentage only from screen coordinates
- do not change ids as part of relayout or expand/collapse
- keep hierarchy metadata compatible with save/restore and import/export
Incremental Node Building
Build custom nodes in layers:
- static rendering with typed
data
- selection and hover behavior
- inline editing or inspector synchronization
- parent/child grouping semantics
- collapse/expand behavior
- persistence and migration coverage
- performance hardening for the expensive pieces only
This order reduces debugging ambiguity. If you add layout logic, persistence, and rich inline editing all at once, identity and render bugs become much harder to isolate.
Performance Optimization
Use a profile-first checklist.
Stabilize render inputs
- keep
nodeTypes and edgeTypes stable
- avoid inline object and function creation when those props flow into many nodes
- memoize expensive custom nodes, edges, inspectors, and toolbars
Reduce broad subscriptions
- subscribe panels and widgets to the smallest state slice they need
- avoid components reading the entire nodes or edges array unless they genuinely need it
- prefer selector-based subscriptions for counts, selected ids, branch state, or a single node record
Control hierarchy cost
- collapse or hide off-focus branches in large graphs
- avoid expensive relayout of the entire graph for a local change when a branch-level update is enough
- apply
fitView after subtree changes only when necessary
Centralize mutation paths
- update nodes and edges through a small set of actions
- keep immutable updates predictable so React Flow and side panels observe the same changes
- structure this now if undo/redo or auditability is likely
Verify with evidence
- compare before/after profiling for drag, selection, and expand/collapse
- keep optimization changes that fix observed hotspots
- remove speculative complexity that does not change measured behavior
Troubleshooting
Dragging one node makes the whole canvas feel slow
Check for:
- non-memoized custom nodes or edges
- unstable
nodeTypes / edgeTypes
- inline callbacks recreated every render
- panels subscribing to the entire graph state
- expensive derived computations running on each drag frame
Fix path:
- profile the drag interaction
- memoize custom node/edge components that are actually expensive
- stabilize handler identity where it affects many children
- move broad subscribers to narrow selectors
- hide or collapse irrelevant subtrees if scale is the real issue
Sidebar edits only appear after another interaction
Check for:
- duplicated graph truth in local state and store state
- stale selectors or stale closures
- mutation-in-place instead of immutable updates
- inspector forms writing to a shadow copy that never updates the canonical graph
Fix path:
- choose one source of truth for nodes/edges
- route edits through shared mutation actions
- verify the canvas and inspector subscribe to the same canonical record
Child nodes appear detached or hierarchy navigation loses context
Check for:
- missing or inconsistent parent/group metadata
- hierarchy inferred only from position
- tree selection and canvas selection using different ids or different sources of truth
- collapse state stored separately in unsynchronized places
Fix path:
- normalize hierarchy metadata
- make expand/collapse and selection state explicit
- keep tree, breadcrumbs, and canvas synchronized from shared state
fitView zooms incorrectly, jumps, or does nothing useful
Check for:
- zero-height or hidden containers
- calling viewport logic before nodes are loaded or measured
- graph inside tabs, accordions, or resizable panes without container observation
- repeated viewport updates fighting each other
Fix path:
- verify the container has settled dimensions
- wait for graph data and layout work to complete
- call viewport updates once per meaningful transition
- if needed, observe container size changes and re-run at controlled times
See references/reactflow-production-notes.md for a compact timing checklist.
Saved flows reload with missing nodes, wrong positions, or broken edges
Check for:
- schema version mismatch
- id collisions or regenerated ids
- saved payload missing hierarchy metadata or required node data
- transient layout/cache fields treated as canonical data
- migration not applied before load
Fix path:
- version the saved graph object
- validate payload shape before import
- migrate old payloads explicitly
- recompute transient caches after load instead of persisting them blindly
Additional Resources
Local operator aids:
references/reactflow-production-notes.md — compact production checklist, state decision matrix, failure signatures, and viewport/persistence notes
examples/worked-example.md — concrete hierarchical editor example with state boundaries, tree synchronization, save/restore payload, and a targeted performance fix
Primary documentation:
- React Flow docs:
https://reactflow.dev/
- React Flow performance:
https://reactflow.dev/learn/advanced-use/performance
- React Flow state management:
https://reactflow.dev/learn/advanced-use/state-management
- React Flow sub-flows / grouping:
https://reactflow.dev/learn/layouting/sub-flows
- React Flow save and restore:
https://reactflow.dev/learn/advanced-use/save-and-restore
- React Flow instance API:
https://reactflow.dev/api-reference/types/react-flow-instance
- React
memo: https://react.dev/reference/react/memo
- React
useCallback: https://react.dev/reference/react/useCallback
- React
useMemo: https://react.dev/reference/react/useMemo
- MDN
ResizeObserver: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver
- WAI-ARIA tree view pattern:
https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
If you choose an external store, treat Zustand or similar libraries as implementation options, not mandatory dependencies.
Related Skills
Use a related skill instead when the task shifts away from React Flow architecture itself, for example:
- generic React component design without graph-editor concerns
- data-modeling or backend API work that only indirectly supports the editor
- pure accessibility remediation outside the graph-navigation pattern
- pure performance profiling work not centered on React Flow state and rendering
When in doubt, keep this skill as the primary router only if React Flow architecture, hierarchy, persistence, or graph-editor behavior remains the core problem.
1---2name: react-flow-architect-23description: ReactFlow Architect workflow skill. Use this skill when the user needs to build production-ready React Flow applications with hierarchical navigation, performance optimization, and advanced state management, and the operator should use the packaged workflow, support files, troubleshooting notes, and provenance links before merging or handing off.4---56# ReactFlow Architect78## Overview910This skill packages the upstream `react-flow-architect` workflow from `sickn33/antigravity-awesome-skills` into an operator-ready Omni Skills format without hiding its origin.1112Use it when you need to design or improve a serious React Flow application rather than a demo: large diagrams, custom nodes and edges, synchronized side panels, hierarchical drill-down, persistence, and interaction performance that must hold up under real usage.1314The skill preserves the upstream intent while adding execution guidance for:1516- controlled graph state and clear data boundaries17- hierarchical navigation with explicit parent/group semantics18- performance work driven by profiling, not guesswork19- viewport and layout timing stability20- persistence, versioning, and migration safety21- troubleshooting common production failures2223Open the local support files when you need a compact implementation checklist or a realistic worked example:2425- `references/reactflow-production-notes.md`26- `examples/worked-example.md`2728## When to Use This Skill2930Use this skill when the request is primarily about building, refactoring, or debugging a React Flow editor with production concerns.3132Typical triggers:3334- the user needs a graph editor with custom nodes, custom edges, panels, forms, or persistence35- the graph must support hierarchy, grouping, parent/child navigation, or drill-down behavior36- performance is degrading as node count, custom rendering, or side-panel logic grows37- graph edits must synchronize reliably across canvas, inspector, outline, or toolbar38- save/restore, autosave, import/export, or schema migration matters39- the operator needs to preserve upstream workflow intent and provenance while still delivering concrete implementation help4041Do not use this skill as the primary router when:4243- the task is generic React UI work with no meaningful React Flow architecture44- the user only needs a toy demo and does not need production state, persistence, or performance guidance45- the main problem is backend API design, auth, or infrastructure rather than the graph editor itself4647## Operating Table4849| Situation | Start here | Why it matters |50| --- | --- | --- |51| Simple prototype with limited interactions | `useNodesState` / `useEdgesState` style controlled flow | Fastest safe path when the editor is small and local state is enough |52| Medium editor with custom panels and save/restore | This `SKILL.md` workflow | Helps define schema, state boundaries, persistence, and performance checkpoints before coding deeper features |53| Multi-panel, persistent, collaborative, or undo/redo-heavy editor | Controlled React Flow plus an external store with selector-based subscriptions | Reduces duplicated state and gives one mutation path for canvas, forms, and persistence |54| Hierarchical editor | `### Hierarchical Tree Navigation` and `examples/worked-example.md` | Prevents relying on visual nesting alone and gives a concrete synchronized tree + canvas pattern |55| Re-render or drag-performance issues | `### Performance Optimization` and `references/reactflow-production-notes.md` | Provides a profile-first checklist for memoization, selectors, stable props, and hidden subtrees |56| Viewport, `fitView`, or layout instability | `## Troubleshooting` and `references/reactflow-production-notes.md` | Helps diagnose container sizing, async layout timing, and repeated viewport updates |57| Save/restore or import compatibility work | `## Workflow` step 6 and `examples/worked-example.md` | Keeps canonical graph data versioned and separates persisted data from transient UI state |58| Reviewer needs provenance and architecture rationale | This file plus upstream provenance files | Preserves source identity while making the implementation path auditable |5960## Workflow61621. **Confirm the graph product shape**63 - Identify whether the user needs a freeform graph, hierarchical process map, nested editor, or drill-down explorer.64 - Confirm expected scale: rough node count, edge count, custom-node complexity, and whether multiple panels read/write graph state.65 - Decide whether hierarchy is semantic, visual, or both.66672. **Design the graph contract before coding interactions**68 - Define node types, edge types, required data fields, and stable id rules.69 - Decide which fields are canonical and persisted versus UI-only and recomputed.70 - Keep ids stable across editing, layout recomputation, save/restore, and imports.71 - Do not generate ids during render.72733. **Choose the smallest state model that will survive expected complexity**74 - For prototypes and isolated editors, controlled hooks may be enough.75 - For editors with sidebars, toolbars, undo/redo, autosave, or synchronized navigation, use a central store with selector-based subscriptions.76 - Keep one source of truth for nodes and edges. Do not mirror the same graph truth across local component state, form state, and canvas state.77784. **Define hierarchy explicitly**79 - Use parent/group metadata or equivalent explicit relationships.80 - Do not infer hierarchy from x/y position alone.81 - Pair the canvas with a synchronized outline or tree for keyboard-first navigation and context retention.82 - Keep selection, focus, and expand/collapse semantics synchronized between the tree and the canvas.83845. **Build incrementally and keep render identity stable**85 - Keep `nodeTypes` and `edgeTypes` stable by defining them outside render or memoizing them.86 - Memoize expensive custom nodes, edges, toolbars, and panels.87 - Memoize handlers passed into React Flow when unstable callbacks are causing churn.88 - Add one interaction path at a time: selection, editing, expand/collapse, persistence, then layout refinements.89906. **Separate persistence from transient UI state**91 - Persist canonical graph data, viewport only if needed, and a schema version.92 - Avoid persisting temporary hover state, drag state, ephemeral panel visibility, or computed caches unless there is a clear product requirement.93 - Validate imported payloads before loading them.94 - Add migration logic before accepting old saved diagrams.95967. **Stabilize viewport lifecycle**97 - Ensure the React Flow container has real dimensions before calling `fitView`.98 - Load nodes and edges, then complete any async layout or measurement work, then update the viewport.99 - If the editor is inside resizable panes, tabs, or accordions, re-run viewport logic only when the container and layout are ready.100 - Avoid calling viewport updates on every render or inside tight loops.1011028. **Profile before optimizing**103 - Use React DevTools Profiler or equivalent observation to identify which interactions re-render too much.104 - Focus first on node drag, selection, panel edits, expand/collapse, and autosave triggers.105 - Apply memoization, selectors, or subtree hiding only where you can point to an actual hotspot.1061079. **Validate the finished architecture**108 - Dragging a node should not force unrelated side panels or all custom nodes to re-render.109 - Save/restore should preserve ids, hierarchy relationships, and expected viewport behavior.110 - Keyboard users should be able to navigate hierarchy through the companion tree or outline.111 - The graph should still behave correctly after reload, import, collapse/expand, and schema migration.112113### Hierarchical Tree Navigation114115Use a combined pattern instead of treating the canvas as the whole hierarchy UI:116117- **Canvas:** spatial editing and visual relationships118- **Outline/tree:** keyboard-friendly structure and quick navigation119- **Breadcrumbs:** current context when drilling into a subtree or grouped region120- **Zoom-to-selection / reveal action:** fast synchronization from outline to canvas121122Recommended behaviors:123124- selecting an item in the tree highlights or centers the corresponding node in the canvas125- selecting a node in the canvas updates the tree selection126- collapsing a branch updates both the outline state and the canvas visibility state127- parent context remains visible through breadcrumbs or an always-available outline path128- keyboard navigation works in the tree even if the canvas itself is not a full hierarchy control129130Accessibility guardrails:131132- do not imply the canvas alone satisfies hierarchical navigation needs133- provide visible focus treatment in the tree/outline134- expose expanded/collapsed state through proper semantics135- keep selection synchronization predictable and reversible136137#### Node Schema138139Define node and hierarchy structure explicitly.140141Minimum schema guidance:142143- `id`: stable, persisted, unique across the graph144- `type`: renderer contract145- `position`: canvas placement or layout result146- `data`: business payload needed by the custom node147- hierarchy metadata such as `parentId`, group membership, or equivalent explicit relationship fields148- optional UI flags such as `collapsed` or `hidden`, if your app intentionally controls subtree visibility149150Recommended separation:151152- **Persisted:** ids, labels, domain payload, hierarchy metadata, canonical positions if user-authored, saved viewport if product-required, schema version153- **Transient/UI-only:** hover, in-progress drag state, active resize handles, temporary inspector tabs, optimistic flags, derived search matches, computed layout caches154155Guardrails:156157- do not derive true parentage only from screen coordinates158- do not change ids as part of relayout or expand/collapse159- keep hierarchy metadata compatible with save/restore and import/export160161#### Incremental Node Building162163Build custom nodes in layers:1641651. static rendering with typed `data`1662. selection and hover behavior1673. inline editing or inspector synchronization1684. parent/child grouping semantics1695. collapse/expand behavior1706. persistence and migration coverage1717. performance hardening for the expensive pieces only172173This order reduces debugging ambiguity. If you add layout logic, persistence, and rich inline editing all at once, identity and render bugs become much harder to isolate.174175### Performance Optimization176177Use a profile-first checklist.178179**Stabilize render inputs**180181- keep `nodeTypes` and `edgeTypes` stable182- avoid inline object and function creation when those props flow into many nodes183- memoize expensive custom nodes, edges, inspectors, and toolbars184185**Reduce broad subscriptions**186187- subscribe panels and widgets to the smallest state slice they need188- avoid components reading the entire nodes or edges array unless they genuinely need it189- prefer selector-based subscriptions for counts, selected ids, branch state, or a single node record190191**Control hierarchy cost**192193- collapse or hide off-focus branches in large graphs194- avoid expensive relayout of the entire graph for a local change when a branch-level update is enough195- apply `fitView` after subtree changes only when necessary196197**Centralize mutation paths**198199- update nodes and edges through a small set of actions200- keep immutable updates predictable so React Flow and side panels observe the same changes201- structure this now if undo/redo or auditability is likely202203**Verify with evidence**204205- compare before/after profiling for drag, selection, and expand/collapse206- keep optimization changes that fix observed hotspots207- remove speculative complexity that does not change measured behavior208209## Troubleshooting210211### Dragging one node makes the whole canvas feel slow212213Check for:214215- non-memoized custom nodes or edges216- unstable `nodeTypes` / `edgeTypes`217- inline callbacks recreated every render218- panels subscribing to the entire graph state219- expensive derived computations running on each drag frame220221Fix path:2222231. profile the drag interaction2242. memoize custom node/edge components that are actually expensive2253. stabilize handler identity where it affects many children2264. move broad subscribers to narrow selectors2275. hide or collapse irrelevant subtrees if scale is the real issue228229### Sidebar edits only appear after another interaction230231Check for:232233- duplicated graph truth in local state and store state234- stale selectors or stale closures235- mutation-in-place instead of immutable updates236- inspector forms writing to a shadow copy that never updates the canonical graph237238Fix path:239240- choose one source of truth for nodes/edges241- route edits through shared mutation actions242- verify the canvas and inspector subscribe to the same canonical record243244### Child nodes appear detached or hierarchy navigation loses context245246Check for:247248- missing or inconsistent parent/group metadata249- hierarchy inferred only from position250- tree selection and canvas selection using different ids or different sources of truth251- collapse state stored separately in unsynchronized places252253Fix path:254255- normalize hierarchy metadata256- make expand/collapse and selection state explicit257- keep tree, breadcrumbs, and canvas synchronized from shared state258259### `fitView` zooms incorrectly, jumps, or does nothing useful260261Check for:262263- zero-height or hidden containers264- calling viewport logic before nodes are loaded or measured265- graph inside tabs, accordions, or resizable panes without container observation266- repeated viewport updates fighting each other267268Fix path:2692701. verify the container has settled dimensions2712. wait for graph data and layout work to complete2723. call viewport updates once per meaningful transition2734. if needed, observe container size changes and re-run at controlled times274275See `references/reactflow-production-notes.md` for a compact timing checklist.276277### Saved flows reload with missing nodes, wrong positions, or broken edges278279Check for:280281- schema version mismatch282- id collisions or regenerated ids283- saved payload missing hierarchy metadata or required node data284- transient layout/cache fields treated as canonical data285- migration not applied before load286287Fix path:288289- version the saved graph object290- validate payload shape before import291- migrate old payloads explicitly292- recompute transient caches after load instead of persisting them blindly293294## Additional Resources295296Local operator aids:297298- `references/reactflow-production-notes.md` — compact production checklist, state decision matrix, failure signatures, and viewport/persistence notes299- `examples/worked-example.md` — concrete hierarchical editor example with state boundaries, tree synchronization, save/restore payload, and a targeted performance fix300301Primary documentation:302303- React Flow docs: `https://reactflow.dev/`304- React Flow performance: `https://reactflow.dev/learn/advanced-use/performance`305- React Flow state management: `https://reactflow.dev/learn/advanced-use/state-management`306- React Flow sub-flows / grouping: `https://reactflow.dev/learn/layouting/sub-flows`307- React Flow save and restore: `https://reactflow.dev/learn/advanced-use/save-and-restore`308- React Flow instance API: `https://reactflow.dev/api-reference/types/react-flow-instance`309- React `memo`: `https://react.dev/reference/react/memo`310- React `useCallback`: `https://react.dev/reference/react/useCallback`311- React `useMemo`: `https://react.dev/reference/react/useMemo`312- MDN `ResizeObserver`: `https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver`313- WAI-ARIA tree view pattern: `https://www.w3.org/WAI/ARIA/apg/patterns/treeview/`314315If you choose an external store, treat Zustand or similar libraries as implementation options, not mandatory dependencies.316317## Related Skills318319Use a related skill instead when the task shifts away from React Flow architecture itself, for example:320321- generic React component design without graph-editor concerns322- data-modeling or backend API work that only indirectly supports the editor323- pure accessibility remediation outside the graph-navigation pattern324- pure performance profiling work not centered on React Flow state and rendering325326When in doubt, keep this skill as the primary router only if React Flow architecture, hierarchy, persistence, or graph-editor behavior remains the core problem.