MCPInstall

syncfusion-blazor-diagram

Build and troubleshoot Syncfusion Blazor diagrams using SfDiagramComponent. Trigger for flowcharts, org charts, mind maps, BPMN, UML sequence, swimlanes, symbol palettes, nodes/connectors/ports/annotations, layouts, data binding, serialization (load/save), export/print, and collaborative editing questions. Provide Blazor + Syncfusion setup steps, configuration patterns, and sample snippets.

Installs
374
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/syncfusion/blazor-ui-components-skills --skill syncfusion-blazor-diagram
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads syncfusion-blazor-diagram automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Implementing Syncfusion Blazor Diagram

A comprehensive skill for building interactive diagrams with the Syncfusion Blazor Diagram component — flowcharts, organizational charts, mind maps, BPMN process diagrams, UML sequence diagrams, network diagrams, and more.

When to Use This Skill

Use this skill when you need to:

  • Create flowcharts, org charts, mind maps, or network diagrams in Blazor
  • Work with SfDiagramComponent, nodes, connectors, or shapes
  • Configure automatic layouts (hierarchical, radial, mind map, org chart, flowchart)
  • Implement BPMN process diagrams with BPMN shapes
  • Build swimlane diagrams for process modeling
  • Add symbol palettes for drag-and-drop diagram building
  • Bind diagram data from a collection or remote source
  • Implement diagram interactions (selection, drag, resize, zoom, pan)
  • Export diagrams to PNG/JPEG/SVG or print them
  • Serialize and restore diagram state (save/load)
  • Enable collaborative real-time editing
  • Add UML sequence diagrams
  • Handle diagram events, annotations, and ports

Important: API Verification Required

