excalidraw-generator
Excalidraw Diagram Generator
Create complete, valid .excalidraw.json files that users can directly open at excalidraw.com.
Core Capabilities
Diagram types supported:
- Flowcharts - Process flows, decision trees, workflows
- Architecture Diagrams - System architectures, network topologies, component diagrams
- UML Diagrams - Class diagrams, sequence diagrams, use case diagrams
- Mind Maps - Hierarchical concept maps, brainstorming diagrams
Two visual styles:
- Professional Mode (default): Clean, polished diagrams for technical documentation
- Hand-drawn Mode: Sketch-style diagrams for brainstorming and informal use
Quick Reference
JSON Schema
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Coordinate System
- Origin: Top-left corner (0, 0)
- X-axis: Increases rightward
- Y-axis: Increases downward
- Unit: Pixels
Grid-Based Layout System
Use a 20px grid for alignment:
GRID_UNIT = 20
COLUMN_WIDTH = 200 # Element + gap
ROW_HEIGHT = 150 # Element + gap
Position formula:
x = START_X + (column * COLUMN_WIDTH)
y = START_Y + (row * ROW_HEIGHT)
Recommended START_X = 50, START_Y = 100
Standard Element Sizes
| Element | Width | Height | Use Case |
|---|---|---|---|
| Small box | 120 | 60 | Labels, simple steps |
| Standard box | 160 | 80 | Process steps |
| Large box | 200 | 100 | Detailed nodes |
| Wide box | 240 | 80 | Long text |
| Diamond | 100 | 100 | Decision points |
| Circle | 80 | 80 | Start/End nodes |
Text Calculations (CRITICAL)
Text Height Formula
textHeight = fontSize × lineHeight × numberOfLines
= fontSize × 1.25 × numberOfLines
Examples:
- 1 line, fontSize 20: 20 × 1.25 × 1 = 25px
- 3 lines, fontSize 14: 14 × 1.25 × 3 = 52.5px ≈ 53px
- 12 lines, fontSize 15: 15 × 1.25 × 12 = 225px
Text Centering Formula
text_x = shape_x + (shape_width - text_width) / 2
text_y = shape_y + (shape_height - text_height) / 2
Text Size Reference
| Font Size | Char Width | Line Height | Use |
|---|---|---|---|
| 11 | ~6px | 15px | Labels, annotations |
| 12 | ~7px | 16px | Secondary text |
| 14 | ~8px | 18px | Body text |
| 16 | ~9px | 20px | Primary text |
| 18 | ~10px | 24px | Headings |
| 20 | ~11px | 26px | Titles |
| 28 | ~16px | 35px | Icons/Emoji |
Estimate text_width: char_count × char_width
Centering Example
Shape: x=100, y=100, width=160, height=80
Text: "Process" (7 chars), fontSize=16
text_width = 7 × 9 = 63
text_height = 1 × 20 = 20
text_x = 100 + (160 - 63) / 2 = 148.5 ≈ 148
text_y = 100 + (80 - 20) / 2 = 130
UML Class Diagram Container Height
containerHeight = headerHeight + attributesHeight + methodsHeight + padding
Where:
- headerHeight = classNameTextHeight + topPadding (typically 15px + 15px = 30px)
- attributesHeight = fontSize × 1.25 × numberOfAttributes + 10px
- methodsHeight = fontSize × 1.25 × numberOfMethods + 10px
Example (12 attributes, 10 methods, fontSize 15):
- Header: 20 + 15 = 35px
- Attributes: 15 × 1.25 × 12 + 10 = 235px
- Methods: 15 × 1.25 × 10 + 10 ≈ 198px
- Total: 35 + 10 + 235 + 10 + 198 = 488px (round to 500px)
Arrow Positioning
Horizontal Arrow (Left to Right)
From shape at (x1, y1, w1, h1) to shape at (x2, y2, w2, h2):
arrow_x = x1 + w1 # Right edge of source
arrow_y = y1 + h1/2 # Vertical center
gap = x2 - (x1 + w1) # Space between shapes
points = [[0, 0], [gap, 0]]
Vertical Arrow (Top to Bottom)
arrow_x = x1 + w1/2 # Horizontal center
arrow_y = y1 + h1 # Bottom edge of source
gap = y2 - (y1 + h1)
points = [[0, 0], [0, gap]]
Feedback Loop (Return Arrow)
From bottom-right back to left:
Start: (800, 400)
points=[
[0, 0], # Start
[0, 80], # Down
[-400, 80], # Left
[-400, -150] # Up to target
]
Z-Order (Element Array Order)
Elements render in array order. First = back, last = front.
Correct order:
- Background shapes (containers, frames)
- Connection lines/arrows
- Foreground shapes (nodes, boxes)
- Text labels
- Icons/overlays
Visual Styles
Professional Mode (Default)
Use for: Architecture diagrams, UML, technical docs, formal presentations
{
"roughness": 0,
"fillStyle": "solid",
"strokeWidth": 2,
"fontFamily": 2
}
Colors (light backgrounds for readability):
| Purpose | Background |
|---|---|
| Primary | #e7f5ff |
| Success | #ebfbee |
| Warning | #fff9db |
| Accent | #f3f0ff |
| Secondary | #fff4e6 |
Hand-drawn Mode
Use for: Brainstorming, sketches, informal sharing
{
"roughness": 1,
"fillStyle": "hachure",
"strokeWidth": 2,
"fontFamily": 1
}
Colors (medium saturation):
| Purpose | Background |
|---|---|
| Primary | #a5d8ff |
| Success | #b2f2bb |
| Warning | #ffec99 |
| Error | #ffc9c9 |
| Accent | #d0bfff |
| Secondary | #ffd8a8 |
Stroke color: #1e1e1e (dark gray, softer than pure black)
Element Types
Common Properties (required for all)
{
"id": "unique-id",
"type": "rectangle",
"x": 100,
"y": 100,
"width": 160,
"height": 80,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"roughness": 1,
"opacity": 100,
"angle": 0,
"seed": 100,
"version": 1,
"isDeleted": false,
"boundElements": null,
"link": null,
"locked": false
}
Type-Specific Properties
Rectangle: Add "roundness": {"type": 3} for rounded corners
Text:
{
"type": "text",
"text": "Content\nLine 2",
"fontSize": 16,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle"
}
- fontFamily: 1=Virgil (hand), 2=Helvetica, 3=Cascadia (mono)
Arrow/Line:
{
"type": "arrow",
"points": [[0, 0], [100, 0]],
"startArrowhead": null,
"endArrowhead": "arrow"
}
- Points are relative to element's x,y
- Arrowheads:
null,"arrow","bar","dot","triangle"
Workflow
Step 1: Identify Diagram Type
Match the request to a diagram type:
- Flowchart: Process flows, algorithms, decision trees, workflows
- Architecture: System designs, microservices, cloud infrastructure
- UML Class: Object-oriented design, class hierarchies, relationships
- Mind Map: Brainstorming, concept hierarchies, topic exploration
Step 2: Use Templates as Foundation
Templates in assets/:
flowchart-template.jsonarchitecture-template.jsonuml-class-template.jsonmindmap-template.json
Usage:
- Read the appropriate template
- Modify IDs, text, positions, colors
- Add/remove elements as needed
- Ensure all IDs are unique
Step 3: Generate Elements
Key element types:
rectangle- Boxes, containers, processesellipse- Start/end nodes, databasesdiamond- Decisions, conditional branchesarrow/line- Connections, flowstext- Labels, descriptions
Step 4: Calculate Layout
Use the grid system and text centering formulas above.
Layout strategies:
- Flowcharts: Top-to-bottom, centered alignment
- Architecture: Left-to-right for flow, grouped by layer
- UML Class: Use container height formula; prevent text overflow
- Mind Maps: Radial from center, balanced branches
Step 5: Style and Polish
- Choose visual style (Professional or Hand-drawn)
- Apply consistent colors from the palette
- Ensure adequate spacing (80-100px between elements)
Step 6: Save to File
Always save directly as .excalidraw.json (no code blocks).
- Write complete JSON to file
- Name descriptively (e.g.,
user-login-flow.excalidraw.json) - Save to current directory unless specified otherwise
After saving, provide:
- Confirmation with file path
- Brief description of diagram structure
- Instructions: "Open at excalidraw.com → Menu → Open"
Common Patterns
Pattern 1: Sequential Flow
For A → B → C processes:
- Place elements vertically with 120px gaps
- Use rectangles for processes, ellipses for start/end
- Connect with arrows (endArrowhead: "arrow")
- Center-align all elements
Pattern 2: Decision Tree
For conditional branches:
- Use diamond for decision nodes
- Branch arrows left/right or up/down
- Add text labels on arrows ("Yes", "No")
- Rejoin paths when appropriate
Pattern 3: Hierarchical Structure
For layered architectures:
- Group elements by layer (horizontal rows)
- Use different colors per layer
- Vertical arrows show dependencies
- Consistent element sizes within layers
Pattern 4: Radial Mind Map
For concept exploration:
- Central node (ellipse) in middle
- Lines radiate outward
- Different colors per branch
- Rectangles for sub-topics
Positioning Checklist
Before generating:
- Define grid: START_X, START_Y, COLUMN_WIDTH, ROW_HEIGHT
- List all elements with row/column positions
- Calculate exact x,y using formulas
- Calculate text positions using centering formula
- Calculate arrow start points and relative endpoints
- Order elements correctly for z-order
- Assign unique IDs and incrementing seeds
Complete Node Example
[
{
"id": "node1-box",
"type": "rectangle",
"x": 100, "y": 100, "width": 160, "height": 80,
"strokeColor": "#1971c2",
"backgroundColor": "#a5d8ff",
"fillStyle": "solid",
"strokeWidth": 2,
"roughness": 1,
"opacity": 100,
"angle": 0,
"seed": 100,
"version": 1,
"isDeleted": false,
"boundElements": [{"id": "arrow1", "type": "arrow"}],
"roundness": {"type": 3},
"link": null,
"locked": false
},
{
"id": "node1-text",
"type": "text",
"x": 130, "y": 130,
"width": 100, "height": 20,
"text": "Process Step",
"fontSize": 16,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"roughness": 1,
"opacity": 100,
"angle": 0,
"seed": 101,
"version": 1,
"isDeleted": false,
"boundElements": null,
"link": null,
"locked": false
}
]
Tips for Quality Diagrams
- Unique IDs: Generate random 8-16 character IDs for each element
- Consistent spacing: Follow spacing guidelines strictly
- Color harmony: Use the recommended color palette
- Text sizing: Match text width to container width with padding
- Arrow connections: Position arrow start/end points precisely
- Version numbers: Use random integers for versionNonce and seed
Handling Complex Requests
For large or complex diagrams:
- Start simple: Create core structure first
- Iterate: Add details progressively
- Group logically: Use visual grouping (colors, spacing)
- Limit complexity: Suggest breaking into multiple diagrams if needed
- Maintain readability: Ensure text doesn't overlap, adequate spacing
Resources
assets/
Templates for common diagram types:
flowchart-template.jsonarchitecture-template.jsonuml-class-template.jsonmindmap-template.json
references/
excalidraw-format.md- Complete JSON format specificationelements.md- Element types and propertiesprocessing-loop-template.md- Processing loop example