SproutCore – The current situation
SproutCore is on the move.
And it will be awesome!
However I had the feeling that some folks are confused about SproutCore’s roadmap especially about the migration from SproutCore 1.6 to SproutCore 2.0.
This blog post tries to answer a few questions related to the SproutCore rebirth.
SproutCore 2.0 is not SproutCore 1.6 with new Features!
It is something new. And it is good.
So what comes with SproutCore 2.0?
Desktop vs. Web-Style Apps
One major paradigm change of SproutCore in version 2.0 is to loosen the exclusive focus on desktop-style applications (such as me.com) by introducing a second type of application called web-style applications (such as twitter.com). Especially SproutCore’s soul – the MVC architecture along with it’s bindings-concept – also helps to build those rich web-style apps .
For those who have observed the Rails framework evolving from 2.x to 3.0 the current SproutCore situation looks pretty familiar. Starting from a nice featured but monolithic framework towards a modern, modular, opt-in-what-you-need state of the art kick ass framework! And again, Yehuda Katz
is around. He’s well equipped with refactoring skills on both the technical and social side. So I am pretty sure SproutCore’s modularity will be improved to a healthy maximum.
Use HTML to describe UIs
Since SproutCore 1.5 you can use the Handlebars template language to describe parts of your UI. SproutCore 2.0 – and later on SproutCore UI – will improve this even further. This takes away the pain of previous SproutCore versions when trying to integrate custom HTML.
The SproutCore team is much aware of the need for good documentation. It is a high priority task on the SproutCore roadmap to provide a detailed documentation. From my point of view, recent changes to SproutCore guides reflect this very well.
Improved SproutCore Mobile Support
Maybe this is not so obvious from recent SproutCore blog posts but from personal discussions with SproutCore people the vision is clearly to provide a full featured framework to build rich-cross-plattform-cross-formfactor-web-style-apps. Have a look at Facebook (altough I am sure there even better examples out there). You can use it on every device. On your desktop computer, your mobile phone, your tablet pc and whatever internet enabled piece of technology you got. What happens is that you don’t think of a website any more. You think of a service. You focus on the people instead of messing around with the medium. It’s just there. That’s the future. That’s where SproutCore goes .
Towards this direction there are many things to be done. Improving modularity and providing HTML UIs are good examples for refactoring tasks needed to further improve mobile device support. There is still a way to go. Think about all those features modern mobile devices provide: gps, orientation change, the variety of screen resolutions, touch gestures and so on. All those aspects require attention.
Thinking about touch gestures is a good example to show what challenging tasks need to be done in SproutCore UI. I am sure every developer ever used a modern UI framework has a certain expectation about what he will have to cope with and what will be handled by the framework. For me it is a clear requirement that I don’t want to handle with layouting issues for structural views such as split views, for example. I want to be able to nest them as needed and to bind controllers directly to them. I am expecting a proper event management providing callbacks to respond to gestures. So the list of expectations is long.
What doesn’t ship with SproutCore 2.0?
SproutCore 2.0 does not ship with a feature complete UI framework as it is provided by SproutCore 1.x. For a good reason.
As mentioned above SproutCore 2.0 has become way more modular. Additionally, SproutCore 2.0 now also supports the creation of highly responsive web style applications. Following the opt-in paradigm it doesn’t make sense to provide a full UI framework for those who won’t use it.
So instead of baking the UI framework right into the framework core it has been moved to a separate project called SproutCore UI.
So when to start using SproutCore 2.0?
Since the SproutCore 2.0 developer preview  only few API changes happened , . One of the main API changes was replacing didCreateElement with a pair of callbacks insertElement and didInsertElement. Not a big deal, I guess. So the SproutCore 2.0 API can be considered as fairly stable.
But what else happened? A lot of the work done since the SproutCore 2.0 developer preview has been put into making the developer experience of the framework more enjoyable.
Among others this includes
- Bugfixes. Find an eliminate framework bugs , .
- Improved debugging. More detailed error messages will be provided to give developers hint about what exactly is wrong .
- Hide complexity related to asynchronous tasks going on behind the scenes. The framework should behave as developers expect as close as possible.
I am starting a new project. Which SproutCore version shall I use? 1.6 or 2.0?
The official statement from Strobe about this issue is:
”SproutCore 1.6 is still the best way to write desktop-style apps, and will continue to be maintained and developed by the core team and contributors. Right now, SproutCore 2.0 is the best choice only if you are building web-style apps, or want to augment an existing application.” 
So SproutCore is more than just building desktop style apps and if you’re aiming to create a rich web-style application then you definitely want to use SproutCore 2.0.
Personally, I wouldn’t stick to 1.6; even although it has been announced that SproutCore 1.x will be maintained. I’d prefer an early use of SproutCore UI. I am sure SproutCoure UI will the much better choice. It’s based on a much better architecture and hence will be more flexible. I guess it’s just a matter of time, now.
What is SproutCore UI about?
As mentioned before, SproutCore UI is a framework build on top of SproutCore to allow the creation of highly responsive rich plattform independent web applications.
What makes SproutCore UI different to UIs in SproutCore 1.6?
In contrast to SproutCore 1.6 SproutCore UI is not limited to desktop style applications. More than that SproutCore UI allows to applications to scale across different devices of different form factors such as smart phones, tablet devices and desktop systems.
“For example, a master/detail UI on a phone involves a navigation view, but on a tablet device, will translate to a split view with the master list on the left pane, and the detail view on the right pane.” 
So SproutCore UI helps you to create rich UIs without taking away the control over HTML.
Learn more about SproutCore UI reading this blogpost  and watching the meetup videos here .
When to start using SproutCore UI?
SproutCore UI will not be released as a final version along with SproutCore 2.0 final. This is because SproutCore UI is a much younger project and is still under heavy development and thus in an earlier stage than SproutCore (2.0) itself.
Nevertheless, it would be very helpful if people invested the time to into SproutCore UI and give feedback to the SproutCore UI developers or even better: participate.
More about SproutCore
Related Blog Posts
-  2011-05-25, ”Announcing SproutCore 2.0 Developer Preview”, Official SproutCore Blog,
-  2011-06-18, “SproutCore 2.0 Beta 1 Released”, Official SproutCore Blog,
-  2011-07-07, “SproutCore UI – An Introduction”, Official SproutCore Blog,
-  2011-07-15, “Video from the July SF Meetup – SproutCore UI and Community Q&A”, Official SproutCore Blog,
-  2011-08-06, “SproutCore 2.0 Beta 2 Released”, Official SproutCore Blog,
-  2011-08-04, “Video from Our International Meetups!”, Official SproutCore Blog,