API Verification Required: Always verify API class names, properties, and signatures by reading reference files (references/*.md) BEFORE generating code examples. Do not assume or infer class names. ⚠️ Before writing ANY code, review the Common Mistakes section directly below to avoid known invalid APIs and properties.

Quick Start

@using Syncfusion.Blazor.Diagram

<SfDiagramComponent Width="100%" Height="600px" Nodes="@nodes" Connectors="@connectors" />

@code {
    DiagramObjectCollection<Node> nodes = new DiagramObjectCollection<Node>
    {
        new Node
        {
            ID = "node1", OffsetX = 150, OffsetY = 150,
            Width = 100, Height = 50,
            Style = new ShapeStyle { Fill = "#6BA5D7", StrokeColor = "white" },
            Annotations = new DiagramObjectCollection<ShapeAnnotation>
            {
                new ShapeAnnotation { Content = "Start" }
            }
        }
    };
    DiagramObjectCollection<Connector> connectors = new DiagramObjectCollection<Connector>
    {
        new Connector { ID = "conn1", SourceID = "node1", TargetID = "node2" }
    };
}

Common Patterns

GoalReference
First diagram setupreferences/getting-started.md
Add/configure nodesreferences/nodes.md
Add/configure connectorsreferences/connectors.md
Use built-in shapesreferences/shapes.md
Add text labelsreferences/annotations.md
Define connection pointsreferences/ports.md
Org charts / auto-layoutreferences/layout.md
Swimlane diagramsreferences/swimlane.md
BPMN process diagramsreferences/bpmn.md
Drag-and-drop palettereferences/symbol-palette.md
Bind data to diagramreferences/data-binding.md
Selection, drag, zoomreferences/interaction.md
Handle diagram eventsreferences/events.md
Save and load diagramsreferences/serialization.md
Export / printreferences/export-print.md
CSS / theme stylingreferences/styling.md
UML sequence diagramsreferences/uml-sequence.md
Real-time collaborationreferences/collaborative-editing.md
Context menu, tooltips, rulers, localizationreferences/advanced-features.md
Miniature overview / bird's-eye navigationreferences/overview-component.md

Documentation and Navigation Guide

Getting Started

📄 Read: references/getting-started.md

  • NuGet package installation (Syncfusion.Blazor.Diagram)
  • Service registration and namespace imports
  • Setup for Blazor Server, WebAssembly, MAUI
  • CSS/theme configuration
  • Minimal working diagram example

Nodes

📄 Read: references/nodes.md

  • Creating and configuring nodes
  • Node types: basic, flow shape, path, image, HTML, native
  • Node positioning, sizing, z-order
  • Node style (fill, stroke, opacity)
  • Expand/collapse children
  • Node events and interaction

Connectors

📄 Read: references/connectors.md

  • Creating connectors between nodes or free-floating
  • Segment types: straight, orthogonal, bezier
  • Multiple segments per connector
  • Arrows, line style, and decoration
  • Connector interaction (bend, drag endpoints)
  • Connector events

Shapes

📄 Read: references/shapes.md

  • Built-in basic shapes (rectangle, ellipse, triangle, etc.)
  • Flow shapes (process, decision, terminator, etc.)
  • Path shapes (custom SVG paths)
  • Image and HTML content shapes
  • Native SVG shapes
  • Choosing the right shape type

Annotations

📄 Read: references/annotations.md

  • Adding text labels to nodes and connectors
  • Annotation positioning and alignment
  • Font, color, and style customization
  • Inline editing of annotations
  • Multiple annotations per element
  • Annotation interaction events
  • Interaction constraints: AnnotationConstraints flags, DragLimit (PathAnnotation)
  • Hyperlinks with Hyperlink (Url, Content, OpenMode)
  • Events: SelectionChanging/Changed, PositionChanging/Changed, SizeChanging/Changed, RotationChanging/Changed, TextChanging/Changed

Ports

📄 Read: references/ports.md

  • Connection ports (fixed connection points on nodes)
  • Dynamic ports (created at runtime)
  • Port positioning (relative and absolute)
  • Port appearance and visibility
  • Restricting connections to specific ports

Layout

📄 Read: references/layout.md

  • Automatic layout overview and when to use each type
  • Hierarchical tree layout (top-down, left-right)
  • Organizational chart layout
  • Mind map layout
  • Radial tree layout
  • Flowchart layout
  • Force-directed tree layout
  • Complex hierarchical layout
  • Layout spacing, margin, and orientation settings
  • Layout events and callbacks
  • await DoLayoutAsync() — refresh layout at runtime after adding/removing nodes

Swimlane

📄 Read: references/swimlane.md

  • Creating swimlane diagrams
  • Adding lanes and configuring lane properties
  • Phase configuration (vertical/horizontal phases)
  • Swimlane symbol palette integration
  • Swimlane interactions
<SfDiagramComponent Height="600px" Swimlanes="@swimlanes" />

@code {
    DiagramObjectCollection<Swimlane> swimlanes = new();

    protected override void OnInitialized()
    {
        swimlanes.Add(new Swimlane
        {
            ID = "swimlane1",
            OffsetX = 400, OffsetY = 300,
            Width = 600, Height = 200,
            Lanes = new DiagramObjectCollection<Lane>()
            {
                new Lane(){
                Height = 100,
                Header = new SwimlaneHeader(){
                    Width = 30,
                    Annotation = new ShapeAnnotation(){ Content = "Consumer" }
                },
                Children = new DiagramObjectCollection<Node>()
                {
                    new Node(){Height = 50, Width = 50, LaneOffsetX = 250, LaneOffsetY = 30},
                }
                },
            }
        });
    }
}

BPMN

📄 Read: references/bpmn.md

  • BPMN shape types (events, activities, gateways, data)
  • BPMN event types (start, end, intermediate, boundary)
  • BPMN activity types (task, subprocess, call activity)
  • BPMN gateway types (exclusive, parallel, inclusive, etc.)
  • BPMN connectors (sequence flow, message flow, association)
  • Data objects and data stores
  • Expanded sub-process
  • BPMN text annotation
// Exclusive gateway (XOR)
nodes.Add(new Node
{
    ID = "gateway1", OffsetX = 300, OffsetY = 200, Width = 50, Height = 50,
    Shape = new BpmnGateway
    {
        GatewayType = BpmnGatewayType.Exclusive
    }
});

Symbol Palette

📄 Read: references/symbol-palette.md

  • Setting up SfSymbolPaletteComponent
  • Defining palette groups and symbols
  • Custom symbols and stencils
  • Drag-and-drop from palette to diagram
  • Palette search and customization

Data Binding

📄 Read: references/data-binding.md

  • Binding diagram from a flat list or IEnumerable
  • Hierarchical data binding (parent-child relationships)
  • Remote data source integration
  • Runtime CRUD: await ReadDataAsync(query?), await InsertDataAsync(data), await UpdateDataAsync(keyField, data), await DeleteDataAsync(keyField, value)
  • await RefreshDataSourceAsync() — reload all data and rebuild layout
  • Mapping data fields to node/connector properties

Interaction & Commands

📄 Read: references/interaction.md

  • Selection: Select(collection, multipleSelection?), SelectAll(), UnSelect(obj), ClearSelection()
  • Drag, resize, and rotate elements (user interaction + programmatic)
  • Programmatic transforms: Drag(obj, tx, ty), Rotate(obj, angle, pivot?), Scale(obj, sx, sy, pivot)
  • Zoom and pan: mouse wheel, toolbar, Zoom(factor, focusPoint), ResetZoom(), Pan(hOffset, vOffset, focusPoint?)
  • BringIntoView(DiagramRect) — scroll viewport to show a region
  • BringIntoCenter(DiagramRect) — scroll viewport to center a region
  • FitToPage(FitOptions?) — fit content to viewport (sync; FitMode.Width/Height/Both, DiagramRegion.Content/PageSettings)
  • Nudge(Direction, int?) — move selected elements by pixels; default 1px; Direction.Top/Bottom/Left/Right
  • Z-Order: BringToFront(), BringForward(), SendBackward(), SendToBack() — must Select() first
  • Clipboard: Copy(), Cut(), Paste(collection?), Delete(collection?)
  • Group/Ungroup: Group(), Ungroup(), AddChildAsync(group, child), RemoveChild(group, child)
  • Inline text editing: StartTextEdit(obj, annotationId?)
  • Keyboard shortcuts (built-in table) and CommandManager (custom/override shortcuts via child component)
  • CommandManager uses KeyboardCommand + KeyGesture (DiagramKeys + ModifierKeys) + CommandKeyArgs
  • Snapping to grid or objects
  • Alignment, spacing, and sizing commands (SetAlign, SetDistribute, SetSameSize — all sync)
  • User handles (custom action buttons on selection)
  • Undo/redo: Undo(), Redo() (sync); StartGroupAction() / EndGroupAction() for batched undo steps
  • History: AddHistoryEntry(entry), ClearHistory()
  • Utility: GetObject(id), GetPageBounds(x?, y?), Clear() (removes all elements)
  • Batch updates: BeginUpdate() + await EndUpdateAsync() — group multiple changes into one render pass
  • Add multiple elements: await AddDiagramElementsAsync(DiagramObjectCollection<NodeBase>)

Events

📄 Read: references/events.md

  • Diagram-level events (Created, Click, Drop)
  • Node events (NodeCreating, PositionChanged, SizeChanged)
  • Connector events (ConnectionChanged, SegmentChanged)
  • Selection events (SelectionChanged)
  • History change events (HistoryChanged for undo/redo)
  • Event argument types and usage patterns

Serialization

📄 Read: references/serialization.md

  • Saving diagram state as JSON string
  • Loading a diagram from saved JSON
  • Custom serialization properties
  • Partial diagram save and restore patterns

Export & Print

📄 Read: references/export-print.md

  • Exporting to PNG, JPEG, SVG formats
  • Export region options (diagram, page, content)
  • Scale and margin settings
  • Print configuration
  • Custom page size and orientation
  • Fit diagram to single page on print

Styling

📄 Read: references/styling.md

  • CSS class customization (CssClass property)
  • Built-in themes (Material, Bootstrap, Fluent, Tailwind)
  • Node and connector style properties
  • Selection and hover styles
  • Theme Studio customization
  • CSS variable overrides

UML Sequence Diagrams

📄 Read: references/uml-sequence.md

  • UML sequence diagram setup
  • Lifelines and activation boxes
  • Message types (synchronous, asynchronous, return, create, destroy)
  • UML interaction shapes and connectors
  • await UpdateFromModelAsync() — refresh diagram after programmatic model changes

UML Class Diagram

📄 Read: references/uml-class-diagram.md

  • Creating Class, Interface, and Enumeration nodes with attributes, methods, and members
  • Visibility scopes, method parameters, separator rows
  • Styling header, section headers (UmlSectionHeaderSettings), and row-level TextStyle
  • Six relationship types: Association, Aggregation, Composition, Inheritance, Dependency, Realization
  • Directional / bi-directional association flow; multiplicity labels
  • Adding and removing members at runtime (Add, RemoveAt, Remove)
  • CollectionChanging / CollectionChanged events; inline text editing (F2, StartTextEdit)
  • Symbol Palette integration for drag-and-drop UML shapes

Collaborative Editing

📄 Read: references/collaborative-editing.md

  • Setting up real-time collaborative diagram editing
  • SignalR hub configuration
  • Blazor Server and WASM app integration
  • Handling real-time sync and conflict resolution
  • Delta sync: GetDiagramUpdates(HistoryChangedEventArgs) + await SetDiagramUpdatesAsync(updates) — efficient change propagation

Overview Component

📄 Read: references/overview-component.md

  • Adding SfDiagramOverviewComponent as a miniature thumbnail panel
  • Linking the overview to the main diagram via SourceID / ID
  • Controlling panel size with Width and Height
  • Zoom and pan interactions (drag, resize, click, draw-region)
  • Enabling or disabling interactions with DiagramOverviewConstraints
  • Required @using Syncfusion.Blazor.Diagram.Overview namespace.
@using Syncfusion.Blazor.Diagram
@using Syncfusion.Blazor.Diagram.Overview
@using System.Collections.ObjectModel

<SfDiagramComponent ID="element"
                    Width="100%"
                    Height="500px">
</SfDiagramComponent>

<!-- Overview panel linked to the diagram above -->
<SfDiagramOverviewComponent Height="150px" SourceID="element" />

Advanced Features

📄 Read: references/advanced-features.md

  • Context menu (built-in and custom items)
  • Tooltips for nodes, connectors, ports, user handles
  • Programmatic tooltips: await ShowTooltipAsync(obj) / await HideTooltipAsync(obj) — requires OpensOn = "Custom"
  • Gridlines and rulers
  • Scroll settings and page settings
  • Container and group nodes
  • Flip (horizontal/vertical)
  • Constraints (restricting behavior per element)
  • Localization (static text translation)
  • Accessibility (WCAG 2.1, keyboard navigation)
  • Migration from classic to native diagram

Common Mistakes

Annotation Editing

⚠️ AllowEditing does NOT exist on ShapeAnnotation or PathAnnotation.
Inline editing is on by default — no property is needed to enable it.
To disable editing, set Constraints = AnnotationConstraints.ReadOnly:

// ❌ Wrong — CS0117: AllowEditing does not exist
new ShapeAnnotation { Content = "Label", AllowEditing = false }

// ✅ Correct — use AnnotationConstraints.ReadOnly to disable editing
new ShapeAnnotation { Content = "Label", Constraints = AnnotationConstraints.ReadOnly }

EndUpdateAsync Method

⚠️ Always use EndUpdateAsync() (async) — EndUpdate() (sync, non-async) does NOT exist and will cause a compile error.
Use BeginUpdate()/EndUpdateAsync() when changing multiple properties at once — await is required:

// ❌ Wrong — EndUpdate() does not exist
diagram.BeginUpdate();
// ... changes ...
diagram.EndUpdate();

// ✅ Correct — EndUpdateAsync is async
diagram.BeginUpdate();
// ... changes ...
await diagram.EndUpdateAsync();

Click Event

⚠️ ClickEventArgs name collision: If your page also uses @using Syncfusion.Blazor.Navigations (or Buttons),
ClickEventArgs becomes ambiguous. Always qualify it:

// ✅ Use the fully qualified type in the handler signature
private void OnClick(Syncfusion.Blazor.Diagram.ClickEventArgs args) { }

⚠️ args.Count is NOT an int field — it is a method that returns an int.
Do NOT compare it directly with == inline without storing the result first:

// ❌ Wrong — CS0019: Operator '==' cannot be applied to operands of type 'method group' and 'int'
if (args.Count == 2)

// ✅ Correct — store result then compare
int clickCount = args.Count;
if (clickCount == 2) { /* double-click */ }

