SproutCore: An HTML 5 Application Framework

InfoQ has reported on SproutCore a couple of times in the past and recently learned about the upcoming 1.0 release. SproutCore promises stunning desktop-class applications without plugins inside of the browser. All of this is done by using techniques and technologies that have been around for years but which have continued to evolve. SproutCore boils down to JavaScript, HTML and CSS. This naturally leads SproutCore to be backend agnostic which is also a nice advantage,

It can work with any backend server technology that you want to use. In fact, once it is deployed, SproutCore apps contain only standard HTML, JavaScript and CSS. You could deploy an entire app using nothing but Apache.

Since the last time we wrote about SproutCore a lot has changed which is why InfoQ asked Charles Jolley, President and CEO of Sproutit, a few questions about the upcoming release.

What makes SproutCore an HTML 5 application framework?

SproutCore is one of the first web frameworks explicitly geared towards using the new web app features in HTML5 (such as offline storage, HTML5 ApplicationCache, etc) to build rich native-class apps. SproutCore works fine on older browsers running on HTML4 features, but we're looking towards the next 5 years where the HTML5-capable browsers - such as Safari 4, Chrome, Firefox 3.5, etc. are common place.

To me this is where the most exciting work will be happening on the web, so we're designing for it.

When is SproutCore 1.0 expected to be out of beta?

This fall. Although there will be apps live on SproutCore 1.0 before that time. It's currently fairly stable since we added over 5,000 unit tests over the last year covering just about every feature. Over the last year we've literally rewritten almost every part of the SproutCore build tools and JavaScript framework to stabilize the API and make major improvements in performance. Whereas I think SproutCore 0.9 and earlier was about proving that you could build rich desktop-scale applications in the web-browser, SproutCore 1.0 is about making this core technology work smoothly and reliably. I'm happy to say we've really surpassed even our own goals on this front. SproutCore 1.0 is definitely the best work many of us have ever done.

Will all of the documentation, website updates, etc be done for the 1.0 release (as it mentions on the site)?

Yes. In fact, we just started hosting the API docs at http://docs.sproutcore.com and we have a built-in documentation viewer that someone is building. There are also a bunch of sample apps (http://demo.sproutcore.com) including some full end-to-end examples that will be open sourced soon.

Why SproutCore instead of GWT or Cappuccino?

Usually people who try GWT or Cappuccino switch to SproutCore for a couple of reasons. The first reason they switch is performance. All three frameworks (GWT, Capp or SproutCore) will get you going pretty fast on a rich web app. Once you build an app with some complexity though, it usually doesn't take too long before major bottlenecks creep up, especially on the initial load time it takes for the app. SproutCore apps scale really well in this regard. The second reason is the ability to customize. GWT and Cappuccino both keep you pretty isolated from the web browser, inside their Java or Objective-J sandbox. This works great until you hit the edges of what they have done with their platform. Then you're on your own mucking with the internals. SproutCore offers a rich layer of functionality also, but it is plain old JavaScript so going off and doing your own thing is a lot easier.

Why the move away from Ruby (0.9) to pure JavaScript (1.0) for the view layer?

Two major reasons. First, we are planning to build a drag-and-drop UI designer once 1.0 is complete. The move to JavaScript makes this possible. In fact the core library needed to do a UI designer is already done and in SproutCore 1.0 code. We just need to finish the designer app itself. Second, and more importantly, is performance. It turns out that if you simply write in JavaScript and then let SproutCore handle all of the HTML and CSS for you, we could implement some tricks that make your app way faster, even on IE. Overall the new view layer in SproutCore is about 10x faster than the old version (and the old version was pretty fast). As a side benefit, using pure JavaScript makes development a lot easier since you don't have to think in two programming languages; only one.

Is the DataStore API applicable for retrieving data from a Java server? An RDBMS (i.e. MySQL, Oracle)?

You can work with any backend that you like. The Todos Tutorial (http://wiki.sproutcore.com/Todos%C2%A0Intro) in fact currently lets you choose from three different server technologies when you work through the tutorial. Java is not part of that list yet, but someone I think is working it. The cool thing is that SproutCore apps are simple HTML/JS/CSS. It doesn't matter what backend server technologies you use since your SproutCore app communicates with them via Ajax.

Is it possible/feasible to embed other view content (i.e. videos, flash content, audio)?

You bet! Checkout the video demo (http://demo.sproutcore.com/video/) in Safari 4 for an example. [this demo uses the HTML5 video tag] In fact with SproutCore 1.0 we removed our dependency on Prototype and made SproutCore JS-library agnostic. This means if you have existing code in jQuery, ExtJS, YUI, or even Prototype, you can embed it inside of a SproutCore app.

With SproutCore 1.1 on the roadmap, is there a timeframe for that release?

Not yet. We're focused on ensuring that SproutCore 1.0 is the best it can possibly be. Unlike 1.0, where one company made a lot of the major contributions, 1.1 and later should be done more in the community so I expect it to happen more publicly on the site.

SproutCore is an interesting possibility for building web applications that rely only on the browser, however, there are alternatives that are also worth investigating such as Google's GWT and Cappuccino.