SourceForge Logo Support This Project

What's this?

This is an editor for GraphViz, an excellent program imho for both quickly creating a graphical overview of some collection of related components as well as drawing graphs for systems which are too complex to manage using conventional drawing programs.

TINTFU can parse DOT files and render a preview of them in a side pane, while allowing each and every attribute of Graphs, SubGraphs and Nodes to be edited. The results of such changes are immediately updated in the preview pane.

Please welcome a new developer to this project: Matt Payne.

You will find his version, also the latest version of TINTFU, at the bottom of this page.

Also parked here is a spin-off of finding out how WebStart(tm) and Applets can be deployed. The same game (an AI version of a certain well-known mine seeking game) can be run both as an Applet and through WebStart.

If I use Mozilla for the Applet version it almost always dies. But it does that on anything Java nowdays :(

Other browsers work fine.

The source of the game is here.


The current BETA version can be started with:

java -jar tintfu_x_y_z.jar
java -cp tintfu_x_y_z.jar net.sourceforge.tintfu.DotEditor
where _x_y_z is the version, eg. java -jar tintfu_0_0_3.jar.

Alternatively, if you have webstart, you may click this link to download and start the latest version. Please ignore the security warning, the application must be able to read and write files.


Inserts a new NODE at the currently selected point. A dialog will open to fill in the attributes.
Inserts a new EDGE at the currently selected point. A dialog will open to fill in the attributes.
Inserts a new SUBGRAPH at the currently selected point. A dialog will open to fill in the attributes.
A dialog will open to edit the attributes of the currently selected element.
cut, copy & paste
Cut, copy & paste the currently selected element.
Enter the new name in the box to the left of the "Rename" button and then press it to rename the selected node. This also updates the new name in any edges that refer to the node.
Cycle dir
Cycle through the possible "dir" attributes of the current edge.
Swap rank
Changes "a -> b" to "b -> a" for the currently selected edge. Helps to better layout graphs. Use cycle to fix the direction of the arrows, if needed.


For as far as not self-evident:
Edge List Editor
Allows adding edges for known nodes and editing their labels.
Notes (especially for the current BETA version):


An example of a very simple DOT file would be:
digraph threeWay { a -> b ; b -> c ; c -> a }
If rendered using "dot -Tpng >3.png" it yields the following graph:

And this is a screenshot of TINTFU working on this file:

This is a slightly more complex example:

digraph "DotFileParser" {
    "node0" [ label="BOF" shape=ellipse ];
    "node1" [ label="EOF" shape=ellipse ];
    "node2" [ label="graphName" shape=ellipse ];
    "node3" [ label="{" shape=ellipse ];
    "node4" [ label="stmtList" shape=ellipse ];
    "node5" [ label="graphAttrib" shape=ellipse ];
    "node6" [ label="node" shape=ellipse ];
    "node7" [ label="edge" shape=ellipse ];
    "node8" [ label="}" shape=ellipse ];
    "node9" [ label="nodeName" shape=ellipse ];
    "node10" [ label="edgePair" shape=ellipse ];
    "node11" [ label="nodeList" shape=ellipse ];
    "node12" [ label="edgeList" shape=ellipse ];
    "node13" [ label="nodeAttrib" shape=ellipse ];
    "node14" [ label="edgeAttrib" shape=ellipse ];
    "node0" -> "node1" [ color=black fontcolor=black label="Empty file" ];
    "node0" -> "node2" [ color=black ];
    "node2" -> "node3" [ color=black ];
    "node3" -> "node4" [ color=black ];
    "node4" -> "node5" [ color=black ];
    "node5" -> "node4" [ color=black ];
    "node4" -> "node6" [ color=black ];
    "node4" -> "node7" [ color=black ];
    "node4" -> "node3" [ color=black fontcolor=black label="subGraph" ];
    "node4" -> "node8" [ color=black ];
    "node8" -> "node4" [ color=black ];
    "node8" -> "node1" [ color=black ];
    "node6" -> "node9" [ color=black ];
    "node7" -> "node10" [ color=black ];
    "node9" -> "node11" [ color=black fontcolor=black label="[" ];
    "node9" -> "node4" [ color=black ];
    "node10" -> "node12" [ color=black fontcolor=black label="[" ];
    "node10" -> "node4" [ color=black ];
    "node11" -> "node4" [ color=black fontcolor=black label="]" ];
    "node12" -> "node4" [ color=black fontcolor=black label="]" ];
    "node11" -> "node13" [ color=black ];
    "node13" -> "node11" [ color=black ];
    "node12" -> "node14" [ color=black ];
    "node14" -> "node12" [ color=black ];
This actually is the state machine used by the DOT file parser in version 0.0.1 of this program. It yields this graph:

Start of rant/personal option:

For those that might be wondering what TINTFU stands for: This(tm) Is(tm) Not(tm) TinyFlaccid(tm) Uselessio(tm). As a programmer I used to be very pleased with a program made by a small software company, it served very well to document for instance database models. Then a certain mega-gorilla-corporation bought it, raped it and burned down the villages it lived in. Shows you what the dangers are of
  1. Closed-source software.
  2. Allowing companies to buy up others for the unveiled purpose of eliminating the competition.

End of rant.

Mon Jul 28 2003 - changed three source files to:

  1. make tintfu run with JDK 1.3.
  2. Make tintfu able to use a remote DOT server. This is not the default behavior; you have to turn it on....
    Just pick the choice under the file menu and click OK to use the server that's already out there. Or enter the URL of your own. The server (dot.php) is in CVS next to the Java source files.

Also see my company website, in Dutch only (for now).