drawio-diagram
Generate .drawio architecture diagrams with consistent visual style and export to PNG/SVG/PDF/HTML. Use when user asks to "create a diagram", "draw architecture", "make a drawio file", "build a diagram", or mentions "drawio", "architecture diagram", or "system diagram".
What this skill does
# drawio-diagram
Generate `.drawio` architecture diagrams with a consistent visual style. Always include a legend. Supports export to PNG, SVG, PDF, and self-contained HTML.
## Workflow
1. **Understand the subject** — read source material (repos, docs, README, user description)
2. **Plan the diagram** — identify containers, capabilities, external services, and connections
3. **Generate the `.drawio` file** — use the XML structure and style conventions below
4. **Add a legend** — always include a legend row at the top of the diagram
5. **Export** — offer to export to PNG/SVG/PDF via draw.io CLI, or to self-contained HTML
## XML Structure
Every `.drawio` file must follow this structure:
```xml
<mxfile host="Electron" version="28.0.6">
<diagram name="Page-1" id="unique-id">
<mxGraphModel dx="1100" dy="760" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- All diagram cells use parent="1" -->
</root>
</mxGraphModel>
</diagram>
</mxfile>
```
For larger diagrams, increase `pageWidth` and `pageHeight` as needed (e.g., `1400x900` or `1600x1000`).
## Element Types and Styles
### Container (systems, layers, groupings)
Blue, rounded, bold title top-aligned.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=top;fontSize=10;
```
### Capability (features, components, public)
Green, rounded, bold title with description.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;verticalAlign=top;
```
### Existing / External (infrastructure, third-party)
Grey, rounded.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;verticalAlign=top;fontSize=10;
```
### Tech Preview (experimental, private, future)
Purple, rounded.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=10;verticalAlign=top;
```
### Process Step (automated actions, gates)
Orange, sharp corners.
```
rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=10;
```
### Use Case (domain applications, verticals)
Yellow, italic, pill-shaped.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;verticalAlign=middle;fontStyle=2
```
### Outcome (key deliverable, result)
Dark green, white text. Use sparingly.
```
rounded=0;whiteSpace=wrap;html=1;fillColor=#008a00;strokeColor=#005700;fontColor=#ffffff;fontSize=10;
```
### Protocol Indicator (interface type)
Small circle, 8pt font.
```
ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=8;fontStyle=0
```
Size: 25x25.
### Annotation (ideas, notes, questions)
Sticky note shape, yellow.
```
shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;fontColor=#000000;darkOpacity=0.05;fillColor=#FFF9B2;strokeColor=none;fillStyle=solid;direction=west;gradientDirection=north;gradientColor=#FFF2A1;shadow=1;size=20;pointerEvents=1;
```
### Region (soft grouping)
No fill, dashed border.
```
rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=none;strokeColor=#999999;
```
### Infrastructure Bar
Full-width grey bar, typically at bottom.
```
rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=10;
```
## HTML Labels
Use HTML in `value` attributes for rich text:
- Bold title: `<b>Title</b>`
- Line break: `<br>`
- Small text: `<font style="font-size: 9px;">text</font>`
- Combined: `<font><b>Title</b><br>Description</font>`
Standard element label pattern:
```
<font><b>Component Name</b><br>Brief description</font>
```
## Connections
Always use orthogonal edges:
```
edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;
```
Add labels on edges where the relationship needs clarification.
## Legend
Every diagram must include a legend row near the top. Use small pill-shaped elements (80x20) showing each element type used in the diagram:
```xml
<mxCell id="key-1" value="<span>Capability</span>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;verticalAlign=middle;fontStyle=2" vertex="1" parent="1">
<mxGeometry x="20" y="40" width="80" height="20" as="geometry" />
</mxCell>
```
Space legend items 90px apart horizontally. Only include element types actually used in the diagram.
## Export
### draw.io CLI Export
```bash
# macOS
/Applications/draw.io.app/Contents/MacOS/draw.io -x -f png -e -b 10 -o output.drawio.png input.drawio
# Linux
drawio -x -f png -e -b 10 -o output.drawio.png input.drawio
```
Formats: `png`, `svg`, `pdf`, `jpg`
Key flags:
- `-x`: export mode
- `-f`: format
- `-e`: embed diagram XML in output
- `-b 10`: border width
- `-t`: transparent background (PNG only)
After export, the `.drawio` source can be deleted since the export embeds the XML.
### Self-Contained HTML Export
Generate a standalone HTML file that renders the diagram in a browser without draw.io installed:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DIAGRAM_TITLE</title>
<style>
body { margin: 0; background: #f5f5f5; display: flex; justify-content: center; align-items: center; min-height: 100vh; }
.container { background: white; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); overflow: hidden; }
</style>
</head>
<body>
<div class="container">
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;" data-mxgraph='{"highlight":"#0000ff","nav":true,"resize":true,"toolbar":"zoom layers lightbox","edit":"_blank","xml":"ESCAPED_XML_HERE"}'></div>
</div>
<script src="https://viewer.diagrams.net/js/viewer-static.min.js"></script>
</body>
</html>
```
To create the HTML:
1. Take the complete `<mxGraphModel>...</mxGraphModel>` XML from the `.drawio` file
2. XML-escape it for embedding in the `data-mxgraph` JSON attribute (escape `"`, `<`, `>`, `&`)
3. Replace `ESCAPED_XML_HERE` with the escaped XML
4. Replace `DIAGRAM_TITLE` with the diagram title
Open with `open output.html` (macOS) or `xdg-open output.html` (Linux).
## File Naming
- Source: `name.drawio`
- Exports: `name.drawio.png`, `name.drawio.svg`, `name.drawio.pdf`
- HTML: `name.drawio.html`
## Layout Guidelines
- Place legend at top
- Use containers to group related components
- Infrastructure bar at bottom
- External services on the right side
- Process flows left-to-right
- Annotations (sticky notes) in margins
- Leave adequate spacing between elements (20-30px minimum)
## Reference
See `references/` in this skill directory for:
- `demo.drawio` — example output with all element types
- `xml-and-export.md` — detailed XML structure and CLI reference
Related in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.