An interactive graph visualization component for Infrahub schema data. Built with React Flow, it displays nodes, profiles, templates, and their relationships in a draggable, zoomable canvas.
- Interactive graph visualization of schema relationships
- Automatic layout using Dagre algorithm
- Filter panel to show/hide schema types by namespace
- Node details panel showing attributes and relationships
- Context menus for nodes and edges
- Export graph as PNG image
- Zoom, pan, and fit-to-view controls
- Visual distinction between schema types (nodes, profiles, templates)
- Animated edges for "many" cardinality relationships
- Self-referencing relationship indicators
- State persistence to localStorage
| Type | Color | Description |
|---|---|---|
| Node | Indigo | Core schema nodes |
| Profile | Pink | Profile schemas |
| Template | Amber | Template schemas |
| Generic | Emerald | Generic schemas (rendered as inheritance) |
npm install @infrahub/schema-visualizerimport { SchemaVisualizer, type SchemaVisualizerData } from "@infrahub/schema-visualizer";
const schemaData: SchemaVisualizerData = {
nodes: [...], // Array of NodeSchema
generics: [...], // Array of GenericSchema
profiles: [...], // Array of ProfileSchema
templates: [...], // Array of TemplateSchema
};
function App() {
return (
<SchemaVisualizer
data={schemaData}
className="h-screen w-full"
/>
);
}SchemaVisualizer- Main visualization componentSchemaNode- Custom node rendererFilterPanel- Schema type filtering panelNodeDetailsPanel- Schema details side panelBottomToolbar- Zoom and layout controls
SchemaVisualizerData- Input data structureNodeSchema,ProfileSchema,TemplateSchema,GenericSchema- Schema type definitionsAttributeSchema,RelationshipSchema- Schema property definitions
schemaToFlow- Convert schema data to React Flow formatschemaToFlowFiltered- Convert with filtering supportapplyNamespaceLayout- Apply Dagre layout grouped by namespacegroupByNamespace- Group schemas by their namespacecn- Tailwind class name utility
- React 19
- @xyflow/react (React Flow) - Graph visualization
- Tailwind CSS 4 - Styling
- @dagrejs/dagre - Automatic graph layout
- @iconify-icon/react - Icons
- html-to-image - PNG export
# Install dependencies
npm install
# Run linter
npm run lint
# Build webview bundle (for VSCode extension)
npm run build:webview
# Type check
npx tsc --noEmitThis package includes a self-contained webview bundle for use in VSCode extensions:
// Import the pre-built bundle
import "@infrahub/schema-visualizer/webview";
import "@infrahub/schema-visualizer/webview/styles";Initial design by @peynadol
Apache License 2.0