Draw io skill
Draw.io diagram creation, editing, and review.
by davila7·MIT license·★ 32,299 Stars on the repo·GitHub ↗
npx degit davila7/claude-code-templates/cli-tool/components/skills/creative-design/draw-io#main ~/.claude/skills/draw-ioChecked ·commit main
Files of Draw io
Show the full text279 lines
draw.io Diagram Skill
1. Basic Rules
- Edit only
.drawiofiles - Do not directly edit
.drawio.pngfiles - Use auto-generated
.drawio.pngby pre-commit hook in slides
2. Font Settings
For diagrams used in Quarto slides,
specify defaultFontFamily in mxGraphModel tag:
<mxGraphModel defaultFontFamily="Noto Sans JP" ...>
Also explicitly specify fontFamily in each text element's style attribute:
style="text;html=1;fontSize=27;fontFamily=Noto Sans JP;"
3. Conversion Commands
See conversion script at scripts/convert-drawio-to-png.sh.
# Convert all .drawio files
mise exec -- pre-commit run --all-files
# Convert specific .drawio file
mise exec -- pre-commit run convert-drawio-to-png --files assets/my-diagram.drawio
# Run script directly (using skill's script)
bash ~/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh assets/diagram1.drawio
Internal command used:
drawio -x -f png -s 2 -t -o output.drawio.png input.drawio
| Option | Description |
|---|---|
-x |
Export mode |
-f png |
PNG format output |
-s 2 |
2x scale (high resolution) |
-t |
Transparent background |
-o |
Output file path |
4. Layout Adjustment
4.1. Coordinate Adjustment Steps
- Open
.drawiofile in text editor (plain XML format) - Find
mxCellfor element to adjust (search byvalueattribute for text) - Adjust coordinates in
mxGeometrytagx: Position from lefty: Position from topwidth: Widthheight: Height
- Run conversion and verify
4.2. Coordinate Calculation
- Element center coordinate =
y + (height / 2) - To align multiple elements, calculate and match center coordinates
5. Design Principles
5.1. Basic Principles
- Clarity: Create simple, visually clean diagrams
- Consistency: Unify colors, fonts, icon sizes, line thickness
- Accuracy: Do not sacrifice accuracy for simplification
5.2. Element Rules
- Label all elements
- Use arrows to indicate direction (prefer 2 unidirectional arrows over bidirectional)
- Use latest official icons
- Add legend to explain custom symbols
5.3. Accessibility
- Ensure sufficient color contrast
- Use patterns in addition to colors
5.4. Progressive Disclosure
Separate complex systems into staged diagrams:
| Diagram Type | Purpose |
|---|---|
| Context Diagram | System overview from external perspective |
| System Diagram | Main components and relationships |
| Component Diagram | Technical details and integration points |
| Deployment Diagram | Infrastructure configuration |
| Data Flow Diagram | Data flow and transformation |
| Sequence Diagram | Time-series interactions |
5.5. Metadata
Include title, description, last updated, author, and version in diagrams.
6. Best Practices
6.1. Background Color
- Remove
background="#ffffff" - Transparent background adapts to various themes
6.2. Font Size
- Use 1.5x standard font size (around 18px) for PDF readability
6.3. Japanese Text Width
- Allow 30-40px per character
- Insufficient width causes unintended line breaks
<!-- For 10-character text, allow 300-400px -->
<mxGeometry x="140" y="60" width="400" height="40" />
6.4. Arrow Placement
- Always place arrows at back (position in XML right after Title)
- Position arrows to avoid overlapping with labels
- Keep arrow start/end at least 20px from label bottom edge
<!-- Title -->
<mxCell id="title" value="..." .../>
<!-- Arrows (back layer) -->
<mxCell id="arrow1" style="edgeStyle=..." .../>
<!-- Other elements (front layer) -->
<mxCell id="box1" .../>
6.5. Arrow Connection to Text Labels
For text elements, exitX/exitY don't work, so use explicit coordinates:
<!-- Good: Explicit coordinates with sourcePoint/targetPoint -->
<mxCell id="arrow" style="..." edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1279" y="500" as="sourcePoint"/>
<mxPoint x="119" y="500" as="targetPoint"/>
<Array as="points">
<mxPoint x="1279" y="560"/>
<mxPoint x="119" y="560"/>
</Array>
</mxGeometry>
</mxCell>
6.6. edgeLabel Offset Adjustment
Adjust offset attribute to distance arrow labels from arrows:
<!-- Place above arrow (negative value to distance) -->
<mxPoint x="0" y="-40" as="offset"/>
<!-- Place below arrow (positive value to distance) -->
<mxPoint x="0" y="40" as="offset"/>
6.7. Remove Unnecessary Elements
- Remove decorative icons irrelevant to context
- Example: If ECR exists, separate Docker icon is unnecessary
6.8. Labels and Headings
- Service name only: 1 line
- Service name + supplementary info: 2 lines with line break
- Redundant notation (e.g., ECR Container Registry): shorten to 1 line
- Use
<br>tag for line breaks
6.9. Background Frame and Internal Element Placement
When placing elements inside background frames (grouping boxes), ensure sufficient margin.
- YOU MUST: Internal elements must have at least 30px margin from frame boundary
- YOU MUST: Account for rounded corners (
rounded=1) and stroke width - YOU MUST: Always visually verify PNG output for overflow
Coordinate calculation verification:
Background frame: y=20, height=400 -> range is y=20-420
Internal element top: frame y + 30 or more (e.g., y=50)
Internal element bottom: frame y + height - 30 or less (e.g., up to y=390)
Bad example (may overflow):
<!-- Background frame -->
<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
<mxGeometry x="500" y="20" width="560" height="400" />
</mxCell>
<!-- Text: y=30 is too close to frame top (y=20) -->
<mxCell id="label" value="Title" style="text;...">
<mxGeometry x="510" y="30" width="540" height="35" />
</mxCell>
Good example (sufficient margin):
<!-- Background frame -->
<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
<mxGeometry x="500" y="20" width="560" height="430" />
</mxCell>
<!-- Text: y=50 is 30px from frame top (y=20) -->
<mxCell id="label" value="Title" style="text;...">
<mxGeometry x="510" y="50" width="540" height="35" />
</mxCell>
7. Reference
AWS icon search examples:
python ~/.claude/skills/draw-io/scripts/find_aws_icon.py ec2
python ~/.claude/skills/draw-io/scripts/find_aws_icon.py lambda
8. Checklist
- No background color set (page="0")
- Font size appropriate (larger recommended)
- Arrows placed at back layer
- Arrows not overlapping labels (verify in PNG)
- Arrow start/end sufficiently distant from labels (at least 20px)
- Arrows not penetrating boxes or icons (verify in PNG)
- Internal elements not overflowing background frame (verify in PNG)
- 30px+ margin between background frame and internal elements
- AWS service names are official names/correct abbreviations
- AWS icons are latest version (mxgraph.aws4.*)
- No unnecessary elements remaining
- Visually verified PNG conversion
9. Image Display in reveal.js Slides
Add auto-stretch: false to YAML header:
---
title: "Your Presentation"
format:
revealjs:
auto-stretch: false
---
This ensures correct image display on mobile devices.
| 1 | |
| 2 | name draw-io |
| 3 | description draw.io diagram creation, editing, and review. Use for .drawio XML editing, PNG conversion, layout adjustment, and AWS icon usage. |
| 4 | |
| 5 | |
| 6 | # draw.io Diagram Skill |
| 7 | |
| 8 | ## 1. Basic Rules |
| 9 | |
| 10 | Edit only `.drawio` files |
| 11 | Do not directly edit `.drawio.png` files |
| 12 | Use auto-generated `.drawio.png` by pre-commit hook in slides |
| 13 | |
| 14 | ## 2. Font Settings |
| 15 | |
| 16 | For diagrams used in Quarto slides, |
| 17 | specify `defaultFontFamily` in mxGraphModel tag: |
| 18 | |
| 19 | |
| 20 | <mxGraphModel defaultFontFamily="Noto Sans JP" ...> |
| 21 | |
| 22 | |
| 23 | Also explicitly specify `fontFamily` in each text element's style attribute: |
| 24 | |
| 25 | |
| 26 | style="text;html=1;fontSize=27;fontFamily=Noto Sans JP;" |
| 27 | |
| 28 | |
| 29 | ## 3. Conversion Commands |
| 30 | |
| 31 | See conversion script at [scripts/convert-drawio-to-png.sh]. |
| 32 | |
| 33 | |
| 34 | # Convert all .drawio files |
| 35 | mise exec -- pre-commit run --all-files |
| 36 | |
| 37 | # Convert specific .drawio file |
| 38 | mise exec -- pre-commit run convert-drawio-to-png --files assets/my-diagram.drawio |
| 39 | |
| 40 | # Run script directly (using skill's script) |
| 41 | bash ~/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh assets/diagram1.drawio |
| 42 | |
| 43 | |
| 44 | Internal command used: |
| 45 | |
| 46 | |
| 47 | drawio -x -f png -s 2 -t -o output.drawio.png input.drawio |
| 48 | |
| 49 | |
| 50 | | Option | Description | |
| 51 | |--------|-------------| |
| 52 | | `-x` | Export mode | |
| 53 | | `-f png` | PNG format output | |
| 54 | | `-s 2` | 2x scale (high resolution) | |
| 55 | | `-t` | Transparent background | |
| 56 | | `-o` | Output file path | |
| 57 | |
| 58 | ## 4. Layout Adjustment |
| 59 | |
| 60 | ### 4.1. Coordinate Adjustment Steps |
| 61 | |
| 62 | Open `.drawio` file in text editor (plain XML format) |
| 63 | Find `mxCell` for element to adjust (search by `value` attribute for text) |
| 64 | Adjust coordinates in `mxGeometry` tag |
| 65 | `x`: Position from left |
| 66 | `y`: Position from top |
| 67 | `width`: Width |
| 68 | `height`: Height |
| 69 | Run conversion and verify |
| 70 | |
| 71 | ### 4.2. Coordinate Calculation |
| 72 | |
| 73 | Element center coordinate = `y + (height / 2)` |
| 74 | To align multiple elements, calculate and match center coordinates |
| 75 | |
| 76 | ## 5. Design Principles |
| 77 | |
| 78 | ### 5.1. Basic Principles |
| 79 | |
| 80 | Clarity: Create simple, visually clean diagrams |
| 81 | Consistency: Unify colors, fonts, icon sizes, line thickness |
| 82 | Accuracy: Do not sacrifice accuracy for simplification |
| 83 | |
| 84 | ### 5.2. Element Rules |
| 85 | |
| 86 | Label all elements |
| 87 | Use arrows to indicate direction |
| 88 | (prefer 2 unidirectional arrows over bidirectional) |
| 89 | Use latest official icons |
| 90 | Add legend to explain custom symbols |
| 91 | |
| 92 | ### 5.3. Accessibility |
| 93 | |
| 94 | Ensure sufficient color contrast |
| 95 | Use patterns in addition to colors |
| 96 | |
| 97 | ### 5.4. Progressive Disclosure |
| 98 | |
| 99 | Separate complex systems into staged diagrams: |
| 100 | |
| 101 | | Diagram Type | Purpose | |
| 102 | |--------------|---------| |
| 103 | | Context Diagram | System overview from external perspective | |
| 104 | | System Diagram | Main components and relationships | |
| 105 | | Component Diagram | Technical details and integration points | |
| 106 | | Deployment Diagram | Infrastructure configuration | |
| 107 | | Data Flow Diagram | Data flow and transformation | |
| 108 | | Sequence Diagram | Time-series interactions | |
| 109 | |
| 110 | ### 5.5. Metadata |
| 111 | |
| 112 | Include title, description, last updated, author, and version in diagrams. |
| 113 | |
| 114 | ## 6. Best Practices |
| 115 | |
| 116 | ### 6.1. Background Color |
| 117 | |
| 118 | Remove `background="#ffffff"` |
| 119 | Transparent background adapts to various themes |
| 120 | |
| 121 | ### 6.2. Font Size |
| 122 | |
| 123 | Use 1.5x standard font size (around 18px) for PDF readability |
| 124 | |
| 125 | ### 6.3. Japanese Text Width |
| 126 | |
| 127 | Allow 30-40px per character |
| 128 | Insufficient width causes unintended line breaks |
| 129 | |
| 130 | |
| 131 | <!-- For 10-character text, allow 300-400px --> |
| 132 | <mxGeometry x="140" y="60" width="400" height="40" /> |
| 133 | |
| 134 | |
| 135 | ### 6.4. Arrow Placement |
| 136 | |
| 137 | Always place arrows at back (position in XML right after Title) |
| 138 | Position arrows to avoid overlapping with labels |
| 139 | Keep arrow start/end at least 20px from label bottom edge |
| 140 | |
| 141 | |
| 142 | <!-- Title --> |
| 143 | <mxCell id="title" value="..." .../> |
| 144 | |
| 145 | <!-- Arrows (back layer) --> |
| 146 | <mxCell id="arrow1" style="edgeStyle=..." .../> |
| 147 | |
| 148 | <!-- Other elements (front layer) --> |
| 149 | <mxCell id="box1" .../> |
| 150 | |
| 151 | |
| 152 | ### 6.5. Arrow Connection to Text Labels |
| 153 | |
| 154 | For text elements, exitX/exitY don't work, so use explicit coordinates: |
| 155 | |
| 156 | |
| 157 | <!-- Good: Explicit coordinates with sourcePoint/targetPoint --> |
| 158 | <mxCell id="arrow" style="..." edge="1" parent="1"> |
| 159 | <mxGeometry relative="1" as="geometry"> |
| 160 | <mxPoint x="1279" y="500" as="sourcePoint"/> |
| 161 | <mxPoint x="119" y="500" as="targetPoint"/> |
| 162 | <Array as="points"> |
| 163 | <mxPoint x="1279" y="560"/> |
| 164 | <mxPoint x="119" y="560"/> |
| 165 | </Array> |
| 166 | </mxGeometry> |
| 167 | </mxCell> |
| 168 | |
| 169 | |
| 170 | ### 6.6. edgeLabel Offset Adjustment |
| 171 | |
| 172 | Adjust offset attribute to distance arrow labels from arrows: |
| 173 | |
| 174 | |
| 175 | <!-- Place above arrow (negative value to distance) --> |
| 176 | <mxPoint x="0" y="-40" as="offset"/> |
| 177 | |
| 178 | <!-- Place below arrow (positive value to distance) --> |
| 179 | <mxPoint x="0" y="40" as="offset"/> |
| 180 | |
| 181 | |
| 182 | ### 6.7. Remove Unnecessary Elements |
| 183 | |
| 184 | Remove decorative icons irrelevant to context |
| 185 | Example: If ECR exists, separate Docker icon is unnecessary |
| 186 | |
| 187 | ### 6.8. Labels and Headings |
| 188 | |
| 189 | Service name only: 1 line |
| 190 | Service name + supplementary info: 2 lines with line break |
| 191 | Redundant notation (e.g., ECR Container Registry): shorten to 1 line |
| 192 | Use `<br>` tag for line breaks |
| 193 | |
| 194 | ### 6.9. Background Frame and Internal Element Placement |
| 195 | |
| 196 | When placing elements inside background frames (grouping boxes), |
| 197 | ensure sufficient margin. |
| 198 | |
| 199 | YOU MUST: Internal elements must have at least 30px margin from frame boundary |
| 200 | YOU MUST: Account for rounded corners (`rounded=1`) and stroke width |
| 201 | YOU MUST: Always visually verify PNG output for overflow |
| 202 | |
| 203 | Coordinate calculation verification: |
| 204 | |
| 205 | |
| 206 | Background frame: y=20, height=400 -> range is y=20-420 |
| 207 | Internal element top: frame y + 30 or more (e.g., y=50) |
| 208 | Internal element bottom: frame y + height - 30 or less (e.g., up to y=390) |
| 209 | |
| 210 | |
| 211 | Bad example (may overflow): |
| 212 | |
| 213 | |
| 214 | <!-- Background frame --> |
| 215 | <mxCell id="bg" style="rounded=1;strokeWidth=3;..."> |
| 216 | <mxGeometry x="500" y="20" width="560" height="400" /> |
| 217 | </mxCell> |
| 218 | <!-- Text: y=30 is too close to frame top (y=20) --> |
| 219 | <mxCell id="label" value="Title" style="text;..."> |
| 220 | <mxGeometry x="510" y="30" width="540" height="35" /> |
| 221 | </mxCell> |
| 222 | |
| 223 | |
| 224 | Good example (sufficient margin): |
| 225 | |
| 226 | |
| 227 | <!-- Background frame --> |
| 228 | <mxCell id="bg" style="rounded=1;strokeWidth=3;..."> |
| 229 | <mxGeometry x="500" y="20" width="560" height="430" /> |
| 230 | </mxCell> |
| 231 | <!-- Text: y=50 is 30px from frame top (y=20) --> |
| 232 | <mxCell id="label" value="Title" style="text;..."> |
| 233 | <mxGeometry x="510" y="50" width="540" height="35" /> |
| 234 | </mxCell> |
| 235 | |
| 236 | |
| 237 | ## 7. Reference |
| 238 | |
| 239 | [Layout Guidelines] |
| 240 | [AWS Icons] |
| 241 | [AWS Icon Search Script] |
| 242 | |
| 243 | AWS icon search examples: |
| 244 | |
| 245 | |
| 246 | python ~/.claude/skills/draw-io/scripts/find_aws_icon.py ec2 |
| 247 | python ~/.claude/skills/draw-io/scripts/find_aws_icon.py lambda |
| 248 | |
| 249 | |
| 250 | ## 8. Checklist |
| 251 | |
| 252 | [ ] No background color set (page="0") |
| 253 | [ ] Font size appropriate (larger recommended) |
| 254 | [ ] Arrows placed at back layer |
| 255 | [ ] Arrows not overlapping labels (verify in PNG) |
| 256 | [ ] Arrow start/end sufficiently distant from labels (at least 20px) |
| 257 | [ ] Arrows not penetrating boxes or icons (verify in PNG) |
| 258 | [ ] Internal elements not overflowing background frame (verify in PNG) |
| 259 | [ ] 30px+ margin between background frame and internal elements |
| 260 | [ ] AWS service names are official names/correct abbreviations |
| 261 | [ ] AWS icons are latest version (mxgraph.aws4.*) |
| 262 | [ ] No unnecessary elements remaining |
| 263 | [ ] Visually verified PNG conversion |
| 264 | |
| 265 | ## 9. Image Display in reveal.js Slides |
| 266 | |
| 267 | Add `auto-stretch: false` to YAML header: |
| 268 | |
| 269 | |
| 270 | |
| 271 | title: "Your Presentation" |
| 272 | format: |
| 273 | revealjs: |
| 274 | auto-stretch: false |
| 275 | |
| 276 | |
| 277 | |
| 278 | This ensures correct image display on mobile devices. |
| 279 |
Discussion
Alternatives
Browse more free Claude skills or everything in Development.