SizeChanged Event

⚠️ SizeChangedEventArgs.Element is typed as DiagramSelectionSettings, not Node.
Pattern-matching args.Element is Node n always fails with CS8121.
Cast to DiagramSelectionSettings and read .Nodes[0] to get the resized node:

// ❌ Wrong — CS8121: DiagramSelectionSettings cannot match Node
if (args.Element is Node n) { }

// ✅ Correct — Element is DiagramSelectionSettings
if (args.Element is DiagramSelectionSettings sel && sel.Nodes.Count > 0)
{
    var node = sel.Nodes[0];
    double w = args.NewValue.Width;
    double h = args.NewValue.Height;
}

⚠️ args.NewValue.Width and args.NewValue.Height are plain double, not double?.
Using ?? on them causes CS0019. Assign them directly:

// ❌ Wrong — CS0019
double w = args.NewValue.Width ?? 0;

// ✅ Correct
double w = args.NewValue.Width;

Selection Changed Event

⚠️ SelectionChangedEventArgs name collision: If your page also uses @using Syncfusion.Blazor.Buttons
(or other Syncfusion packages), SelectionChangedEventArgs becomes ambiguous. Always qualify it:

// ✅ Fully qualified
private void OnSelectionChanged(Syncfusion.Blazor.Diagram.SelectionChangedEventArgs args) { }

