sproutcore/sproutcore — pull request #633 by erichocean (2011-12-07 06:59:15+00:00)
Title: SproutCore.js

NOTE: This pull request is currently incomplete/not ready to be merged. It will be updated through the month of December, 2011. I (Erich Ocean) am issuing the pull request now to get the discussion with the community and core team started...

## Why this pull request exists

On the #sproutcorejs IRC channel, and through various private channels, many existing SC 1.x users _not_ on the "core team" have been discussing ways to move SproutCore 1.x forward now that Strobe is inactive, and the major drivers on the core team (Yehuda Katz, Tom Dale, et. al.) are leaving SproutCore completely and taking SC 2 with them.

A major initial decision was whether to move forward with the 1.5-1.7 branch, or whether to continue forward with the 1.4.5 branch. Since 1.4.5 continues to be the most stable codebase, and since so many of us are still running 1.4.5, and find the changes overall in 1.5.-1.7 to be less than compelling, we have made the decision to move forward based on the 1.4.5 codebase.

## What is SproutCore.js?

As you can tell by the name "SproutCore.js", the idea is to focus on an "all-JavaScript" toolset, including the buildtools. This means dropping the existing Ruby-based toolset and the gem installer, in favor of a npm-based installer and buildtools that run on Node.js. This will be accomplished by updating the "garcon" buildtools that have been in use for years.

The next change is to reverse the over-modularization of SproutCore to just three frameworks: Foundation, Datastore and Ace (the "desktop" view layer in 1.4.5). Foundation and Datastore will not require jQuery, and both will run on Node.js in addition to the browser (Datastore requires Foundation). Ace will also require Foundation, as well as jQuery. Whatever support exists for mobile devices, and any experimental frameworks or tools, such as Greenhouse, will be dropped.

The Node.js buildtools (garcon) have been moved into the main sproutcore repository, vs. the current Ruby-based buildtools (Abbot) which exist separately. Keeping the two in sync has proven to be tedious and error prone in the past, and the hope is that by placing them in the same repository, it will become trivial for them to stay in sync.

__Initially, only minor code changes are being made beyond simple code reorganizations.__ This work will be done by Fohr, which is Erich Ocean's company. Fohr will also be offering commercial support for the SproutCore.js branch, and companies wanting to use it.

## The Future: Blossom

Moving forward, Fohr is developing a new, optional view layer that can be used instead of Ace, and will be API-compatible, called "Blossom". As Blossom may require minor changes to Ace's current API, Ace will be updated to match as needed.

Any feedback is appreciated. The #sproutcorejs channel is the preferred place to discuss this pull request. A Google Group has also been set up at https://groups.google.com/group/sproutcorejs