Skip to content

Web Component API ​

Complete reference for using <graphty-element> declaratively via HTML attributes and properties.

Overview ​

The <graphty-element> Web Component provides a declarative way to add graph visualizations to your page using HTML attributes and element properties.

When to use the Web Component API:

  • Declarative HTML-based configuration
  • Framework integration (React, Vue, Angular, Svelte)
  • Simple graphs configured via attributes
  • Reactive property binding

When to use the JavaScript API instead:

  • Programmatic graph manipulation (add/remove nodes dynamically)
  • Running graph algorithms
  • Camera control and animation
  • Advanced styling with style layers
  • Screenshot and video capture

Properties and Attributes ​

All configuration is done through HTML attributes or their corresponding JavaScript properties:

PropertyAttributeTypeDefaultDescription
nodeDatanode-dataArray<object>[]Array of node objects
edgeDataedge-dataArray<object>[]Array of edge objects
layoutlayoutstring'ngraph'Layout algorithm name
layoutConfiglayout-configobject{}Layout algorithm options
styleTemplatestyle-templatestringundefinedBuilt-in style template
viewModeview-mode'2d' | '3d' | 'vr' | 'ar''3d'Rendering mode
dataSourcedata-sourcestringundefinedData source type
dataSourceConfigdata-source-configobject{}Data source configuration
nodeIdPathnode-id-pathstring'id'Path to node ID in data
edgeSrcIdPathedge-src-id-pathstring'source'Path to source ID in edge data
edgeDstIdPathedge-dst-id-pathstring'target'Path to target ID in edge data
debugdebugbooleanfalseEnable debug overlay

Read-only Properties ​

PropertyTypeDescription
graphGraphThe underlying Graph instance for advanced operations
stylesStylesAccess to the style manager

Methods ​

The Web Component exposes many methods directly. See Direct Methods below for the complete list.

Basic Usage ​

Minimal Example ​

html
<graphty-element
    node-data='[{"id": "a"}, {"id": "b"}, {"id": "c"}]'
    edge-data='[{"source": "a", "target": "b"}, {"source": "b", "target": "c"}]'
>
</graphty-element>

With Layout and Styling ​

html
<graphty-element
    layout="circular"
    style-template="dark"
    node-data='[{"id": "a"}, {"id": "b"}, {"id": "c"}]'
    edge-data='[{"source": "a", "target": "b"}, {"source": "b", "target": "c"}]'
>
</graphty-element>

Data Format ​

Node Data ​

Each node object must have an id property. Additional properties are available for styling:

html
<graphty-element
    node-data='[
  {"id": "node1", "label": "First Node", "category": "type-a"},
  {"id": "node2", "label": "Second Node", "category": "type-b"},
  {"id": "node3", "label": "Third Node", "size": 2.0}
]'
></graphty-element>

Common node properties:

  • id (required) - Unique identifier
  • label - Display text
  • category / type / group - For style selectors
  • size - Node size multiplier
  • color - Node color (hex or named)

Edge Data ​

Each edge object must have source and target properties referencing node IDs:

html
<graphty-element
    edge-data='[
  {"source": "node1", "target": "node2"},
  {"source": "node2", "target": "node3", "weight": 1.5},
  {"source": "node3", "target": "node1", "label": "connects"}
]'
></graphty-element>

Common edge properties:

  • source (required) - Source node ID
  • target (required) - Target node ID
  • weight - Edge weight for layouts
  • label - Display text
  • type / category - For style selectors

Attribute vs Property ​

Attributes (HTML strings) ​

Set via HTML markup or setAttribute(). Always strings, require JSON serialization for objects:

html
<graphty-element layout="ngraph" node-data='[{"id": "a"}, {"id": "b"}]'> </graphty-element>
javascript
element.setAttribute("node-data", JSON.stringify(nodes));
element.setAttribute("layout", "circular");

Properties (JavaScript values) ​

Set via JavaScript. Typed values, no JSON serialization needed:

javascript
const element = document.querySelector("graphty-element");

element.nodeData = [{ id: "a" }, { id: "b" }];
element.edgeData = [{ source: "a", target: "b" }];
element.layout = "circular";
element.viewMode = "2d";

Properties are preferred when working with JavaScript as they:

  • Avoid JSON serialization overhead
  • Preserve object types
  • Enable reactive updates

Layout Algorithms ​

Set the layout algorithm via the layout attribute:

html
<graphty-element layout="ngraph"></graphty-element>
<graphty-element layout="circular"></graphty-element>
<graphty-element layout="hierarchical"></graphty-element>
<graphty-element layout="grid"></graphty-element>
<graphty-element layout="random"></graphty-element>

Available layouts:

  • ngraph - Force-directed (default, 2D/3D)
  • d3-force - D3's force simulation (2D)
  • circular - Nodes arranged in a circle
  • hierarchical - Tree-like structure
  • grid - Regular grid pattern
  • random - Random positions

Configure layout options:

html
<graphty-element layout="ngraph" layout-config='{"springLength": 100, "gravity": -1.2}'> </graphty-element>
javascript
element.layoutConfig = {
    springLength: 100,
    springCoefficient: 0.0008,
    gravity: -1.2,
};

Style Templates ​

Apply built-in style templates:

html
<graphty-element style-template="dark"></graphty-element> <graphty-element style-template="light"></graphty-element>

View Modes ​

Switch between rendering modes:

html
<graphty-element view-mode="3d"></graphty-element> <graphty-element view-mode="2d"></graphty-element>
javascript
element.viewMode = "3d";
element.viewMode = "2d";