⚠️ args.NewValue is a DiagramSelectionSettings object — NOT a Node, NOT a collection:

  • Pattern-matching args.NewValue is Node always fails with CS8121
  • Iterating args.NewValue as a collection fails — it is a single settings object
  • The only correct approach is to read _diagram.SelectionSettings.Nodes / .Connectors:
// ❌ Wrong — CS8121: DiagramSelectionSettings cannot match Node
if (args.NewValue is Node n) { }

// ❌ Wrong — DiagramSelectionSettings is not IEnumerable
foreach (var item in args.NewValue) { }

// ✅ Correct — use SelectionSettings on the diagram reference
foreach (var node in _diagram.SelectionSettings.Nodes)
    Console.WriteLine(node.ID);
foreach (var conn in _diagram.SelectionSettings.Connectors)
    Console.WriteLine(conn.ID);

Text Changed Event

⚠️ TextChangedEventArgs does NOT exist — using it causes CS0246.
The correct event args type is TextChangeEventArgs (no d):

// ❌ Wrong — CS0246: TextChangedEventArgs not found
private void OnTextChanged(TextChangedEventArgs args) { }

// ✅ Correct
private void OnTextChanged(TextChangeEventArgs args) { }

Drag Start Event

⚠️ DragStartEventArgs is ambiguous when Syncfusion.Blazor.Popups (or other packages that expose DragStartEventArgs) is also referenced.
Always qualify it as Syncfusion.Blazor.Diagram.DragStartEventArgs:

