The Angular diagram library that speaks signals
Flow charts, node editors and dashboards as Angular components — [(nodes)]/[(edges)] two-way signal bindings, ng-template custom nodes, verified zoneless. And the hard parts are in the box: obstacle-avoiding routing, auto-layout, undo/redo, collaboration, vector export. MIT.
import { Component, signal } from '@angular/core'; import { DiagramCanvasComponent, GrafloriaNodeDefDirective } from '@grafloria/angular'; @Component({ selector: 'app-flow', imports: [DiagramCanvasComponent, GrafloriaNodeDefDirective], template: ` <grafloria-diagram-canvas [(nodes)]="nodes" [(edges)]="edges" [layout]="'elk'"> <ng-template grafloriaNode="job" let-data="data"> <div class="job-card">{{ data['title'] }}</div> </ng-template> </grafloria-diagram-canvas> `, }) export class FlowComponent { nodes = signal([ { id: 'a', type: 'job', position: { x: 0, y: 0 }, data: { title: 'Extract' } }, { id: 'b', position: { x: 240, y: 0 }, label: 'Load' }, ]); edges = signal([{ source: 'a', target: 'b' }]); }
Why teams pick it
Angular-native, not a wrapper shim
Standalone components, signal inputs, [(nodes)] two-way bindings, ng-template node definitions with template context — and the whole binding is verified zoneless, so it is ready for Angular’s future.
The editor features are included
Minimap, snap & helper lines, marquee, clipboard with cascading paste, command-based undo — plus obstacle-avoiding orthogonal routing and off-thread ELK layout. All MIT, no paid templates.
Collaboration without a sync stack
Per-property CRDT lives in the engine: hand it any transport (BroadcastChannel works serverless for same-browser tabs) and two canvases converge — live cursors and anchored comments included.
Coming from ngx-vflow or JointJS?
ngx-vflow is a lovely lightweight Angular canvas — if you need drag/connect and nothing else, it is genuinely small. Its harder parts (obstacle-avoiding curves, dagre layout) are paid source templates, and undo/export are absent. JointJS+ is deep but commercial per developer. Grafloria ships the whole surface MIT. The comparison table is sourced cell by cell.
npm’s “unpacked size” is not what ships
npm’s unpacked size is uncompressed ESM source plus full TypeScript declarations. What your users download, measured worst-case — the entire public surface of @grafloria/angular, esbuild minify + splitting: 395 KB gzipped eager, with the ELK layout engine in a lazy chunk that downloads only if you invoke it. That covers the renderer, undo, export, Mermaid import and validation — about the cost of one charting library. Every package README carries a two-minute reproduction script.
Every demo, in your framework
The gallery is the documentation: every demo is a real, clickable page, and our CI drives each one with real pointer events so the examples can't rot — and each one available in this framework’s own idiom, source shown. Angular demos — every gallery page as a real component →
Coming from React Flow, or evaluating against it? The React Flow alternative for Angular page maps the two mental models side by side.
Grafloria is MIT — every feature, no commercial tier. React, Next.js, Angular, Vue, React Flow, Vue Flow, ngx-vflow, JointJS and Drawflow are trademarks of their respective owners; comparative references only, no affiliation implied. Corrections welcome via GitHub issues.