• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!


Abbot Introduction

Page history last edited by Nettie Cash 13 years, 5 months ago

About Abbot

Abbot is the code name for the next generation build tools that will ship with SproutCore.  For Bitburger, we want to make several improvements to the build tools that will make SproutCore apps both smaller and better performing:



Abbot is in BETA state.  Build chain is now functioning, including unit tests.  Some additional tools such as the doc tool and sc-install still need to be completed.


Useful Links


Change 1: Change "clients" to "apps"

Currently bundles are divided into two types: "clients" and "frameworks".  Clients are apps you can actually load in your web browser where frameworks are shared libraries.  Clients generate HTML files; frameworks do not.  We want to rename "clients" to "apps" to make this function easier to understand.


  • (DONE) Rename "clients" to "apps" in the generated bundles.  
  • Rename the "sc-gen client" command to "sc-gen app".  The client variant should remain as an option for backwards compatibility.
  • (DONE) When searching bundles for apps, look for a clients directory and use that if it exists.  Otherwise, look for an apps directory.


Change 2: Framework Packing (DONE)

We want to allow a framework or app to include the javascript and stylesheet of their dependent frameworks in their files.  This way we can reduce the number of script or style tags needed at load time.  It will also allow us to factor code into many small frameworks without paying a runtime performance penalty.


  • You should be able to specify in an sc-config that you want a particular bundle to "pack" its dependent frameworks.  When this option is set, the build tools should generate two additional files in the framework during a build:
    • javascript-packed.js - This file contains the JavaScript for the bundle preceded by the JavaScript for any frameworks the bundle depends on.
    • stylesheet-packed.css - This file contains the CSS styles for the bundle, preceded by the CSS styles for any frameworks the bundle depends on.
  • When you generate a client, any frameworks the clients depends upon that are packed should have their script or style tags generated using the packed version of the file, and script or style tags for dependent frameworks will be omitted.  Note that if you reference several packed frameworks, only the first framework may be able to load packed. 
  • Packed frameworks/clients include the JavaScript or Stylesheets of their dependent frameworks but NOT any other assets.  Hence the bundles for these other frameworks will still need to be produced and installed for the framework to work.


Change 2: Nested Frameworks/Clients (DONE)

A bundle should be able to include other apps or frameworks to an arbitrary depth.  This will allow for much neater organization of content.  It will also allow us to separate SproutCore into a number of smaller frameworks, all available under the same umbrella.  Using the packing feature, the generic sproutcore framework will include what you need to build a desktop app but can be further focused if needed.


  • A bundle may contain an "apps" and "frameworks" directory, which may contain other apps or frameworks.  The contents of these directories are not included when the build itself its built.
  • A bundle may contain an sc-config file.  The contents of this file will apply ONLY to the apps or frameworks loaded from that bundle, including the bundle itself.
  • A 'library' or 'project' is essentially a top-level bundle now.  In fact, you could now create a simple app without apps/frameworks directories in them.  We may want to change the default sc-init method to generate this kind of project.


Change 3: Unit Tests (DONE)

The current build tools do not contain any unit tests.  This has made changing the code without introducing regressions very difficult in the past.  All new code must be unit tested to minimize future regressions.


NOTE: The new build tools contain over 300 unit tests.  Yay!


Change 4: Minimize External Dependencies

Too many developers have faced install problems due to the large number of external dependencies the build tools needed to install for merb, rubigen, activesupport, etc.  Minimize these dependencies by:

  • (DONE). Switching to bones for managing gem packaging and distribution.
  • (DONE) Use the build system itself to generate templates for sc-gen instead of rubigen
  • (DONE) Rewrite sc-server as a simple rack application instead of using the complete Merb stack
  • (DONE). Embed custom libraries (such as thor) so they do not need to be installed.


Other Tweaks


  • (DONE) Platform support should be pulled out.  Instead, you can break your framework into smaller pieces using the nested frameworks + packing features defined above.


Comments (0)

You don't have permission to comment on this page.