// ❌ Wrong — CS0104: ambiguous reference between Diagram and Popups
private void OnDragStart(DragStartEventArgs args) { }

// ✅ Correct — fully qualified
private void OnDragStart(Syncfusion.Blazor.Diagram.DragStartEventArgs args) { }

⚠️ DragEnterEventArgs does NOT exist in Syncfusion.Blazor.Diagram.
There is no DragEnter event on SfDiagramComponent that receives a DragEnterEventArgs.
The available drag events on SfDiagramComponent are: DragStart, Dragging, DragLeave, DragDrop — all for SymbolPalette drag-and-drop only.
For tracking when a node is being moved (internal drag), use PositionChanged:

// ❌ Wrong — DragEnterEventArgs does not exist
private void OnDragEnter(DragEnterEventArgs args) { }

// ❌ Wrong — OnPositionChange does not exist on SfDiagramComponent
<SfDiagramComponent OnPositionChange="OnPositionChange" />

// ✅ Correct — use PositionChanged
<SfDiagramComponent PositionChanged="OnPositionChanged" />

private void OnPositionChanged(PositionChangedEventArgs args)
{
    if (args.Element is Node n)
        Console.WriteLine($"Node {n.ID} moved to ({n.OffsetX}, {n.OffsetY})");
}

Snap Distance

