graphviz

GraphViz DOT Generation

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "graphviz" with this command: npx skills add johnlarkin1/claude-code-extensions/johnlarkin1-claude-code-extensions-graphviz

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 - .dot extension 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) or graph (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.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

textual

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

tauri

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

manim

No summary provided by upstream source.

Repository SourceNeeds Review