XENOLITHGRAPH

Examples

Live, interactive examples — each with a framework switcher, full source, and reset. Drag nodes, pull connections, edit widgets right in the preview.

Aspirational

Showcases

MCP live (AI builds the graph)
MCP live (AI builds the graph) Start @xenolithengine/graph-mcp-server locally, click Connect, then ask Claude Desktop / Cursor to build a graph. The AI calls list_node_types → add_node → connect_pins → auto_layout. "I describe it, the editor builds it." React
Visual stepping debugger
Visual stepping debugger Run a graph one node at a time. Yellow ring = paused; green = executed; red = breakpoint. The inspector shows live inputs/outputs and per-node timing. Debug your AI workflow on the canvas — like Chrome DevTools, but for nodes. React
Time-travel scrubber
Time-travel scrubber Rewind a graph run. Drag the timeline through every step and watch the highlights replay — green = done, yellow = the step under inspection. The inspector shows that step’s inputs and outputs. React
Graph diff (PR review)
Graph diff (PR review) Two versions of a graph side by side, with structural diff highlights — green = added, red = removed, yellow = modified. Drop-in PR-review for node graphs. React
Per-node cost heatmap
Per-node cost heatmap A RAG pipeline with per-node latency badges — cool blue → hot red. Press Pulse to see metrics breathe. Drop-in observability overlay; no OSS competitor ships it. React
LLM workflow builder
LLM workflow builder Input → Prompt → Model → Output. Press Run; the chain walks in topological order, the active node glows, the completion streams into the Output. A prettier LangFlow, on Xenolith. React
Audio synth (Web Audio)
Audio synth (Web Audio) A real synth built on the graph — Oscillator → Filter → Gain → Output. Knobs are node widgets; Play wires live AudioNodes and lights the active chain. It makes sound. React
Save & restore
Save & restore The whole graph is JSON. Download / upload a .json file, and autosave to localStorage on every edit (driven by useGraphJSON). Reload the page — it comes back. React · Vue · Svelte · Solid · Angular
Image pipeline (WebGL)
Image pipeline (WebGL) A real image-filter pipeline — Source → Exposure → Saturation → Hue → Blur → Vignette → Result. Each node is a live GLSL fragment pass. Drag a slider and the result re-renders; drop your own image; download the PNG. React
Diagram edges
Diagram edges Edges as a diagramming primitive — text nodes wired with directional arrowhead markers, edge labels (pass / fail / retry), and an animated flowing dash on the main path. Toggle the flow. React
Stress test (1000s of nodes)
Stress test (1000s of nodes) Generate hundreds → thousands of WebGL nodes wired into a chain. Live FPS + node-count overlay top-right; the panel counter is driven by the reactive `useNodes()` hook. Zoom floor dropped to 5% so 10k+ nodes fit on one screen. React

Nodes

Widgets

Interaction

Events → your state
Events → your state Typed event callbacks wired to app state: a live log, selection inspector, widget values. React · Vue · Svelte · Solid · Angular
Mobile / tablet (touch demo)
Mobile / tablet (touch demo) Touch-first demo for testing pinch, two-finger pan, long-press context menu, and the drawer-mode palette on narrow viewports. Includes a fullscreen toggle. Open this URL on an iOS device or in the iOS Simulator — see docs/TESTING-ON-IOS-SIMULATOR.md. JS
Properties sidebar
Properties sidebar A "fat" node with 8 widgets opts into the docked properties panel via the per-widget `showInSidebar: true` flag. Edit live — the same widget renders inline AND in the panel; no separate sidebar component to author. Themed via --xeno-*. Open programmatically: `editor.openSidebar(nodeId)`. JS · React · Vue · Svelte · Solid · Angular
Two-way data binding
Two-way data binding Both binding levels in one: `useSelection()` edits the selected node’s widgets; `useGraphJSON()` binds the whole graph ⇄ JSON. No manual event wiring. React
Type conversions
Type conversions Typed pins of different types refuse to connect — unless you register a conversion. NumberSource (out: number) won’t wire into TextSink (in: text) until `types.registerConversion("number", "text", String)` is called. Toggle the cast live; the existing edge drops when it disappears. JS · React
Subgraph breadcrumb
Subgraph breadcrumb Nested template instances (Pipeline → Stage → primitives). Dive in by double-click OR programmatically; the breadcrumb in the top-left tracks the path (Root › Pipeline › Stage) and pops any segment. Auto-themed via --xeno-*. Opt-out with `editor.setBreadcrumbVisible(false)`. JS · React
Palette sidebar (drag to spawn)
Palette sidebar (drag to spawn) 16 schemas across 5 categories (data / math / transform / logic / io) listed in a docked palette on the left. Drag any tile onto the canvas — the editor inserts the node at the drop point via its built-in `node:drop` handler. Configure with `editor.setPaletteSidebar({ side, filter })`. JS · React · Vue · Svelte · Solid · Angular
Connection validation
Connection validation Typed Blueprint pins refuse mismatched wires automatically (a string won’t plug into a number). A custom guard adds cycle prevention on top. Every attempt is logged live. React
Export to image
Export to image Export the whole graph — not just the viewport — to a Blob at any scale. Download PNG, retina 2×, or JPG straight from a panel. React

Styling

Viewport

Layout