⚠️ SnapObjectDistance does NOT exist on SnapSettings — using it causes InvalidOperationException: does not have a property matching the name 'SnapObjectDistance'.
The correct property name is SnapDistance:

@* ❌ Wrong — SnapObjectDistance does not exist *@
<SnapSettings SnapObjectDistance="5" />

@* ✅ Correct *@
<SnapSettings Constraints="SnapConstraints.SnapToObject" SnapDistance="5" />

Styling

⚠️ CssClass does NOT exist on SfDiagramComponent — using it causes
InvalidOperationException: Object of type 'SfDiagramComponent' does not have a property matching the name 'CssClass'.
Wrap the component in a <div> with a scoping class instead:

@* ❌ Wrong — CssClass does not exist on SfDiagramComponent *@
<SfDiagramComponent CssClass="my-diagram" />

@* ✅ Correct — use a wrapper div *@
<div class="my-diagram">
    <SfDiagramComponent ... />
</div>

Phase Offset Property

⚠️ Phase.Offset does NOT exist — using it causes a compile error.
Use Phase.Width to set the size of a phase in a swimlane:

// ❌ Wrong — Offset does not exist on Phase
new Phase { ID = "ph1", Offset = 220 }

// ✅ Correct — use Width
new Phase { ID = "ph1", Width = 220 }

Lane Constraints Property

⚠️ Lane.Constraints does NOT exist and LaneConstraints enum does NOT exist.
Individual lanes cannot have constraints set via a Constraints property.
To restrict swimlane-level interactions, use SwimlaneConstraints on the Swimlane object itself:

// ❌ Wrong — Lane.Constraints and LaneConstraints do not exist
lane.Constraints = LaneConstraints.Default & ~LaneConstraints.ResizeEntries;

// ✅ Correct — set constraints on the Swimlane object
swimlane.Constraints = SwimlaneConstraints.Default & ~SwimlaneConstraints.Interaction;

FitMode.Page Value

⚠️ FitMode.Page does NOT exist — using it causes CS0117.
The correct values for FitMode are FitMode.Width and FitMode.Height:

// ❌ Wrong — FitMode.Page does not exist
new FitOptions { Mode = FitMode.Page }

// ✅ Correct — use FitMode.Width or FitMode.Height
new FitOptions { Mode = FitMode.Width, Region = DiagramRegion.Content }

LoadDiagram Method

⚠️ SfDiagramComponent.LoadDiagram() does NOT exist — using it causes a compile error.
Use the async version LoadDiagramAsync() instead:

// ❌ Wrong — LoadDiagram() does not exist
diagram.LoadDiagram(savedJson);

// ✅ Correct — use LoadDiagramAsync
await diagram.LoadDiagramAsync(savedJson);

FitToPageAsync Method

⚠️ SfDiagramComponent.FitToPageAsync() does NOT exist — using it causes a compile error.
Use the non-async overload FitToPage() instead:

// ❌ Wrong — FitToPageAsync does not exist
await diagram.FitToPageAsync(new FitOptions { Mode = FitMode.Width });

// ✅ Correct — use FitToPage (synchronous)
diagram.FitToPage(new FitOptions { Mode = FitMode.Width, Region = DiagramRegion.Content });

BasicShapes Enum

⚠️ BasicShapes does NOT exist — use NodeBasicShapes instead:

// ❌ Wrong
new BasicShape { Shape = BasicShapes.Rectangle }

