Cytoscape graphs with React components as nodes.
cytoscape-react renders React node content into a DOM overlay managed by
cytoscape-dom-node, while
Cytoscape keeps ownership of graph layout, edges, selection, zooming, and
panning.
For a full working demo, see codepen qBmbVPg.
v5 is a conversion to typescript, which SHOULD be backwards compatible. v4 is the latest pre typescript incarnation.
- Cytoscape
^3.19.0 - cytoscape-dom-node
^2.1.0 - React
^17.0.2 || ^18.0.0 || ^19.0.0 - React DOM
^17.0.2 || ^18.0.0 || ^19.0.0
npm install cytoscape-react cytoscape cytoscape-dom-node react react-domImport the package CSS once in your app:
import "cytoscape-react/index.css";import { Edge, Graph, Node } from "cytoscape-react";
function MyGraph() {
return (
<Graph layoutParams={{ name: "cose" }}>
<Node id="foo">
<strong>Foo</strong>
</Node>
<Node id="bar">
<label>
Bar label
<input defaultValue="editable" />
</label>
</Node>
<Edge id="foo-bar" source="foo" target="bar" />
</Graph>
);
}Graph, Node, and Edge remain named exports.
Graph owns the Cytoscape core instance and injects it into child nodes and
edges.
Useful props:
cyParams: additional Cytoscape constructor options.containeris supplied byGraph.domNodeOptions: options forwarded tocy.domNode().domContaineris supplied byGraph.layoutParams: Cytoscape layout options, defaulting to{ name: "cose" }.layoutDebounce: debounce delay for layout requests, defaulting to100.onReady: callback receiving the Cytoscape core and DOM-node renderer.
Node creates a Cytoscape node whose data.dom points at the rendered React
element.
Useful props:
id: Cytoscape node id.classes: string or string array of Cytoscape classes.data: extra Cytoscape data fields.positionorrenderedPosition: initial position.selected,locked,grabbable,selectable: initial Cytoscape state.
Edge creates a Cytoscape edge once both endpoint nodes exist. If either
endpoint is removed, the edge is removed too.
Useful props:
id: Cytoscape edge id.source: source node id.target: target node id.classes: string or string array of Cytoscape classes.data: extra Cytoscape data fields.
The v4 component names and core props are preserved:
Graph,Node,EdgecyParamslayoutParamslayoutDebounceclasses- injected child props:
cytoInstanceandlayout
Runtime prop-types were removed because the package is now authored in
TypeScript and publishes declaration files.
npm run lint
npm run typecheck
npm run test
npm run test:coverage
npm run build
npm run docs
npm run check