Excalidraw Diagram Creator
Version: 9.0 | Updated: 01-July-2026 | Architect: Karim Bhalwani | Deps: none
Overview
Generate .excalidraw JSON files that argue visually, not just display information. Every diagram produced by this skill uses shape, layout, and color to mirror the concept it represents - not just label it.
Output files are saved to an excalidraw/ directory (created automatically if it does not exist). Users open .excalidraw files in the VS Code Excalidraw extension, at excalidraw.com, or in Obsidian.
Core Philosophy
Diagrams should ARGUE, not DISPLAY.
A diagram is not formatted text. It is a visual argument that shows relationships, causality, and flow that words alone cannot express. The shape should BE the meaning.
- The Isomorphism Test: If you removed all text, would the structure alone communicate the concept? If not, redesign.
- The Education Test: Could someone learn something concrete from this diagram, or does it just label boxes? A good diagram teaches.
When to Use
- Visualizing system architectures alongside
SPEC.md
- Illustrating data pipelines (ETL, Medallion, Data Vault)
- Documenting RAG pipelines, agent workflows, or prompt flows
- Creating component interaction diagrams or state machines
- Mapping workflows and process flows for planning
- Producing before/after comparisons for refactoring proposals
- Any request for a diagram, visualization, flowchart, or architecture picture
Workflow
Step 0: Assess Depth Required
Before designing, determine what level of detail this diagram needs:
- Simple/Conceptual: Abstract shapes, labels, relationships. Use for mental models, philosophies, quick overviews.
- Comprehensive/Technical: Concrete examples, real data formats, actual event names. Use for systems, architectures, tutorials.
For technical diagrams, research actual specifications before drawing. Look up real event names, API endpoints, data formats - never use generic placeholders.
Step 1: Understand Deeply
Read the content. For each concept, ask:
- What does this concept DO? (not what IS it)
- What relationships exist between concepts?
- What is the core transformation or flow?
- What would someone need to SEE to understand this?
Step 2: Map Concepts to Visual Patterns
For each concept, find the visual pattern that mirrors its behavior. Consult references/visual-patterns.md for the full pattern library.
| If the concept... |
Use this pattern |
| Spawns multiple outputs |
Fan-out (radial arrows from center) |
| Combines inputs into one |
Convergence (funnel, arrows merging) |
| Has hierarchy or nesting |
Tree (lines + free-floating text) |
| Is a sequence of steps |
Timeline (line + dots + labels) |
| Loops or improves continuously |
Spiral/Cycle (arrow returning to start) |
| Is an abstract state or context |
Cloud (overlapping ellipses) |
| Transforms input to output |
Assembly line (before → process → after) |
| Compares two things |
Side-by-side (parallel with contrast) |
| Separates into phases |
Gap/Break (visual separation) |
Step 3: Ensure Variety
For multi-concept diagrams: each major concept must use a different visual pattern. No uniform card grids. No equal boxes. Visual variety mirrors conceptual variety.
Step 4: Sketch the Flow
Before writing JSON, mentally trace how the eye moves through the diagram. There should be a clear visual story - typically left→right or top→bottom.
Step 5: Generate JSON
Create the .excalidraw file. For the JSON structure, element templates, and color palette, consult:
references/color-palette.md - All color choices
references/element-templates.md - Copy-paste JSON for each element type
references/json-schema.md - Excalidraw JSON format
Output directory: Save all .excalidraw files to the excalidraw/ directory at the workspace root. Create the directory if it does not exist.
File naming: Use kebab-case descriptive names: auth-architecture.excalidraw, etl-pipeline-flow.excalidraw, rag-pipeline.excalidraw.
Step 6: Verify Structure
After generating JSON, review the file against the Definition of Done checklist below. Verify element bindings, spacing, and that every relationship has an arrow or line.
Depth Levels
Simple / Conceptual Diagrams
Use abstract shapes when:
- Explaining a mental model or philosophy
- The audience does not need technical specifics
- The concept IS the abstraction (e.g., "separation of concerns")
Comprehensive / Technical Diagrams
Use concrete examples when:
- Diagramming a real system, protocol, or architecture
- The audience needs to understand what things actually look like
- You are showing how multiple technologies integrate
For technical diagrams, include evidence artifacts - code snippets, JSON payloads, real event names embedded directly in the diagram using dark-background rectangles with colored text. See references/color-palette.md for evidence artifact colors.
Multi-Zoom Architecture
Comprehensive diagrams operate at multiple zoom levels simultaneously:
| Level |
What It Shows |
Example |
| Level 1: Summary Flow |
Full pipeline at a glance |
Input → Processing → Output |
| Level 2: Section Boundaries |
Labeled regions grouping related components |
Backend / Frontend, Setup / Execution / Cleanup |
| Level 3: Detail Inside Sections |
Evidence artifacts, code snippets, concrete examples |
Actual API response format inside a "Backend" section |
For comprehensive diagrams, aim to include all three levels.
Container vs. Free-Floating Text
Not every piece of text needs a shape around it. Default to free-floating text. Add containers only when they serve a purpose.
| Use a Container When... |
Use Free-Floating Text When... |
| It is the focal point of a section |
It is a label or description |
| It needs visual grouping with other elements |
It is supporting detail or metadata |
| Arrows need to connect to it |
It describes something nearby |
| The shape itself carries meaning (diamond = decision) |
Typography alone creates sufficient hierarchy |
| It represents a distinct "thing" in the system |
It is a section title or annotation |
Rule: Aim for <30% of text elements inside containers. Use font size and color for hierarchy instead of boxes.
Shape Meaning
Choose shape based on what it represents - or use no shape at all:
| Concept Type |
Shape |
Why |
| Labels, descriptions |
none (free-floating text) |
Typography creates hierarchy |
| Section titles |
none (free-floating text) |
Font size/weight is enough |
| Timeline markers |
small ellipse (10-20px) |
Visual anchor, not container |
| Start, trigger, input |
ellipse |
Soft, origin-like |
| End, output, result |
ellipse |
Completion, destination |
| Decision, condition |
diamond |
Classic decision symbol |
| Process, action, step |
rectangle |
Contained action |
| Abstract state, context |
overlapping ellipse |
Fuzzy, cloud-like |
| Hierarchy node |
lines + text (no boxes) |
Structure through lines |
Layout Principles
- Hierarchy Through Scale: Hero elements 300×150, primary 180×90, secondary 120×60, small 60×40
- Whitespace = Importance: The most important element has 200px+ of empty space around it
- Flow Direction: Guide the eye left→right or top→bottom for sequences, radial for hub-and-spoke
- Connections Required: If A relates to B, there must be an arrow. Position alone does not show relationships.
Modern Aesthetics
- Roughness:
roughness: 0 for clean modern diagrams (default). Use roughness: 1 only for hand-drawn/informal.
- Stroke Width:
1 = thin/elegant, 2 = standard shapes/arrows, 3 = bold emphasis (use sparingly)
- Opacity: Always
opacity: 100. Use color, size, and stroke width for hierarchy instead of transparency.
- Small Markers: Use 10-20px ellipses as timeline markers, bullet points, and visual anchors instead of full shapes.
Large Diagram Strategy
For comprehensive or technical diagrams, build the JSON one section at a time. Do NOT generate the entire file in a single pass.
- Create the base file with the JSON wrapper and first section of elements.
- Add one section per edit. Each section gets its own dedicated pass.
- Use descriptive string IDs (e.g.,
"trigger_rect", "arrow_fan_left") for readability.
- Namespace seeds by section (section 1 uses 100xxx, section 2 uses 200xxx) to avoid collisions.
- Update cross-section bindings as you go - edit earlier elements'
boundElements when adding connecting arrows.
After all sections are in place, review the complete JSON for binding correctness and spacing balance.
Outputs & Deliverables
- Primary Output:
.excalidraw JSON file saved to excalidraw/ directory
- Secondary Output: Brief description of the diagram's structure and how to open it
- Success Criteria: Diagram passes the Isomorphism Test and Education Test
- Quality Gate: All elements properly bound, no orphaned arrows, visual variety present
Definition of Done
Conceptual Checks
Container Discipline
Structural Checks
Technical Checks
Evidence Checks (Technical Diagrams Only)
Constraints
- NO render pipeline. This skill generates
.excalidraw JSON only. Users view diagrams in VS Code Excalidraw extension, excalidraw.com, or Obsidian.
- NO image generation. Output is structured JSON, not PNG/SVG.
- NO implementation code. Diagrams only - do not implement systems shown in diagrams.
- NO inventing colors. All colors must come from
references/color-palette.md.
Common Pitfalls
- Uniform Card Grids: Making every concept the same rectangle in a grid. Each concept should use a visual pattern that mirrors its behavior.
- Everything in Boxes: Putting every label in a rectangle. Default to free-floating text; add containers only when they carry meaning.
- Generic Placeholders: Using "Event 1", "Step A", "Input" instead of real terminology. Research actual names, formats, and data.
- Missing Connections: Placing elements near each other without arrows. Proximity does not show relationships - arrows do.
- Ignoring Scale Hierarchy: Making all elements the same size. Important elements should be visually dominant (larger, more whitespace).
- Broken Bindings: Arrow
startBinding/endBinding referencing element IDs that do not exist, or missing boundElements on the target shape.
- Token Overflow on Large Diagrams: Generating entire comprehensive diagrams in one pass. Build section-by-section to stay within output limits.
Integration Points
| Phase |
Input From |
Output To |
Context |
| Architecture |
architect |
SPEC.md companion |
Visual architecture alongside specification |
| Data Design |
data-engineering |
Pipeline documentation |
ETL/Medallion/Data Vault visualizations |
| AI Systems |
llm-app-patterns |
Pattern documentation |
RAG pipeline and agent architecture diagrams |
| Planning |
concise-planning |
Workflow visualization |
Process flow diagrams for implementation |
| Discovery |
brainstorming |
Idea visualization |
Visual exploration of design options |
| Review |
guardian |
Review documentation |
Architecture review visual aids |
References
Load these before generating any diagram:
Reference Documents
- color-palette.md - Single source of truth for all color choices. Load before generating any diagram. Contains semantic shape colors, text hierarchy colors, and evidence artifact colors.
- element-templates.md - Copy-paste JSON templates for each Excalidraw element type (text, rectangle, arrow, line, ellipse, diamond). Pull colors from color-palette.md based on each element's semantic purpose.
- json-schema.md - Excalidraw JSON format reference. Element types, common properties, text-specific properties, arrow bindings, and the top-level file structure.
- visual-patterns.md - Visual pattern library with ASCII examples. Nine reusable patterns (fan-out, convergence, tree, timeline, cycle, cloud, assembly line, side-by-side, gap/break) with when-to-use guidance and implementation notes.
1---2name: excalidraw-diagram3description: Generate structured, argumentative Excalidraw diagrams from natural language descriptions. Use when creating architecture diagrams, system visualizations, data flow diagrams, pipeline visualizations, workflow charts, or any technical illustration that outputs .excalidraw JSON files. DO NOT USE FOR: Mermaid or markdown diagrams, text-based documentation (use brainstorming or architect), code generation, or non-visual output.4license: MIT5---67# Excalidraw Diagram Creator89> Version: 9.0 | Updated: 01-July-2026 | Architect: Karim Bhalwani | Deps: none1011## Overview1213Generate `.excalidraw` JSON files that **argue visually**, not just display information. Every diagram produced by this skill uses shape, layout, and color to mirror the concept it represents - not just label it.1415Output files are saved to an `excalidraw/` directory (created automatically if it does not exist). Users open `.excalidraw` files in the VS Code Excalidraw extension, at excalidraw.com, or in Obsidian.1617## Core Philosophy1819**Diagrams should ARGUE, not DISPLAY.**2021A diagram is not formatted text. It is a visual argument that shows relationships, causality, and flow that words alone cannot express. The shape should BE the meaning.2223- **The Isomorphism Test**: If you removed all text, would the structure alone communicate the concept? If not, redesign.24- **The Education Test**: Could someone learn something concrete from this diagram, or does it just label boxes? A good diagram teaches.2526## When to Use2728- Visualizing system architectures alongside `SPEC.md`29- Illustrating data pipelines (ETL, Medallion, Data Vault)30- Documenting RAG pipelines, agent workflows, or prompt flows31- Creating component interaction diagrams or state machines32- Mapping workflows and process flows for planning33- Producing before/after comparisons for refactoring proposals34- Any request for a diagram, visualization, flowchart, or architecture picture3536## Workflow3738### Step 0: Assess Depth Required3940Before designing, determine what level of detail this diagram needs:4142- **Simple/Conceptual**: Abstract shapes, labels, relationships. Use for mental models, philosophies, quick overviews.43- **Comprehensive/Technical**: Concrete examples, real data formats, actual event names. Use for systems, architectures, tutorials.4445For technical diagrams, research actual specifications before drawing. Look up real event names, API endpoints, data formats - never use generic placeholders.4647### Step 1: Understand Deeply4849Read the content. For each concept, ask:5051- What does this concept **DO**? (not what IS it)52- What relationships exist between concepts?53- What is the core transformation or flow?54- What would someone need to **SEE** to understand this?5556### Step 2: Map Concepts to Visual Patterns5758For each concept, find the visual pattern that mirrors its behavior. Consult `references/visual-patterns.md` for the full pattern library.5960| If the concept... | Use this pattern |61| ------------------------------- | -------------------------------------------- |62| Spawns multiple outputs | **Fan-out** (radial arrows from center) |63| Combines inputs into one | **Convergence** (funnel, arrows merging) |64| Has hierarchy or nesting | **Tree** (lines + free-floating text) |65| Is a sequence of steps | **Timeline** (line + dots + labels) |66| Loops or improves continuously | **Spiral/Cycle** (arrow returning to start) |67| Is an abstract state or context | **Cloud** (overlapping ellipses) |68| Transforms input to output | **Assembly line** (before → process → after) |69| Compares two things | **Side-by-side** (parallel with contrast) |70| Separates into phases | **Gap/Break** (visual separation) |7172### Step 3: Ensure Variety7374For multi-concept diagrams: **each major concept must use a different visual pattern**. No uniform card grids. No equal boxes. Visual variety mirrors conceptual variety.7576### Step 4: Sketch the Flow7778Before writing JSON, mentally trace how the eye moves through the diagram. There should be a clear visual story - typically left→right or top→bottom.7980### Step 5: Generate JSON8182Create the `.excalidraw` file. For the JSON structure, element templates, and color palette, consult:8384- `references/color-palette.md` - All color choices85- `references/element-templates.md` - Copy-paste JSON for each element type86- `references/json-schema.md` - Excalidraw JSON format8788**Output directory**: Save all `.excalidraw` files to the `excalidraw/` directory at the workspace root. Create the directory if it does not exist.8990**File naming**: Use kebab-case descriptive names: `auth-architecture.excalidraw`, `etl-pipeline-flow.excalidraw`, `rag-pipeline.excalidraw`.9192### Step 6: Verify Structure9394After generating JSON, review the file against the Definition of Done checklist below. Verify element bindings, spacing, and that every relationship has an arrow or line.9596## Depth Levels9798### Simple / Conceptual Diagrams99100Use abstract shapes when:101102- Explaining a mental model or philosophy103- The audience does not need technical specifics104- The concept IS the abstraction (e.g., "separation of concerns")105106### Comprehensive / Technical Diagrams107108Use concrete examples when:109110- Diagramming a real system, protocol, or architecture111- The audience needs to understand what things actually look like112- You are showing how multiple technologies integrate113114**For technical diagrams, include evidence artifacts** - code snippets, JSON payloads, real event names embedded directly in the diagram using dark-background rectangles with colored text. See `references/color-palette.md` for evidence artifact colors.115116## Multi-Zoom Architecture117118Comprehensive diagrams operate at multiple zoom levels simultaneously:119120| Level | What It Shows | Example |121| ----------------------------------- | ---------------------------------------------------- | ----------------------------------------------------- |122| **Level 1: Summary Flow** | Full pipeline at a glance | `Input → Processing → Output` |123| **Level 2: Section Boundaries** | Labeled regions grouping related components | Backend / Frontend, Setup / Execution / Cleanup |124| **Level 3: Detail Inside Sections** | Evidence artifacts, code snippets, concrete examples | Actual API response format inside a "Backend" section |125126For comprehensive diagrams, aim to include all three levels.127128## Container vs. Free-Floating Text129130**Not every piece of text needs a shape around it.** Default to free-floating text. Add containers only when they serve a purpose.131132| Use a Container When... | Use Free-Floating Text When... |133| ----------------------------------------------------- | --------------------------------------------- |134| It is the focal point of a section | It is a label or description |135| It needs visual grouping with other elements | It is supporting detail or metadata |136| Arrows need to connect to it | It describes something nearby |137| The shape itself carries meaning (diamond = decision) | Typography alone creates sufficient hierarchy |138| It represents a distinct "thing" in the system | It is a section title or annotation |139140**Rule**: Aim for <30% of text elements inside containers. Use font size and color for hierarchy instead of boxes.141142## Shape Meaning143144Choose shape based on what it represents - or use no shape at all:145146| Concept Type | Shape | Why |147| ----------------------- | ----------------------------- | ---------------------------- |148| Labels, descriptions | **none** (free-floating text) | Typography creates hierarchy |149| Section titles | **none** (free-floating text) | Font size/weight is enough |150| Timeline markers | small `ellipse` (10-20px) | Visual anchor, not container |151| Start, trigger, input | `ellipse` | Soft, origin-like |152| End, output, result | `ellipse` | Completion, destination |153| Decision, condition | `diamond` | Classic decision symbol |154| Process, action, step | `rectangle` | Contained action |155| Abstract state, context | overlapping `ellipse` | Fuzzy, cloud-like |156| Hierarchy node | lines + text (no boxes) | Structure through lines |157158## Layout Principles159160- **Hierarchy Through Scale**: Hero elements 300×150, primary 180×90, secondary 120×60, small 60×40161- **Whitespace = Importance**: The most important element has 200px+ of empty space around it162- **Flow Direction**: Guide the eye left→right or top→bottom for sequences, radial for hub-and-spoke163- **Connections Required**: If A relates to B, there must be an arrow. Position alone does not show relationships.164165## Modern Aesthetics166167- **Roughness**: `roughness: 0` for clean modern diagrams (default). Use `roughness: 1` only for hand-drawn/informal.168- **Stroke Width**: `1` = thin/elegant, `2` = standard shapes/arrows, `3` = bold emphasis (use sparingly)169- **Opacity**: Always `opacity: 100`. Use color, size, and stroke width for hierarchy instead of transparency.170- **Small Markers**: Use 10-20px ellipses as timeline markers, bullet points, and visual anchors instead of full shapes.171172## Large Diagram Strategy173174For comprehensive or technical diagrams, **build the JSON one section at a time**. Do NOT generate the entire file in a single pass.1751761. **Create the base file** with the JSON wrapper and first section of elements.1772. **Add one section per edit.** Each section gets its own dedicated pass.1783. **Use descriptive string IDs** (e.g., `"trigger_rect"`, `"arrow_fan_left"`) for readability.1794. **Namespace seeds by section** (section 1 uses 100xxx, section 2 uses 200xxx) to avoid collisions.1805. **Update cross-section bindings** as you go - edit earlier elements' `boundElements` when adding connecting arrows.181182After all sections are in place, review the complete JSON for binding correctness and spacing balance.183184## Outputs & Deliverables185186- **Primary Output**: `.excalidraw` JSON file saved to `excalidraw/` directory187- **Secondary Output**: Brief description of the diagram's structure and how to open it188- **Success Criteria**: Diagram passes the Isomorphism Test and Education Test189- **Quality Gate**: All elements properly bound, no orphaned arrows, visual variety present190191## Definition of Done192193### Conceptual Checks194195- [ ] Isomorphism: Each visual structure mirrors its concept's behavior196- [ ] Argument: The diagram shows something text alone could not197- [ ] Variety: Each major concept uses a different visual pattern198- [ ] No uniform containers: Avoided card grids and equal boxes199200### Container Discipline201202- [ ] Minimal containers: Most text is free-floating, <30% inside shapes203- [ ] Lines as structure: Tree/timeline patterns use lines + text, not boxes204- [ ] Typography hierarchy: Font size and color create visual hierarchy205206### Structural Checks207208- [ ] Connections: Every relationship has an arrow or line209- [ ] Flow: Clear visual path for the eye to follow210- [ ] Hierarchy: Important elements are larger and more isolated211212### Technical Checks213214- [ ] Text clean: `text` and `originalText` contain only readable words215- [ ] Font: `fontFamily: 3` on all text elements216- [ ] Roughness: `roughness: 0` unless hand-drawn style explicitly requested217- [ ] Opacity: `opacity: 100` on all elements218- [ ] Output location: File saved to `excalidraw/` directory219- [ ] Valid JSON: File is valid Excalidraw JSON with `type: "excalidraw"`, `version: 2`220221### Evidence Checks (Technical Diagrams Only)222223- [ ] Research done: Actual specs, formats, event names looked up224- [ ] Evidence artifacts: Code snippets, JSON examples, or real data included225- [ ] Multi-zoom: Summary flow + section boundaries + detail present226- [ ] Concrete over abstract: Real content shown, not just labeled boxes227228## Constraints229230- **NO render pipeline.** This skill generates `.excalidraw` JSON only. Users view diagrams in VS Code Excalidraw extension, excalidraw.com, or Obsidian.231- **NO image generation.** Output is structured JSON, not PNG/SVG.232- **NO implementation code.** Diagrams only - do not implement systems shown in diagrams.233- **NO inventing colors.** All colors must come from `references/color-palette.md`.234235## Common Pitfalls236237- **Uniform Card Grids**: Making every concept the same rectangle in a grid. Each concept should use a visual pattern that mirrors its behavior.238- **Everything in Boxes**: Putting every label in a rectangle. Default to free-floating text; add containers only when they carry meaning.239- **Generic Placeholders**: Using "Event 1", "Step A", "Input" instead of real terminology. Research actual names, formats, and data.240- **Missing Connections**: Placing elements near each other without arrows. Proximity does not show relationships - arrows do.241- **Ignoring Scale Hierarchy**: Making all elements the same size. Important elements should be visually dominant (larger, more whitespace).242- **Broken Bindings**: Arrow `startBinding`/`endBinding` referencing element IDs that do not exist, or missing `boundElements` on the target shape.243- **Token Overflow on Large Diagrams**: Generating entire comprehensive diagrams in one pass. Build section-by-section to stay within output limits.244245## Integration Points246247| Phase | Input From | Output To | Context |248| ------------ | ------------------ | ---------------------- | -------------------------------------------- |249| Architecture | `architect` | `SPEC.md` companion | Visual architecture alongside specification |250| Data Design | `data-engineering` | Pipeline documentation | ETL/Medallion/Data Vault visualizations |251| AI Systems | `llm-app-patterns` | Pattern documentation | RAG pipeline and agent architecture diagrams |252| Planning | `concise-planning` | Workflow visualization | Process flow diagrams for implementation |253| Discovery | `brainstorming` | Idea visualization | Visual exploration of design options |254| Review | `guardian` | Review documentation | Architecture review visual aids |255256## References257258Load these before generating any diagram:259260### Reference Documents261262- [color-palette.md](./references/color-palette.md) - Single source of truth for all color choices. Load before generating any diagram. Contains semantic shape colors, text hierarchy colors, and evidence artifact colors.263- [element-templates.md](./references/element-templates.md) - Copy-paste JSON templates for each Excalidraw element type (text, rectangle, arrow, line, ellipse, diamond). Pull colors from color-palette.md based on each element's semantic purpose.264- [json-schema.md](./references/json-schema.md) - Excalidraw JSON format reference. Element types, common properties, text-specific properties, arrow bindings, and the top-level file structure.265- [visual-patterns.md](./references/visual-patterns.md) - Visual pattern library with ASCII examples. Nine reusable patterns (fan-out, convergence, tree, timeline, cycle, cloud, assembly line, side-by-side, gap/break) with when-to-use guidance and implementation notes.