graphviz
SKILL.md
GraphViz DOT Generation
Generate graph descriptions using DOT language. GraphViz provides powerful automatic layout algorithms for complex graphs.
Quick Start
Minimal directed graph:
digraph G {
A -> B -> C;
}
Output Formats
- DOT file -
.dotextension for source - Rendered images - Use Bash to render:
dot -Tpng graph.dot -o graph.png dot -Tsvg graph.dot -o graph.svg dot -Tpdf graph.dot -o graph.pdf
Workflow
- Choose graph type -
digraph(directed) orgraph(undirected) - Define structure - Nodes and edges
- Apply attributes - Styling and layout hints
- Write file - Save as
.dot - Render (optional) - Convert to image format
Graph Types
Directed Graph (digraph)
digraph ProcessFlow {
rankdir=LR;
start [shape=circle, style=filled, fillcolor=green];
end [shape=doublecircle, style=filled, fillcolor=red];
start -> process1 -> decision;
decision -> process2 [label="yes"];
decision -> process3 [label="no"];
process2 -> end;
process3 -> end;
}
Undirected Graph (graph)
graph Network {
layout=neato;
overlap=false;
server [shape=box3d];
client1 -- server;
client2 -- server;
client3 -- server;
client1 -- client2 [style=dashed];
}
Common Patterns
Hierarchical Layout (Default)
digraph Hierarchy {
rankdir=TB;
node [shape=box];
CEO -> {VP1, VP2, VP3};
VP1 -> {M1, M2};
VP2 -> {M3, M4};
VP3 -> {M5, M6};
}
Dependency Graph
digraph Dependencies {
rankdir=LR;
node [shape=box, style=rounded];
app -> {libA, libB, libC};
libA -> {libD, libE};
libB -> libD;
libC -> libE;
}
State Machine
digraph StateMachine {
rankdir=LR;
node [shape=circle];
start [shape=point];
end [shape=doublecircle];
start -> idle;
idle -> running [label="start"];
running -> paused [label="pause"];
paused -> running [label="resume"];
running -> idle [label="stop"];
idle -> end [label="exit"];
}
Network Topology
graph Topology {
layout=fdp;
overlap=false;
splines=true;
subgraph cluster_dc1 {
label="Data Center 1";
style=dashed;
router1 [shape=box3d];
server1a, server1b;
}
subgraph cluster_dc2 {
label="Data Center 2";
style=dashed;
router2 [shape=box3d];
server2a, server2b;
}
internet [shape=cloud];
router1 -- server1a;
router1 -- server1b;
router2 -- server2a;
router2 -- server2b;
router1 -- internet;
router2 -- internet;
}
Record-Based Nodes (Structs)
digraph Structs {
node [shape=record];
struct1 [label="{Name|{Field1|Field2|Field3}}"];
struct2 [label="{<f0>Head|{<f1>Left|<f2>Right}}"];
struct2:f1 -> struct1;
struct2:f2 -> struct1;
}
Node Shapes
| Shape | Use Case |
|---|---|
box |
Process, component |
ellipse |
Default, general |
circle |
State, small node |
doublecircle |
Final state |
diamond |
Decision |
record |
Data structure |
Mrecord |
Rounded record |
box3d |
Server, database |
cylinder |
Database |
folder |
Directory |
note |
Comment |
tab |
Tab/window |
house |
Home/start |
invhouse |
Inverted house |
polygon |
Custom (sides=N) |
point |
Tiny/start point |
plaintext |
Text only |
Edge Attributes
digraph Edges {
A -> B [label="labeled"];
A -> C [style=dashed];
A -> D [style=dotted];
A -> E [style=bold];
A -> F [color=red];
A -> G [penwidth=3];
A -> H [arrowhead=none];
A -> I [arrowhead=diamond];
A -> J [dir=both];
A -> K [constraint=false]; // Don't affect rank
}
Subgraphs and Clusters
digraph Clusters {
subgraph cluster_0 {
label="Cluster A";
style=filled;
color=lightgrey;
a0 -> a1 -> a2;
}
subgraph cluster_1 {
label="Cluster B";
color=blue;
b0 -> b1 -> b2;
}
a2 -> b0;
}
Note: Subgraphs named cluster_* are drawn as boxes.
Layout Engines
| Engine | Use Case |
|---|---|
dot |
Hierarchical (default) |
neato |
Spring model, undirected |
fdp |
Force-directed |
sfdp |
Large graph force-directed |
circo |
Circular layout |
twopi |
Radial layout |
Select via:
digraph G {
layout=neato;
// or use command: neato -Tpng graph.dot -o graph.png
}
Rendering Commands
# Basic PNG
dot -Tpng input.dot -o output.png
# SVG for web
dot -Tsvg input.dot -o output.svg
# PDF for documents
dot -Tpdf input.dot -o output.pdf
# High-resolution PNG
dot -Tpng -Gdpi=300 input.dot -o output.png
# Using different layout engine
neato -Tpng input.dot -o output.png
fdp -Tpng input.dot -o output.png
# Validate syntax
dot -Tcanon input.dot
# Debug layout
dot -v input.dot
Critical Rules
- Semicolons - Optional but recommended for clarity
- Quotes - Use for labels with spaces/special chars
- IDs - No spaces, or use quotes:
"Node Name" - Attributes - In square brackets:
[attr=value] - Cluster naming - Must start with
cluster_to be boxed - Edge syntax -
->for digraph,--for graph
When to Use GraphViz
- Complex dependency graphs
- Large graphs with many nodes
- Network topology diagrams
- State machines and automata
- When precise layout control is needed
- When rendering to image files is required
- Hierarchical structures (org charts, trees)
- When automatic layout is preferred over manual
References
See references/dot-syntax.md for complete attribute reference.
See references/layout-engines.md for detailed layout engine comparison.
Weekly Installs
3
Repository
johnlarkin1/cla…tensionsGitHub Stars
17
First Seen
Feb 27, 2026
Security Audits
Installed on
opencode3
gemini-cli3
codebuddy3
github-copilot3
codex3
kimi-cli3