// ✅ Correct
new BasicShape { Shape = NodeBasicShapes.Rectangle }

DiagramThickness Constructor

⚠️ DiagramThickness does NOT have a 4-argument constructor — using it causes CS1729: does not contain a constructor that takes 4 arguments.
Use the object initializer syntax with named properties instead:

// ❌ Wrong — CS1729: no 4-argument constructor
new DiagramThickness(20, 50, 20, 20)

// ✅ Correct — use object initializer with named properties
new DiagramThickness { Left = 20, Top = 50, Right = 20, Bottom = 20 }

// ✅ Correct — set only the sides you need
new DiagramThickness { Top = 50 }

PathAnnotation DragLimit Type

⚠️ PathAnnotation.DragLimit type is DiagramThickness — NOT Margin.
Using new Margin { ... } causes a type mismatch compile error (CS0029).
Always use new DiagramThickness { ... } for DragLimit:

// ❌ Wrong — CS0029: Margin cannot be assigned to DiagramThickness
new PathAnnotation
{
    Constraints = AnnotationConstraints.Interaction,
    DragLimit   = new Margin { Left = 40, Right = 40, Top = 20, Bottom = 20 }
}

// ✅ Correct — DiagramThickness with object initializer
new PathAnnotation
{
    Constraints = AnnotationConstraints.Interaction,
    DragLimit   = new DiagramThickness { Left = 40, Right = 40, Top = 20, Bottom = 20 }
}

ScrollSettings EnableAutoScroll Property

⚠️ CanAutoScroll does NOT exist on ScrollSettings — using it causes InvalidOperationException: does not have a property matching the name 'CanAutoScroll'.
The correct property name is EnableAutoScroll:

@* ❌ Wrong — CanAutoScroll does not exist *@
<ScrollSettings CanAutoScroll="true" />

@* ✅ Correct *@
<ScrollSettings EnableAutoScroll="true" />

Zoom, Undo, and Redo Methods

⚠️ ZoomAsync(), UndoAsync(), and RedoAsync() do NOT exist — using them causes a compile error.
Use the non-async overloads Zoom(), Undo(), and Redo() instead:

// ❌ Wrong — ZoomAsync, UndoAsync, RedoAsync do not exist
await _diagram.ZoomAsync(1.2, new DiagramPoint { X = 300, Y = 300 });
await _diagram.UndoAsync();
await _diagram.RedoAsync();

// ✅ Correct — use non-async overloads
_diagram.Zoom(1.2, new DiagramPoint { X = 300, Y = 300 });
_diagram.Undo();
_diagram.Redo();

Overview Component Namespace

⚠️ SfDiagramOverviewComponent requires an additional @using — it lives in Syncfusion.Blazor.Diagram.Overview, NOT in Syncfusion.Blazor.Diagram. Forgetting it causes CS0246:

@* ❌ Wrong — SfDiagramOverviewComponent not found without the Overview namespace *@
@using Syncfusion.Blazor.Diagram

@* ✅ Correct — both namespaces required *@
@using Syncfusion.Blazor.Diagram
@using Syncfusion.Blazor.Diagram.Overview

⚠️ SourceID must exactly match the ID set on SfDiagramComponent — the ID is NOT auto-generated; you must set it explicitly. A mismatch (including case) renders the overview empty:

@* ❌ Wrong — ID not set on the diagram; SourceID has nothing to link to *@
<SfDiagramComponent Width="100%" Height="500px" Nodes="@_nodes" />
<SfDiagramOverviewComponent SourceID="myDiagram" Height="150px" />

@* ✅ Correct — ID set on diagram, SourceID matches exactly *@
<SfDiagramComponent ID="myDiagram" Width="100%" Height="500px" Nodes="@_nodes" />
<SfDiagramOverviewComponent SourceID="myDiagram" Height="150px" />

⚠️ Do NOT nest SfDiagramOverviewComponent inside SfDiagramComponent — the overview is a sibling component rendered outside the diagram markup.

FAQ

What does the syncfusion-blazor-diagram skill do?

