Loading repository data…
Loading repository data…
synergycodes / repository
ngDiagram – An open-source Angular library for creating rich, interactive diagramming experiences. Designed for flexibility and performance, it lets you build everything from simple flows to advanced visual editors with ease
A robust Angular library for building interactive diagrams, node-based editors, and visual programming interfaces. Designed with Angular and TypeScript, it offers a complete toolkit to create sophisticated, customizable, and high-performance diagramming applications.
Unlike generic diagramming libraries, ng-diagram is Angular-first - built on Angular signals and templates for seamless integration and performance.
With ng-diagram, you can create:
See our Templates for production-ready examples you can fork and customize.
See ng-diagram in action: Live Demo | Source Code
Production-ready starter kits built with ng-diagram. Fork, customize, ship.
| Template | Description | Demo | Source |
|---|---|---|---|
| Org Chart | Interactive organizational chart with drag-and-drop reordering, expand/collapse, ELK.js layout, dark/light theme, minimap | Live Demo | Source |
npm install ng-diagram
⚠️ Important: You must import the required styles for the diagram to display correctly.
Because the library uses CSS variables, import the stylesheet in your global file (e.g. src/styles.scss), not inside a component.
/* src/styles.scss */
@import 'ng-diagram/styles.css';
import { Component } from '@angular/core';
import { NgDiagramComponent, initializeModel, provideNgDiagram } from 'ng-diagram';
@Component({
imports: [NgDiagramComponent],
providers: [provideNgDiagram()],
template: ` <ng-diagram [model]="model" /> `,
styles: `
:host {
flex: 1;
display: flex;
height: 100%;
}
`,
})
export class MyDiagramComponent {
model = initializeModel({
nodes: [
{ id: '1', position: { x: 100, y: 150 }, data: { label: 'Node 1' } },
{ id: '2', position: { x: 400, y: 150 }, data: { label: 'Node 2' } },
],
edges: [
{
id: '1',
source: '1',
sourcePort: 'port-right',
targetPort: 'port-left',
target: '2',
data: {},
},
],
});
}
That's it! You now have a working diagram with default node and edge templates.
Create custom node components with any Angular template:
@Component({
selector: 'app-custom-node',
template: `
<div class="custom-node">
<h3>{{ node.data.title }}</h3>
<p>{{ node.data.description }}</p>
<ng-diagram-port id="input" position="left" type="target"> </ng-diagram-port>
<ng-diagram-port id="output" position="right" type="source"> </ng-diagram-port>
</div>
`,
styles: [
`
.custom-node {
background: #fff;
border: 2px solid #333;
border-radius: 8px;
padding: 16px;
min-width: 200px;
}
`,
],
})
export class CustomNodeComponent implements NgDiagramNodeTemplate {
node = input.required<Node>();
}
Create custom edge components with unique visual styles:
@Component({
selector: 'app-custom-edge',
template: `
<ng-diagram-base-edge [path]="path" [markerEnd]="markerEnd" [style]="edgeStyle"> </ng-diagram-base-edge>
`,
})
export class CustomEdgeComponent implements NgDiagramEdgeTemplate {
edge = input.required<Edge>();
get path() {
// Custom path calculation
return this.calculateCustomPath();
}
}
NgDiagramComponent: The main diagram componentNgDiagramPortComponent: Connection points on nodesNgDiagramBaseEdgeComponent: Base edge component for custom edgesNgDiagramPaletteItemComponent: Drag-and-drop palette itemsNgDiagramPaletteItemPreviewComponent: Live preview during drag operationsNgDiagramService: Main service providing access to all diagram functionalityNgDiagramModelService: Model management and stateNgDiagramNodeService: Node operations and manipulationNgDiagramGroupsService: Group node operations and managementNgDiagramSelectionService: Selection state managementNgDiagramViewportService: Panning and zooming controlsNgDiagramClipboardService: Copy, paste, and clipboard operationsNgDiagramNodeSelectedDirective: Node selection stylingNgDiagramGroupHighlightedDirective: Group highlighting stylingng-diagram is built and maintained by Synergy Codes - a team of developers who’ve spent over a decade designing and delivering diagramming solutions for clients worldwide.
We are continuously distilling everything we know about building interactive diagrams, editors, and visual tools into this library. Our goal is simple: to empower Angular developers to create diagramming applications faster, easier, and with confidence.
When you use this library, you can be sure you’re in good hands - backed by a team that knows diagrams inside out.
For comprehensive documentation, examples, and API reference, visit:
The documentation includes:
Use AI assistants like Claude, Cursor, or Windsurf to search ng-diagram docs and API directly from your editor. No browser needed.
{
"mcpServers": {
"ng-diagram-docs": {
"command": "npx",
"args": ["-y", "@ng-diagram/mcp"]
}
}
}
See @ng-diagram/mcp for setup details and Windows configuration.
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
Built with ❤️ by the Synergy Codes team