I'm still rating UML editors. Last time, BOUML failed to impress me. This time, I'm trying Gaphor.

I thought Gaphor would be terrific, since it's a Python/GTK project, and therefore native to my system (Ubuntu/Gnome). Should be easy to modify, too. And the home page looks good!

But Gaphor failed miserably for my purposes. Let's see why.

Supports Class and Sequence Diagrams: Poor. Technically, Gaphor "supports" any diagram. In fact, it makes no restriction about what kind of elements you put on a diagram. Mix your classes with your lifelines, go right ahead!

But that's not why I rated Gaphor "Poor" for diagram support. Rather, it's because there's no aggregation indicator for class diagrams. That's right, you can say "is-a" but not "has-a". On its website, Gaphor has a tutorial for adding your own elements... but why should I have to add an aggregation diamond?

Configurable Display: Fair. Gaphor didn't allow me to change colors -- perhaps that's hidden somewhere, but after the aggregation debacle I wasn't willing to look for too long. It also wouldn't let me move the labels for the message lines on my sequence diagrams, which means they're going to get crowded or overlap other elements in inconvenient ways. However, it supports UML syntax for everything. You can also use non-UML labels for your message lines, so that's REALLY configurable.

Unfortunately, you have to do everything by hand. It doesn't give you a dialog to enter attributes, or auto-complete types that are already in your data model. That's still the ultimate in configurability, but it's not a big help to usability.

Group Selection and Movement: Poor. While this works with classes and their associations, it doesn't work on calls. When I suddenly realize I've left out the initialization call, I can't move everything down and insert the new call. That's annoying.

Infinite Undo: Perfect! It even separates the undo actions by diagram. Of course, with the poor selection support, you're going to need this feature. A lot.

Supports Synchronous, Asynchronous, and Reflexive Messages: Poor. You have to bend the reflexive line around on your own. There's no support for orthogonality, so it gets crooked. The asynchronous line is represented a little differently than I'm accustomed to, but that's a minor detail. I'm an old geezer (in software reference frame), so there's probably a newer UML specification that I haven't upgraded to. As long as I can get my thoughts across, I'm good.

Dynamic Document Size: Poor. I didn't have to play around with page sizes, but the document only resizes when you place something that overlaps the edges. Then you have to use the scrollbars, move it over the edge, and set it down again. It can take a while to expand the document to the dimensions you need.

Scrolling: Poor. When stretching a sequence line from one end to the other, the view doesn't automatically scroll. However, you can set the end down, use the scrollbars, and move the end where you need to go. (Repeat if you still haven't scrolled all the way to your destination.)

Shared Data Model: Fail. Although any classes you define are shown in the sidebar, there's no way to reuse those same classes in the sequence diagram. This is not "shared". The message line wouldn't auto-complete the message name, and the only way to add a new operation from the sequence diagram was to open a class diagram! This is the essence of UML modeling, in my opinion; without a shared data model, all you've got is just a structured drawing program with some useful primitives.

Supports Large Projects: Sure, why not? Fail. The only import available is from Python, and I don't have a large Python codebase to test it on. But without a shared data model, all you're doing is drawing pictures; make 'em as big as you want!

Gaphor didn't even support any extras to recommend it. There was no support for alignment, spacing, or distribution of elements; the only import was from Python; and it doesn't do code generation.

Perhaps if you're doing something in Python, Gaphor will work for you. But it's severely crippled for my uses.