Skip to main content

drawio-headless

Generate architecture diagrams with draw.io in headless/server environments (WSL2, VPS, Docker)

Zur Installation springen

Quellinformationen

Repository
kevinnft/ai-agent-skills
Letzte Quellaktivität
15. Mai 2026 um 04:45
Erkannte Sprache von SKILL.md
Englisch
Sterne
14
Forks
2

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
4 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
drawio-headless
description
Generate architecture diagrams with draw.io in headless/server environments (WSL2, VPS, Docker)
version
1.0.0
dependencies
["draw.io desktop (snap or .deb)","xvfb (X virtual framebuffer)"]
platforms
["linux"]
tags
["diagrams","architecture","visualization","headless","wsl2"]
origin
unknown
source_license
see upstream
language
en
# Draw.io Headless Diagram Generation Generate professional architecture diagrams from .drawio XML files in headless environments (WSL2, VPS, Docker) where GUI is not available. ## When to Use - Server/VPS without X11 display - WSL2 Ubuntu (no native GUI) - Docker containers - CI/CD pipelines - Automated diagram generation ## Prerequisites **Required packages:** ```bash # Install draw.io (snap - easiest) sudo snap install drawio # Install Xvfb (virtual framebuffer for headless rendering) sudo apt-get update sudo apt-get install -y xvfb ``` **Alternative: .deb package** ```bash # Download latest .deb wget https://github.com/jgraph/drawio-desktop/releases/download/v28.2.5/drawio-amd64-28.2.5.deb # Install sudo dpkg -i drawio-amd64-28.2.5.deb sudo apt-get install -f # Fix dependencies ``` ## Verification ```bash # Check draw.io installation which drawio # Expected: /snap/bin/drawio or /usr/bin/drawio # Test with xvfb-run xvfb-run -a drawio --version # Expected: draw.io version number (e.g., 28.2.5) ``` ## Usage ### Basic Export ```bash # Export .drawio to PNG xvfb-run -a drawio -x -f png -o output.png input.drawio # Export to SVG xvfb-run -a drawio -x -f svg -o output.svg input.drawio # Export to PDF xvfb-run -a drawio -x -f pdf -o output.pdf input.drawio ``` ### Flags Explained - `xvfb-run -a` — Run in virtual framebuffer (headless) - `-x` — Export mode - `-f <format>` — Output format (png, svg, pdf, jpg) - `-o <output>` — Output file path - `<input>` — Input .drawio file ## Pitfalls ### 1. Snap Confinement (File Access) **Problem:** Snap-installed draw.io cannot access `/tmp` or arbitrary directories due to confinement. **Solution:** Use home directory or snap-accessible paths: ```bash # ❌ FAILS (snap cannot access /tmp) xvfb-run -a drawio -x -f png -o /tmp/diagram.png /tmp/input.drawio # ✅ WORKS (home directory accessible) cd ~/diagrams xvfb-run -a drawio -x -f png -o diagram.png input.drawio ``` **Snap-accessible paths:** - `~/` (home directory) - `/home/<user>/` - `/media/` (removable media) - `/mnt/` (mounted filesystems) ### 2. OpenGL/dbus Warnings **Symptoms:** Errors like: ``` libGL error: No matching fbConfigs or visuals found dbus[]: Failed to connect to socket ``` **Impact:** These are **warnings only** — export still succeeds. Safe to ignore in headless environments. **Suppress (optional):** ```bash xvfb-run -a drawio -x -f png -o output.png input.drawio 2>/dev/null ``` ### 3. Missing Xvfb **Symptom:** ``` Error: Cannot open display: :99 ``` **Fix:** ```bash sudo apt-get install -y xvfb ``` ### 4. Large Diagrams (Memory) **Problem:** Complex diagrams with many elements may consume significant memory. **Solution:** Monitor memory usage, increase if needed: ```bash # Check available memory before export free -h # For very large diagrams, consider SVG (vector, smaller memory footprint) xvfb-run -a drawio -x -f svg -o output.svg input.drawio ``` ### 5. Premature Deletion (CRITICAL) **Problem:** Deleting diagram files immediately after generation but before user confirms receipt. **Symptom:** User reports "diagram not received" but files already deleted. **Root cause:** Telegram/messaging platforms may have delivery lag. Deleting before send confirmation = data loss. **Solution:** ```bash # ❌ WRONG — Delete immediately after MEDIA: path returned xvfb-run -a drawio -x -f png -o diagram.png diagram.drawio echo "MEDIA:/path/to/diagram.png" rm diagram.png diagram.drawio # TOO EARLY! # ✅ CORRECT — Keep files, cleanup weekly xvfb-run -a drawio -x -f png -o ~/diagrams/analysis_$(date +%Y%m%d).png diagram.drawio echo "MEDIA:~/diagrams/analysis_20260505.png" # Files remain for user reference # Weekly cleanup (manual or cron) find ~/diagrams -name "*.png" -mtime +7 -delete ``` **Policy:** Never auto-delete diagrams after sending. User may need to reference them later or delivery may fail silently. ## Diagram Types Supported - **Architecture diagrams** (microservices, cloud, infrastructure) - **Flowcharts** (process flows, decision trees) - **Sequence diagrams** (API calls, interactions) - **Network diagrams** (topology, connections) - **ER diagrams** (database schemas) - **UML diagrams** (class, component, deployment) ## Example Workflow ### 1. Create .drawio XML ```xml <mxfile host="app.diagrams.net"> <diagram name="Example"> <mxGraphModel dx="1200" dy="900"> <root> <mxCell id="0"/> <mxCell id="1" parent="0"/> <!-- Add your diagram elements here --> <mxCell id="box1" value="Service A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;" vertex="1" parent="1"> <mxGeometry x="100" y="100" width="120" height="60" as="geometry"/> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> ``` ### 2. Export to PNG ```bash xvfb-run -a drawio -x -f png -o diagram.png diagram.drawio ``` ### 3. Verify Output ```bash ls -lh diagram.png file diagram.png # Expected: PNG image data, ... ``` ## Integration with Hermes When generating diagrams in Hermes workflows: 1. **Create .drawio XML** programmatically (Python, script, template) 2. **Export via xvfb-run** in execute_code or terminal tool 3. **Return path** via `MEDIA:/path/to/diagram.png` for Telegram 4. **DO NOT auto-delete** — Keep diagrams for user reference (cleanup weekly, not per-send) ## Performance **Typical export times:** - Simple diagram (5-10 elements): 2-3 seconds - Medium diagram (20-50 elements): 4-6 seconds - Complex diagram (100+ elements): 8-12 seconds **Memory usage:** - draw.io process: ~100-200 MB during export - Xvfb overhead: ~10-20 MB ## Troubleshooting ### Export produces blank/empty PNG **Cause:** Invalid XML structure or missing geometry. **Fix:** Validate .drawio XML structure, ensure all cells have geometry. ### "Command not found: drawio" **Cause:** Snap bin directory not in PATH. **Fix:** ```bash # Add to ~/.bashrc export PATH="/snap/bin:$PATH" # Or use full path xvfb-run -a /snap/bin/drawio -x -f png -o output.png input.drawio ``` ### Permission denied **Cause:** Output directory not writable or snap confinement. **Fix:** Use home directory or check permissions: ```bash # Use home directory cd ~/diagrams # Or check permissions ls -ld /path/to/output/directory ``` ## References - `references/system-services-diagram-pattern.md` — Pattern for mapping running services to comprehensive diagrams - `references/electricity-consumption-analysis.md` — Household/office electricity analysis with AC-focused breakdown and savings scenarios ## See Also - `architecture-diagram` skill — Dark-themed SVG architecture diagrams as HTML - `excalidraw` skill — Hand-drawn style diagrams (JSON format) - draw.io GitHub: https://github.com/jgraph/drawio-desktop
Auf GitHub ansehen