smithery.ai

arc-diagrams

Create architecture diagrams using Arc's JSON format. Use when asked to "create an architecture diagram", "draw a system diagram", "visualize the architecture", or "make a diagram of".

First seen May 3, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,341 B
  • docs SUMMARY.md 204 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

Arc Diagrams

Arc is a visual diagram editor for creating architecture diagrams. This skill enables you to generate Arc-compatible diagram configs that can be rendered in React applications.

When to Use

Activate this skill when the user asks to:

  • "Create an architecture diagram"
  • "Draw a system diagram"
  • "Visualize the architecture"
  • "Make a diagram showing..."
  • "Design a flow diagram"

Diagram Format

Arc diagrams are JSON objects with this structure:

interface ArcDiagramData {
  layout: { width: number; height: number }
  nodes: Record<string, NodePosition>
  nodeData: Record<string, NodeData>
  connectors: Connector[]
  connectorStyles: Record<string, ConnectorStyle>
}

Creating a Diagram

1. Define Layout

Set canvas dimensions (default 1600x900 for editor, smaller for exports):

"layout": { "width": 860, "height": 400 }

2. Position Nodes

Each node needs an x, y position and size:

"nodes": {
  "frontend": { "x": 50,  "y": 100, "size": "l" },
  "api":      { "x": 300, "y": 100, "size": "m" },
  "database": { "x": 550, "y": 100, "size": "m" }
}

Size options (canonical — use these):

Size Key Dimensions (px)
Extra Small xs 80 × 36
Small s 110 × 48
Medium m 160 × 75
Large l 220 × 90

Source: src/utils/constants.ts → NODE_SIZES. Do not use large/normal/small.

3. Define Node Data

Each node needs an icon, name, and color:

"nodeData": {
  "frontend": {
    "icon": "Monitor",
    "name": "Frontend",
    "subtitle": "React",
    "description": "User interface",
    "color": "violet"
  },
  "api": {
    "icon": "Server",
    "name": "API",
    "subtitle": "Node.js",
    "description": "REST endpoints",
    "color": "emerald"
  },
  "database": {
    "icon": "Database",
    "name": "PostgreSQL",
    "subtitle": "Storage",
    "description": "Persistent data",
    "color": "blue"
  }
}

Available icons (from Lucide):

  • Devices: Monitor, Server, Smartphone, Watch, Cloud, Cpu, Database, HardDrive
  • Network: Wifi, Globe
  • Users: User, Users
  • Security: Lock, Key, Shield
  • Media: Mic, Camera, Speaker, Headphones
  • Code: Code, Terminal, FileCode, Folder
  • Data: Zap, Activity, BarChart, PieChart
  • Flow: ArrowRight, ArrowDown, RefreshCw, Repeat
  • Structure: Box, Package, Layers, Grid
  • UI: Settings, Bell, Mail, MessageSquare, Search, Filter
  • Actions: Download, Upload, Play, Pause, Square, Circle

Available colors: violet | emerald | blue | amber | sky | zinc | rose | orange

4. Connect Nodes

Define connections between nodes:

"connectors": [
  {
    "from": "frontend",
    "to": "api",
    "fromAnchor": "right",
    "toAnchor": "left",
    "style": "http"
  },
  {
    "from": "api",
    "to": "database",
    "fromAnchor": "right",
    "toAnchor": "left",
    "style": "sql"
  }
]

Anchor positions: top | bottom | left | right | bottomLeft | bottomRight | topLeft | topRight

Optional: Add "curve": "natural" or "curve": "step" for curved connectors.

5. Style Connectors

Define appearance for each connector style:

"connectorStyles": {
  "http": { "color": "amber", "strokeWidth": 2, "label": "HTTP" },
  "sql": { "color": "blue", "strokeWidth": 2, "label": "SQL" },
  "async": { "color": "zinc", "strokeWidth": 1.5, "dashed": true }
}

Complete Example

Here's a full diagram for a typical web application:

{
  "layout": { "width": 700, "height": 300 },
  "nodes": {
    "client":   { "x": 50,  "y": 100, "size": "l" },
    "api":      { "x": 300, "y": 100, "size": "m" },
    "cache":    { "x": 300, "y": 220, "size": "s" },
    "database": { "x": 520, "y": 100, "size": "m" }
  },
  "nodeData": {
    "client":   { "icon": "Monitor",  "name": "Client",   "subtitle": "React",    "color": "violet" },
    "api":      { "icon": "Server",   "name": "API",      "subtitle": "Express",  "color": "emerald" },
    "cache":    { "icon": "Zap",      "name": "Cache",    "subtitle": "Redis",    "color": "amber" },
    "database": { "icon": "Database", "name": "Database", "subtitle": "Postgres", "color": "blue" }
  },
  "connectors": [
    { "from": "client", "to": "api",      "fromAnchor": "right",  "toAnchor": "left", "style": "http" },
    { "from": "api",    "to": "database", "fromAnchor": "right",  "toAnchor": "left", "style": "sql" },
    { "from": "api",    "to": "cache",    "fromAnchor": "bottom", "toAnchor": "top",  "style": "cache" }
  ],
  "connectorStyles": {
    "http":  { "color": "amber",   "strokeWidth": 2, "label": "HTTP" },
    "sql":   { "color": "blue",    "strokeWidth": 2, "label": "SQL" },
    "cache": { "color": "emerald", "strokeWidth": 2, "label": "cache" }
  }
}

Layout Tips

  1. Prefer auto-layout — use autoLayout() from @arach/arc when you don't need pixel-perfect placement
  2. Grid alignment: Position nodes on a ~50px grid for clean manual layouts
  3. Spacing: Leave ~150–200px between connected nodes horizontally
  4. Flow direction: Left-to-right or top-to-bottom for data flow
  5. Grouping: Use groups + layoutHints for framed sections (see docs/group-layout.md)
  6. Large nodes: Use l size for primary/entry-point components
  7. Connectors: Match connector colors to the source or destination node

Validation

Before handing off JSON, ensure every nodes key has a matching nodeData entry. In the repo, validateDiagramShape() in src/utils/diagramValidation.ts returns a human-readable error or null.

Output

When generating a diagram, output:

  1. The complete JSON config
  2. Brief explanation of the architecture shown
  3. Suggest the user save it as a .arc.json file or paste into the Arc editor

TypeScript Export

For React projects, diagrams can be exported as TypeScript:

import type { ArcDiagramData } from '@arach/arc'

const diagram: ArcDiagramData = {
  // ... config here
}

export default diagram