Skip to content
Back to skills

Drawio Headless

BSecurity

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

  • 13 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 29, 2026
ai-agentspythonbashdockergitapidatabaseci/cdperformance

Works with

  • terminal
  • api

Security analysis

B84/100
  • mediumUses curl or wget to download content
  • criticalModifies startup scripts or system services for persistence

Pro scans all 4 files and shows the line behind each finding

Scanned May 29, 2026

npx -y skills add kevinnft/ai-agent-skills --skill drawio-headless --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Drawio Headless?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Drawio Headless
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/kevinnft-drawio-headless/badge)](https://www.skillsdirectory.com/skills/kevinnft-drawio-headless)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Files in this skill

  • SKILL.md7.1 KB
  • references/electricity-consumption-analysis.md6.3 KB
  • references/system-services-diagram-pattern.md2.1 KB
  • references/vps-resource-diagram-pattern.md6.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.