askill
excalidraw

excalidrawSafety 100Repository

Create hand-drawn style diagrams and flowcharts using Excalidraw

115 stars
2.3k downloads
Updated 3/12/2026

Package Files

Loading files...
SKILL.md

Excalidraw Diagrams

Create hand-drawn style diagrams, flowcharts, architecture diagrams, and mind maps using the Excalidraw format. Diagrams are rendered interactively in the Canvas panel.

When to Use This Skill

Use create_excalidraw_diagram when the user wants to visualize structure, flow, or relationships — not raw numbers.

Use this skill for...Use visualization skill for...
System architecture diagramSales figures by quarter
Flowchart or decision treeSurvey response percentages
Sequence / interaction diagramStock price over time
Mind map or concept mapMarket share breakdown
Shapes, boxes, arrows, labelsAny x/y or segment/value data

Available Tools

  • create_excalidraw_diagram(elements, title, background_color): Generate a diagram from Excalidraw element JSON

Color Palette

Use these colors consistently across all diagrams.

Primary Colors (strokes, arrows, text)

NameHexUse
Blue#4a9eedPrimary actions, links
Amber#f59e0bWarnings, highlights
Green#22c55eSuccess, positive
Red#ef4444Errors, negative
Purple#8b5cf6Accents, special items
Cyan#06b6d4Info, secondary

Fill Colors (shape backgrounds)

ColorHexGood For
Light Blue#a5d8ffInput, sources, primary nodes
Light Green#b2f2bbSuccess, output, completed
Light Orange#ffd8a8Warning, pending, external
Light Purple#d0bfffProcessing, middleware
Light Red#ffc9c9Error, critical
Light Yellow#fff3bfNotes, decisions
Light Teal#c3fae8Storage, data

Background Zone Colors (use with opacity: 35 for layer grouping)

ColorHexGood For
Blue zone#dbe4ffUI / frontend layer
Purple zone#e5dbffLogic / agent layer
Green zone#d3f9d8Data / tool layer

Element Format

Required Fields (all elements)

type, id (unique string), x, y, width, height

Defaults (skip if using these values)

strokeColor="#1e1e1e", backgroundColor="transparent", fillStyle="solid", strokeWidth=2, roughness=1, opacity=100

Shape Types

Rectangle

{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
  "roundness": { "type": 3 }, "backgroundColor": "#a5d8ff", "fillStyle": "solid" }
  • roundness: { type: 3 } for rounded corners

Ellipse

{ "type": "ellipse", "id": "e1", "x": 100, "y": 100, "width": 150, "height": 150 }

Diamond

{ "type": "diamond", "id": "d1", "x": 100, "y": 100, "width": 150, "height": 150 }

Label on shape (PREFERRED — no separate text element needed)

{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
  "label": { "text": "My Label", "fontSize": 20 } }
  • Works on rectangle, ellipse, diamond
  • Text auto-centers; container auto-resizes to fit
  • Also works on arrows: "label": { "text": "connects" }

Standalone Text (titles, annotations only)

{ "type": "text", "id": "t1", "x": 150, "y": 50, "text": "Title", "fontSize": 24 }
  • x is the LEFT edge. To center at position cx: set x = cx - text.length × fontSize × 0.25

Arrow

{ "type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 150, "height": 0,
  "points": [[0,0],[150,0]], "endArrowhead": "arrow",
  "startBinding": { "elementId": "r1", "fixedPoint": [1, 0.5] },
  "endBinding": { "elementId": "r2", "fixedPoint": [0, 0.5] } }
  • points: [dx, dy] offsets from element x, y
  • endArrowhead: null | "arrow" | "bar" | "dot" | "triangle"
  • strokeStyle: "solid" | "dashed" | "dotted"
  • fixedPoint for bindings: top [0.5,0], bottom [0.5,1], left [0,0.5], right [1,0.5]

Pseudo-Elements (not drawn — control behavior)

cameraUpdate — sets the viewport

