I spent a day and a half comparing Cappuccino and SproutCore, two web frameworks for creating pretty stunning desktop-like web apps. Long story short: I’ve decided to use SproutCore instead of Cappuccino.
First, some background. I’m currently prototyping a startup idea. Like many such ideas, it’s very aspirational and a bit vague, but I’m certain that great UX will make or break this startup in the real world. I wanted to start prototyping the UX quickly, so I could work through lots of bad ideas until I found the right one.
Cappuccino and SproutCore both seemed to offer me a way to do this, but I couldn’t decide. Both seemed to have aspects that I liked, so I decided to go through both projects’ tutorials and see which I liked best.
Things started to go downhill from the start though. To some extent, my experience could have been made smoother with better written tutorials and documentation. Installation was a little confusing if you don’t download the starter package. I opted to use Tusk, since the starter package is nearly a year old and I wasn’t sure if it was up to date (more on this later). But my first problem was figuring out what Tusk was, where to download it, etc. Cappuccino is actually built on top of Narwhal, which provides tusk, and the Common JS framework. Once I figured out what these projects were, I was actually impressed and excited, but the Cappuccino site leaves you to figure this out on your own.
I’ll spare you the detailed play-by-play of the tutorials, but suffice it to say that they could be better organized. I’ll let these two quotes from the tutorials speak for my experience developing a Cappuccino application: “This may seem daunting, but its [sic] really not that complex.” and “This may seem a bit overwhelming, but if we analyze it in pieces you’ll see that it’s really quite straight forward.”
That pretty much sums up my experience with Cappuccino. The author is right – the intent of the code is straightforward and understandable, especially if you have Cocoa experience. But ZOMG the amount of code needed to build the app was really tedious. All styling needs to be done in code, without help from CSS. As a result, it wasn’t clear how easily it would be to create a distinctly different UX than the default provided. Once I looked again at the apps people have launched with Cappuccino, they all had a distinctly similar look and feel. Also, Cappuccino’s main UI framework, AppKit, is over 1MB! It took a few seconds to load even when I was working locally.
My experience getting up to speed with SproutCore was completely different than Cappuccino. First, the installation was dead simple. SproutCore is installed through a Ruby gem, and comes with useful command line tools that aid development. The Todos tutorial was also significantly easier to follow, since it highlighted code changes and was structured better. It also covered far more ground – the entire MVC stack – and gave me a much better sense of how I’d actually build something useful.
It’s also comforting to know that SproutCore is behind a large, shipping web app with a polished UX (MobileMe). Having Yehuda Katz in the community also doesn’t hurt. The new SproutCore Guides site seems to be developing quite nicely as well. In short, there’s a lot of visible community-building going on with SproutCore, at least from an outsider’s perspective.
Conclusion: SproutCore Wins!
I feel bad that I don’t have anything more to write about SproutCore, but my initial experience with it was so smooth that there’s little more to say. My goal was to find a front-end application framework that would let me start experimenting with my own ideas quickly, and SproutCore seems to be that framework.
The big caveat is that I haven’t started yet. I’ll soon discover where they’ve hidden the unicorn poop, but getting started is half the battle, right?