I've spent a little time chasing these up and I think the tools can be divided into a few categories. Personally I think there's little harm in including all of the tools except those that require a GUI, but the core tools are the most important - those are the ones that third party software is most likely to rely on. If you feel that more binaries equates to more maintenance effort, however, you may wish to trim the list.
As an aside, I never realised how much obscure stuff there was as part of Graphviz - some of the graph filters in particular look quite interesting. Useful? Mmmmm, maybe in esoteric circumstances... But interesting.
Anyway, the list of core tools, which actually produce image files from graph definitions, are as follows - these correspond to the different layout engines so different types of graph will use a different tool:
circo
- circular layouts for undirected graphs.
fdp
- undirected graphs using a spring model (a newer / less mature alternative for neato
).
dot
- standard tool for drawing directed graphs, probably the most commonly used one.
neato
- undirected graphs using a spring model.
osage
- draws clustered graphs recursively.
sfdp
- alternative to fdp
for larger graphs.
twopi
- undirected graphs using a radial layout.
There are also a bunch of command-line tools to filter graph files in various ways. Most of these are of primary use to academics, but I can imagine more mainstream software having a specific use for them under specific circumstances. For example, ccomps
might be useful for network visualisation software for a large network, to identify hosts in a cluster which have become partitioned:
acyclic
- reverse edges in a directed graph to remove any cycles.
bcomps
- split a graph into biconnected components.
ccomps
- split a graph into unconnected components.
dijkstra
- calculate distance of every node from a specified origin node.
gvcolor
- colour graph nodes according to the flows through them.
gvpack
- merges disjoint graphs into a single graph definition.
gvpr
- manipulate graphs arbitrarily, a Graphviz equivalent to awk
.
prune
- label subgraphs rooted at specified nodes to be removed by gvpr
.
sccmap
- split a graph into strongly connected components.
tred
- calculate the transitive reduction of a graph.
unflatten
- improve layout of graphs with many leaf or unconnected nodes.
There are a set of command-line tools which convert to and from the native Graphviz "dot" format (sorry, it appears I'm supposed to call it "gv" format these days according to the man pages):
dot2gxl
- old name for gv2gxl
.
gml2gv
- convert from GML format to dot.
gv2gxl
- convert from dot to GXL format.
gxl2dot
- old name for gxl2gv
.
gxl2gv
- convert from GLX format to dot.
mm2gv
- convert from Matrix Market format to dot.
There are also a few tools to do other tasks - mostly these are Graphviz-related, but I can't figure out why on earth diffimg
is included. I mean, I can see it could be potentially a useful utility in a number of situations, but no idea whatsoever what it's got to do with graphs specifically. Maybe they use it for debugging their layout engines.
diffimg
- create an image which is the diff of two other images.
gc
- show graph statistics, the Graphviz equivalent to wc
.
gvgen
- generate a graph from a set of predefined types.
nop
- pretty-print a graph source file.
Finally, I can't see how the following tools would be useful without an X-server. Potentially I guess people might want to run them over SSH with X-forwarding, but that's getting pretty obscure for PA to offer. I can't see any explicit harm in including them if it's easier just to include everything, but short of X-forwarding they'll mostly just quit with the usual error about not finding a display:
dotty
lefty
lneato
vimdot
Hopefully that's some use. It was also an interesting blast from the past - I haven't messed around with graphs this much since my Cambridge Uni days. Running gvgen -S6 | neato -Tpng -o/tmp/test.png
kept me amused for, oooh, at least 30 seconds. Good times.