Build and troubleshoot Syncfusion Blazor diagrams using SfDiagramComponent. Trigger for flowcharts, org charts, mind maps, BPMN, UML sequence, swimlanes, symbol palettes, nodes/connectors/ports/annotations, layouts, data binding, serialization (load/save), export/print, and collaborative editing questions. Provide Blazor + Syncfusion setup steps, configuration patterns, and sample snippets.

How do I install syncfusion-blazor-diagram?

Run npx skills add https://github.com/syncfusion/blazor-ui-components-skills --skill syncfusion-blazor-diagram in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/syncfusion-blazor-diagram/ (personal) or .claude/skills/syncfusion-blazor-diagram/ (project).

Which AI agents can use syncfusion-blazor-diagram?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is syncfusion-blazor-diagram safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains syncfusion-blazor-diagram?

It is published by syncfusion in syncfusion/blazor-ui-components-skills. It has 374 recorded installs.

More from syncfusion/blazor-ui-components-skills

View all →

syncfusion-blazor-datagrid

syncfusion/blazor-ui-components-skills

Implements the Syncfusion Blazor DataGrid (SfGrid) for efficient tabular operations such as sorting, filtering, paging, grouping, editing, aggregates, virtualization, lazy‑load grouping, and row or column spanning. Use this skill when building data‑grid workflows in Blazor Server, WebAssembly, Web App, or MAUI applications. Supports Excel/PDF export, virtual or infinite scrolling, customizable templates, and grid state persistence for consistent and optimized data‑grid behavior.

Frontend & Design442 installs

syncfusion-blazor-common

syncfusion/blazor-ui-components-skills

Open the skill to read its SKILL.md instructions.

Frontend & Design409 installs

syncfusion-blazor-dropdowns

syncfusion/blazor-ui-components-skills

Comprehensive guide for implementing Syncfusion Blazor dropdown components including AutoComplete, ComboBox, DropDown List, MultiSelect Dropdown, and ListBox. Use this when building selection interfaces, data binding, filtering, cascading dropdowns, custom templates, and accessible dropdown experiences in Blazor applications. Covers all dropdown components from Syncfusion.Blazor.DropDowns package.

Frontend & Design400 installs

syncfusion-blazor-charts

syncfusion/blazor-ui-components-skills

Implement Syncfusion Blazor Chart (SfChart) component for comprehensive data visualization. Use this when creating line charts, bar/column charts, area charts, financial charts, or statistical visualizations. This skill covers 30+ chart types including scatter plots, bubble charts, candlestick charts, and specialized charts like waterfall, histogram, and polar charts for Blazor applications.

Frontend & Design394 installs

syncfusion-blazor-popups

syncfusion/blazor-ui-components-skills

Implement modal and modeless dialogs using Syncfusion Blazor Dialog component. Use this skill when creating dialogs, popup windows, modal confirmations, custom forms, or interactive overlay windows. Covers templates, events, positioning, animations, accessibility, and advanced customization.

Frontend & Design394 installs

syncfusion-blazor-license

syncfusion/blazor-ui-components-skills

Generate, register, secure, validate, and troubleshoot Syncfusion Blazor license keys across all Blazor project types

Frontend & Design386 installs

Popular docs & writing skills

View category →

grill-with-docs

mattpocock/skills

A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.

Docs & Writing1.2M installs

lark-markdown

open.feishu.cn

飞书 Markdown:查看、创建、上传、编辑和比较飞书中的原生 Markdown 文件。当用户要操作飞书 Markdown 文件,或比较其远端版本及本地草稿时使用。纯本地 Markdown 文件操作不触发本 skill。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。

Docs & Writing778.7K installs

writing-beats

mattpocock/skills

Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it.

Docs & Writing490.7K installs

writing-shape

mattpocock/skills

Writing, exploit: shape raw material into an article, paragraph by paragraph.

Docs & Writing490.2K installs

writing-fragments

mattpocock/skills

Writing, explore: mine raw fragments, no structure yet.

Docs & Writing489.6K installs

writing-for-agents

mattpocock/skills

Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.

Docs & Writing479.3K installs