Rendering
Render to SVG
const diagram = Diagram("My Diagram");
// ... add nodes
const svg = await diagram.render();
// Returns SVG string
Render to PNG
const png = await diagram.render({ format: "png" });
// Returns Uint8Array
Render to JPG
const jpg = await diagram.render({ format: "jpg" });
// Returns Uint8Array
Render as Data URL
Get the diagram as a base64 data URL for direct use in HTML:
// SVG as data URL
const svgDataUrl = await diagram.render({ dataUrl: true });
// Returns: data:image/svg+xml;base64,...
// PNG as data URL
const pngDataUrl = await diagram.render({ format: "png", dataUrl: true });
// Returns: data:image/png;base64,...
// JPG as data URL
const jpgDataUrl = await diagram.render({ format: "jpg", dataUrl: true });
// Returns: data:image/jpeg;base64,...
Browser Usage with Data URLs
Use data URLs to display diagrams in <img> tags or download them:
const dataUrl = await diagram.render({ dataUrl: true });
// Display in an image element
const img = document.createElement("img");
img.src = dataUrl;
document.body.appendChild(img);
// Or create a download link
const link = document.createElement("a");
link.href = dataUrl;
link.download = "diagram.svg";
link.click();
Save to File
// Auto-detects format from extension
await diagram.save("diagram.svg");
await diagram.save("diagram.png");
Render Options
const svg = await diagram.render({
format: "svg", // 'svg' | 'png' | 'jpg' | 'dot'
width: 800, // Output width (for PNG/JPG)
height: 600, // Output height (for PNG/JPG)
scale: 2, // Scale factor (default: 2 for PNG/JPG)
dataUrl: true, // Return as base64 data URL
});
Browser Usage
// Get SVG string
const svg = await diagram.render();
// Insert into DOM
document.getElementById("diagram").innerHTML = svg;
Node.js Usage
import { writeFile } from "fs/promises";
const svg = await diagram.render();
await writeFile("output.svg", svg);
const png = await diagram.render({ format: "png" });
await writeFile("output.png", Buffer.from(png));
Export to JSON
const diagram = Diagram("Web Architecture");
diagram.add(EC2("Web Server"));
diagram.add(RDS("Database"));
// Export to JSON
const json = diagram.toJSON();
console.log(JSON.stringify(json, null, 2));
JSON Output Example
{
"name": "Web Architecture",
"nodes": [
{
"id": "n1",
"label": "Web Server",
"provider": "aws",
"service": "compute",
"type": "EC2"
},
{
"id": "n2",
"label": "Database",
"provider": "aws",
"service": "database",
"type": "RDS"
}
],
"edges": [{ "from": "n1", "to": "n2" }]
}
Import from JSON
Restore a diagram from JSON using the static Diagram.fromJSON() method:
import { Diagram } from "diagrams-js";
const json = {
name: "My Architecture",
nodes: [
{
id: "web",
label: "Web Server",
provider: "aws",
service: "compute",
type: "EC2",
},
{
id: "db",
label: "Database",
provider: "aws",
service: "database",
type: "RDS",
},
],
edges: [{ from: "web", to: "db", label: "SQL" }],
};
const diagram = await Diagram.fromJSON(json);
const svg = await diagram.render();
JSON Schema
The JSON format follows a JSON Schema for validation. Reference it in your JSON files:
{
"$schema": "https://diagrams-js.hatemhosny.dev/schema/diagram.json",
"name": "My Architecture",
"nodes": [...]
}