Murky: A Cocoa GUI front-end for Mercurial


One of the things I miss from the days just before the great Linux/Bitkeeper schizm is the Bitkeeper GUI front-end tools. Obviously, since the great fallout, I have moved away from Bitkeeper and have been alternating between Git and Mercurial as I get the chance. But to this day, I still miss the GUI tools Bitkeeper provided. They were written in Tk and damn ugly, but the overall design was pretty good and integrated well with my workflows at the time.

I remember struggling to get better Mac support for the Bitkeeper tools way back then as they required X11. Once upon a time, there was a way you could redirect Bitkeeper to use an Aqua/Tk so you at least didn't have to go through X11 (which had even less integration on those older Mac OS X versions than today's versions if you can believe it). But then Bitkeeper changed things and pretty much locked out that possibility despite my complaints. (So I am definitely not weeping seeing the rise of open source distributed SCMs.)

But I've found the GUI tools extremely lacking in Git and Mercurial. I think Git's tools remind me the most of Bitkeeper's tools, especially since they have the citool (check-in tool). Both Git and Mercurial have a viewer tool which reminds me a little bit of the Bitkeeper revtool  (revision inspection tool), but I think revtool was way more interesting as you could visually pick different two different commits in a graphical timeline and then directly compare the coalesced changesets between the two points in a diff or a full line-by-line source code viewer.

But to start with, I'll settle for a good check-in tool. Git at least has one, but it is also Tk based and I find awkward to use on a Mac. Originally, the fonts were tiny and I managed to make the thing readable in my preferences, but a lot of the text gets truncated now. I also find the interface a little unintuitive, even though it is fairly simple. I also find the launch times a little slow and I think the workflow design is that you are meant to launch and close when you check-in, not to leave it open indefinitely which means I start to notice the launch times.

Mercurial on the other hand doesn't even come with a check-in tool as far as I know.

So I was very happy to encounter Murky by Jens Alfke. It is a native Cocoa front-end for Mercurial. He doesn't consider done or even beta, but given those caveats, I think it is terrific. It almost completely replaces my longing for the Bitkeeper GUI tools.

Murky Screenshot

On the surface, it seems to have a fairly minimal UI, but it does seem to incorporate both the elements of a check-in tool and a revision tool. Perhaps that is good design at work as it is able to present both in a compact, but intuitive interface.

But the other thing I like about Murky is it gets a lot of the Mac usability details right. For example, it uses FSEvents to listen for file system changes so the UI is always up-to-date telling you if a file has been changed without taxing your system. (This also means I can just leave it open in the background instead of constantly relaunching it.) It can invoke Apple's FileMerge tool so you can do revision comparisons. (Though I already have plain command line Mercurial integrated with FileMerge.) It even has a feature that lets you open up a terminal in the directory your file resides in using Apple's Scripting Bridge API.

I've always been a hybrid command line/GUI user so Murky works well for me. Because I do a lot of things on the command line, I haven't touched all of Murky's features, but I know enough command line phobes that I'm glad to see they are there.

Anyway, instead of taking a coding break as I should have this past Labor Day, I ended up implementing two bug fixes for Murky that were impeding me. (Bug #58 and #75) I have published my changes in a public repository and hope the maintainers will accept my contributions.

If you are a Mac user looking for a good Mercurial GUI, I highly recommend this one. And it's open source (BSD license) so you can help make it better.

Jens Alfke blog announcement for Murky:

Murky at Bitbucket

My repo containing my fixes:

Copyright © PlayControl Software, LLC / Eric Wing