Ultra Light Graph
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Ultra Light Graphs, or ULG, is a simple way of creating graph images from nothing more than a few lines of text such as

(internet)	===>	[web dmz]


Install the gem as usual

$ gem install ulg

ULG requires ruby-graphviz and getopt

$ gem install ruby-graphviz
$ gem install getopt


You can give it a file

$ ulg file.ulg

This will create file.ulg.png by default.

You can give it multiple files

$ ulg file1.ulg file2.ulg

ULG will parse each file in the order specified, effectively concatinating them into one big file. Default output file is graph.png.

You can read from STDIN, especially useful if copying and pasting some graphs from documentation etc

$ ulg
(test1) ==> [test2]


$ ulg <<EOF
(test1) ==> [test2]

Other options:

$ ulg -h
Usage: ulg.rb [-o OUTPUT] [-s FILE] [-d] FILE FILE...

Reads from stdin if no input FILE given

Other options:

  -o OUTPUT  Output format (png, dot, svg). Default png
  -s FILE    Save to file
  -d         Debug mode
  -h         This help


# A comment

# Set global graphviz options

# Include nodes and edges from other files
include FILE

# Clear style for existing node
clear NODE

# General format is NODE ARROW NODE
nodeA ==> nodeB


  • node A - box
  • [node A] - box
  • (node A) - oval
  • <node A> - diamond
  • {node A} - hexagon
  • [node A|red] - label is red

Style is determined by the first occurance of a node, so you can do this

(node A|green) ==> [node B|red]
node A         ==> {node C}

Instead of this

(node A|green) ==> [node B|red]
(node A|green) ==> {node C}

So you only have to update a style in one place.

You can however clear the style of an existing node:

(node A|green) ==> [node B|red]

clear node A

[node A|red] ==> [node C|yellow]

This would result in a red boxed node A. You might want to use this to change nodes defined in other files being used.

Edge Lines

  • == - solid
  • -- - dashed
  • .. - dotted
  • == label == - edge label
  • == label|red == - label is red

At least two arrow characters are required. If using a label, at least one character must be on either side of the label.

Arrow Head

  • == - none
  • ==> - normal
  • ==<> - diamond
  • ==x - box
  • ==o - dot

Note: Arrow tails are not currently supported.

Any colour understood by graphviz should work for edge and node labels.


See Ultra Light Graphs


ULG 0.2.6, 2013-09-18

  • Better parsing of node labels to support edge characters (e.g. "" is now a valid node label)
  • Multiple edges between two nodes

ULG 0.2.3, 2013-05-15

  • Started a change log :D
  • Fix whitespace left at the end of labels
  • Added some unit tests (more to come)#