Generate draw.io diagrams programmatically using Python. Creates flowcharts, architecture diagrams, tree structures, network diagrams, and more. Use when the user requests a .drawio file, diagram, flowchart, or visual documentation.
100
Does it follow best practices?
Validation for skill structure
This skill generates .drawio files using the drawpyo Python library. Draw.io diagrams are XML-based and can be opened in:
All scripts include inline dependency metadata (PEP 723). Use uv run to execute them — dependencies are handled automatically in an isolated environment:
# No installation needed — uv handles dependencies automatically
uv run scripts/create_flowchart.py steps.json /mnt/user-data/outputs/flow.drawioFor custom code, you can also use uv run with inline dependencies:
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["drawpyo>=0.2.0"]
# ///
import drawpyo
# Create a file and page
file = drawpyo.File()
file.file_path = "/home/claude"
file.file_name = "diagram.drawio"
page = drawpyo.Page(file=file)
# Add a shape
box = drawpyo.diagram.Object(page=page, value="Hello World")
box.position = (100, 100)
# Save
file.write()Then run with: uv run my_script.py
What type of diagram?
├── Tree/Hierarchy (org chart, decision tree, file structure)
│ └── Use TreeDiagram class (auto-layout) — see references/REFERENCE.md
│
├── Flowchart (sequential steps with decisions)
│ └── Use helper script: scripts/create_flowchart.py
│ └── Or write custom code with Object + Edge classes
│
├── Architecture/Network (boxes with connections)
│ └── Write custom code using Object + Edge classes
│ └── See references/REFERENCE.md
│
├── From structured data (CSV, JSON, dict)
│ └── Use helper script: scripts/from_data.py
│
└── Complex/Custom
└── Write custom drawpyo code — see references/REFERENCE.md# Basic rectangle
obj = drawpyo.diagram.Object(page=page, value="Label")
obj.position = (x, y) # Coordinates in pixels
obj.width = 120 # Default: 120
obj.height = 60 # Default: 60
# From draw.io shape library
obj = drawpyo.diagram.object_from_library(
page=page,
library="general", # or "flowchart", "basic", etc.
obj_name="process", # shape name from library
value="Process Step"
)edge = drawpyo.diagram.Edge(
page=page,
source=obj1,
target=obj2,
label="connects to"
)# Apply a style string (same format as draw.io)
obj.apply_style_string(
"rounded=1;whiteSpace=wrap;html=1;"
"fillColor=#dae8fc;strokeColor=#6c8ebf;"
)Run with uv run — dependencies are handled automatically:
| Script | Purpose | Usage |
|---|---|---|
scripts/create_flowchart.py | Create flowcharts from step definitions | uv run scripts/create_flowchart.py input.json output.drawio |
scripts/create_tree.py | Create tree diagrams with auto-layout | uv run scripts/create_tree.py input.json output.drawio |
scripts/from_data.py | Create diagrams from JSON/dict data | uv run scripts/from_data.py input.json output.drawio |
Use with object_from_library(library=..., obj_name=...):
rectangle, ellipse, process, diamond, parallelogram, hexagon, triangle, cylinder, cloud, document, note, actorterminator, process, decision, data, document, predefined_process, stored_data, internal_storage, manual_input, manual_operationrectangle, ellipse, rhombus, triangle, pentagon, hexagon, octagonAlways save generated .drawio files to /mnt/user-data/outputs/ and use the present_files tool to share with the user.
d34f704
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.