{ "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 }
  • x, y: top-left corner of visible area (scene coordinates)
  • Must be 4:3 ratio: 400×300, 600×450, 800×600, 1200×900, 1600×1200
  • ALWAYS place a cameraUpdate as the first element to frame the diagram
  • No id needed

delete — removes elements by ID

{ "type": "delete", "ids": "r1,a1,t2" }
  • Comma-separated element IDs to remove
  • Use when updating an existing diagram to remove elements before adding replacements
  • Never reuse a deleted ID — assign new IDs to replacements

Camera Sizing Guide

The diagram displays at ~700px width. Use these standard sizes:

SizeWidth × HeightUse When
S400 × 3002–3 elements, close-up
M600 × 450Small diagram section
L800 × 600Standard (default)
XL1200 × 900Large overview
XXL1600 × 1200Very complex diagrams

Font size rules:

  • Body text / labels: minimum 16
  • Titles / headings: minimum 20
  • Annotations: minimum 14 (use sparingly)
  • At XL/XXL camera: increase minimums by ~4px

Element sizing rules:

  • Labeled rectangles/ellipses: minimum 120 × 60
  • Leave 20–30px gaps between elements

Updating an Existing Diagram

When the user asks to modify a diagram, you will receive the current elements in context. Respond with the complete updated elements array:

  • Keep the same id for unchanged elements
  • Modify fields on elements you want to change
  • Omit elements you want to remove
  • Add new elements with unique IDs not used before

Example: Flowchart

[
  { "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 },
  { "type": "rectangle", "id": "el-1",
    "x": 300, "y": 60, "width": 160, "height": 60,
    "strokeColor": "#4a9eed", "backgroundColor": "#a5d8ff",
    "fillStyle": "solid", "roundness": { "type": 3 },
    "label": { "text": "Start", "fontSize": 18 } },
  { "type": "diamond", "id": "el-2",
    "x": 280, "y": 170, "width": 200, "height": 90,
    "strokeColor": "#f59e0b", "backgroundColor": "#fff3bf",
    "fillStyle": "solid",
    "label": { "text": "Decision?", "fontSize": 16 } },
  { "type": "arrow", "id": "el-3",
    "x": 380, "y": 120, "width": 0, "height": 50,
    "points": [[0,0],[0,50]], "endArrowhead": "arrow",
    "startBinding": { "elementId": "el-1", "fixedPoint": [0.5, 1] },
    "endBinding": { "elementId": "el-2", "fixedPoint": [0.5, 0] } },
  { "type": "rectangle", "id": "el-4",
    "x": 300, "y": 320, "width": 160, "height": 60,
    "strokeColor": "#22c55e", "backgroundColor": "#b2f2bb",
    "fillStyle": "solid", "roundness": { "type": 3 },
    "label": { "text": "End", "fontSize": 18 } },
  { "type": "arrow", "id": "el-5",
    "x": 380, "y": 260, "width": 0, "height": 60,
    "points": [[0,0],[0,60]], "endArrowhead": "arrow",
    "startBinding": { "elementId": "el-2", "fixedPoint": [0.5, 1] },
    "endBinding": { "elementId": "el-4", "fixedPoint": [0.5, 0] } }
]

Common Mistakes to Avoid

  • Camera must use exact 4:3 ratios — non-4:3 viewports cause distortion
  • Always start with cameraUpdate — without it the viewport is unpredictable
  • No comments in element arrayselements must be valid JSON. Never add // or /* */ comments inside the array; they break JSON parsing
  • Text contrast — never use light gray on white. Minimum text color on white: #757575. For text on light fills use dark variants (#15803d not #22c55e)
  • Arrow labels need space — long labels overflow short arrows; keep labels short or widen arrows
  • No emoji — Excalidraw's font does not render emoji
  • Element overlap — check that labels, boxes, and zone overlays don't stack on each other (minimum 20px gap)
  • Camera padding — leave padding inside the camera frame; don't match camera size exactly to content size

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

88/100Analyzed 2/23/2026

High-quality technical skill for Excalidraw diagram creation with comprehensive color palettes, element formatting, camera sizing, and examples. Well-organized with clear sections including a useful 'When to Use This Skill' comparison table. Slight deduction for internal path location but content is generic and highly reusable. Minor gaps in metadata (no tags, no icon URL) but otherwise excellent completeness and actionability.

100
90
85
95
95

Metadata

Licenseunknown
Version-
Updated3/12/2026
Publisheraws-samples

Tags

No tags yet.