For VR/AR modes, see the VR/AR Guide.

CSS Styling ​

The component must have dimensions to render. Set via CSS:

css
graphty-element {
    display: block;
    width: 100%;
    height: 500px;
}

Or inline styles:

html
<graphty-element style="display: block; width: 800px; height: 600px;"> </graphty-element>

Events ​

Listen to graph events via standard DOM event handling:

javascript
const element = document.querySelector("graphty-element");

element.addEventListener("graph-settled", (e) => {
    console.log("Layout complete");
});

element.addEventListener("node-click", (e) => {
    console.log("Clicked node:", e.detail.node.id);
});

element.addEventListener("data-loaded", (e) => {
    console.log(`Loaded ${e.detail.nodeCount} nodes`);
});

Common events:

  • graph-settled - Layout has stabilized
  • data-loaded - Data loading complete
  • node-click - Node was clicked
  • node-hover - Mouse entered a node
  • selection-changed - Selected node changed

See Events for the complete event reference.

Framework Integration ​

React ​

tsx
function GraphComponent({ nodes, edges, layout = "ngraph" }) {
    return (
        <graphty-element
            node-data={JSON.stringify(nodes)}
            edge-data={JSON.stringify(edges)}
            layout={layout}
            style={{ width: "100%", height: "500px", display: "block" }}
        />
    );
}

Vue ​

vue
<template>
    <graphty-element
        :node-data="JSON.stringify(nodes)"
        :edge-data="JSON.stringify(edges)"
        :layout="layout"
        style="display: block; width: 100%; height: 500px;"
    />
</template>

Angular ​

typescript
@Component({
    template: `
        <graphty-element [attr.node-data]="nodesJson" [attr.edge-data]="edgesJson" [attr.layout]="layout">
        </graphty-element>
    `,
})
export class GraphComponent {
    nodes = [{ id: "a" }, { id: "b" }];
    edges = [{ source: "a", target: "b" }];
    layout = "ngraph";

    get nodesJson() {
        return JSON.stringify(this.nodes);
    }
    get edgesJson() {
        return JSON.stringify(this.edges);
    }
}

Svelte ​

svelte
<script>
  export let nodes = [];
  export let edges = [];
  export let layout = 'ngraph';
</script>

<graphty-element
  node-data={JSON.stringify(nodes)}
  edge-data={JSON.stringify(edges)}
  {layout}
  style="display: block; width: 100%; height: 500px;"
/>

Data Sources ​

Load data from external sources:

html
<!-- Load from URL -->
<graphty-element data-source="url" data-source-config='{"url": "https://example.com/graph.json"}'> </graphty-element>
javascript
element.dataSource = "url";
element.dataSourceConfig = { url: "https://example.com/graph.json" };

See Data Sources for available data source types.

Direct Methods on the Web Component ​

Many methods from the Graph class are available directly on the <graphty-element> for convenience. This eliminates the need to access .graph for common operations.

Data Methods ​

javascript
const element = document.querySelector("graphty-element");

// Bulk data loading
element.setData({
    nodes: [{ id: "a" }, { id: "b" }],
    edges: [{ source: "a", target: "b" }],
});

// Add nodes/edges
await element.addNode({ id: "c", label: "Node C" });
await element.addEdge({ source: "b", target: "c" });

// Get data
const node = element.getNode("a");
const allNodes = element.getNodes();
const nodeCount = element.getNodeCount();

Selection and Layout ​

javascript
// Selection
element.selectNode("node1");
element.deselectNode();
const selected = element.getSelectedNode();

// Layout control
element.setLayout("circular");
await element.waitForSettled();

Camera Control ​

javascript
// Fit view
element.zoomToFit();

// Camera state
const state = element.getCameraState();
element.setCameraPosition({ x: 0, y: 0, z: 100 });
element.setCameraTarget({ x: 0, y: 0, z: 0 });

// Camera mode
await element.setCameraMode("arc-rotate", { target: { x: 0, y: 0, z: 0 } });
const controller = element.getCameraController();

Manager Access ​

javascript
// Access internal managers
const dataManager = element.getDataManager();
const layoutManager = element.getLayoutManager();
const styleManager = element.getStyleManager();
const selectionManager = element.getSelectionManager();
const eventManager = element.getEventManager();
const statsManager = element.getStatsManager();

AI Control ​

javascript
// Enable AI commands
await element.enableAiControl({
    provider: "anthropic",
    apiKey: "your-api-key",
});

// Execute commands
const result = await element.aiCommand("Find the central node");

// Status tracking
element.onAiStatusChange((status) => {
    console.log("AI:", status.stage);
});

// Voice input
element.startVoiceInput();
if (element.isVoiceActive()) {
    console.log("Listening...");
}
element.stopVoiceInput();

// Cleanup
element.disableAiControl();

Screenshot and Capture ​

javascript
// Take screenshot
const result = await element.takeScreenshot({
    width: 1920,
    height: 1080,
});

// Check capabilities
const capability = await element.checkScreenshotCapability();

Algorithms ​

javascript
// Run algorithm
await element.runAlgorithm("graphty", "degree");

// Apply styling from results
element.applySuggestedStyles("graphty:degree");

Need More Control? ​

While many methods are now available directly on the Web Component, some advanced operations still require accessing the underlying Graph instance:

  • Custom layout engine implementations
  • Direct Babylon.js scene access (element.graph.getScene())
  • Mesh cache access (element.graph.getMeshCache())
  • Advanced XR session management

See the JavaScript API Guide for the complete Graph class reference.

Interactive Examples ​