Claude-skill-registry excalidraw-diagrams

Generate architecture diagrams as .excalidraw files from codebase analysis. Use when the user asks to create architecture diagrams, system diagrams, visualize codebase structure, or generate excalidraw files.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/excalidraw-diagrams" ~/.claude/skills/majiayu000-claude-skill-registry-excalidraw-diagrams && rm -rf "$T"
manifest: skills/data/excalidraw-diagrams/SKILL.md
source content

Excalidraw Diagram Generator

Generate architecture diagrams as

.excalidraw
files directly from codebase analysis.


Quick Start

User just asks:

"Generate an architecture diagram for this project"
"Create an excalidraw diagram of the system"
"Visualize this codebase as an excalidraw file"

Claude Code will:

  1. Analyze the codebase (any language/framework)
  2. Identify components, services, databases, APIs
  3. Map relationships and data flows
  4. Generate valid
    .excalidraw
    JSON with dynamic IDs and labels

No prerequisites: Works without existing diagrams, Terraform, or specific file types.


Critical Rules

1. NEVER Use Diamond Shapes

Diamond arrow connections are broken in raw Excalidraw JSON. Use styled rectangles instead:

Semantic MeaningRectangle Style
Orchestrator/HubCoral (
#ffa8a8
/
#c92a2a
) + strokeWidth: 3
Decision PointOrange (
#ffd8a8
/
#e8590c
) + dashed stroke

2. Labels Require TWO Elements

The

label
property does NOT work in raw JSON. Every labeled shape needs:

// 1. Shape with boundElements reference
{
  "id": "my-box",
  "type": "rectangle",
  "boundElements": [{ "type": "text", "id": "my-box-text" }]
}

// 2. Separate text element with containerId
{
  "id": "my-box-text",
  "type": "text",
  "containerId": "my-box",
  "text": "My Label"
}

3. Elbow Arrows Need Three Properties

For 90-degree corners (not curved):

{
  "type": "arrow",
  "roughness": 0,        // Clean lines
  "roundness": null,     // Sharp corners
  "elbowed": true        // 90-degree mode
}

4. Arrow Edge Calculations

Arrows must start/end at shape edges, not centers:

EdgeFormula
Top
(x + width/2, y)
Bottom
(x + width/2, y + height)
Left
(x, y + height/2)
Right
(x + width, y + height/2)

Detailed arrow routing: See

references/arrows.md


Element Types

TypeUse For
rectangle
Services, databases, containers, orchestrators
ellipse
Users, external systems, start/end points
text
Labels inside shapes, titles, annotations
arrow
Data flow, connections, dependencies
line
Grouping boundaries, separators

Full JSON format: See

references/json-format.md


Workflow

Step 1: Analyze Codebase

Discover components by looking for:

Codebase TypeWhat to Look For
Monorepo
packages/*/package.json
, workspace configs
Microservices
docker-compose.yml
, k8s manifests
IaCTerraform/Pulumi resource definitions
Backend APIRoute definitions, controllers, DB models
FrontendComponent hierarchy, API calls

Use tools:

  • Glob
    **/package.json
    ,
    **/Dockerfile
    ,
    **/*.tf
  • Grep
    app.get
    ,
    @Controller
    ,
    CREATE TABLE
  • Read
    → README, config files, entry points

Step 2: Plan Layout

Vertical flow (most common):

Row 1: Users/Entry points (y: 100)
Row 2: Frontend/Gateway (y: 230)
Row 3: Orchestration (y: 380)
Row 4: Services (y: 530)
Row 5: Data layer (y: 680)

Columns: x = 100, 300, 500, 700, 900
Element size: 160-200px x 80-90px

Other patterns: See

references/examples.md

Step 3: Generate Elements

For each component:

  1. Create shape with unique
    id
  2. Add
    boundElements
    referencing text
  3. Create text with
    containerId
  4. Choose color based on type

Color palettes: See

references/colors.md

Step 4: Add Connections

For each relationship:

  1. Calculate source edge point
  2. Plan elbow route (avoid overlaps)
  3. Create arrow with
    points
    array
  4. Match stroke color to destination type

Arrow patterns: See

references/arrows.md

Step 5: Add Grouping (Optional)

For logical groupings:

  • Large transparent rectangle with
    strokeStyle: "dashed"
  • Standalone text label at top-left

Step 6: Validate and Write

Run validation before writing. Save to

docs/
or user-specified path.

Validation checklist: See

references/validation.md


Quick Arrow Reference

Straight down:

{ "points": [[0, 0], [0, 110]], "x": 590, "y": 290 }

L-shape (left then down):

{ "points": [[0, 0], [-325, 0], [-325, 125]], "x": 525, "y": 420 }

U-turn (callback):

{ "points": [[0, 0], [50, 0], [50, -125], [20, -125]], "x": 710, "y": 440 }

Arrow width/height = bounding box of points:

points [[0,0], [-440,0], [-440,70]] → width=440, height=70

Multiple arrows from same edge - stagger positions:

5 arrows: 20%, 35%, 50%, 65%, 80% across edge width

Default Color Palette

ComponentBackgroundStroke
Frontend
#a5d8ff
#1971c2
Backend/API
#d0bfff
#7048e8
Database
#b2f2bb
#2f9e44
Storage
#ffec99
#f08c00
AI/ML
#e599f7
#9c36b5
External APIs
#ffc9c9
#e03131
Orchestration
#ffa8a8
#c92a2a
Message Queue
#fff3bf
#fab005
Cache
#ffe8cc
#fd7e14
Users
#e7f5ff
#1971c2

Cloud-specific palettes: See

references/colors.md


Quick Validation Checklist

Before writing file:

  • Every shape with label has boundElements + text element
  • Text elements have containerId matching shape
  • Multi-point arrows have
    elbowed: true
    ,
    roundness: null
  • Arrow x,y = source shape edge point
  • Arrow final point offset reaches target edge
  • No diamond shapes
  • No duplicate IDs

Full validation algorithm: See

references/validation.md


Common Issues

IssueFix
Labels don't appearUse TWO elements (shape + text), not
label
property
Arrows curvedAdd
elbowed: true
,
roundness: null
,
roughness: 0
Arrows floatingCalculate x,y from shape edge, not center
Arrows overlappingStagger start positions across edge

Detailed bug fixes: See

references/validation.md


Reference Files

FileContents
references/json-format.md
Element types, required properties, text bindings
references/arrows.md
Routing algorithm, patterns, bindings, staggering
references/colors.md
Default, AWS, Azure, GCP, K8s palettes
references/examples.md
Complete JSON examples, layout patterns
references/validation.md
Checklists, validation algorithm, bug fixes

Output

  • Location:
    docs/architecture/
    or user-specified
  • Filename: Descriptive, e.g.,
    system-architecture.excalidraw
  • Testing: Open in https://excalidraw.com or VS Code extension