An agile software task management tool & SproutCore sample application
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



'Tasks' is a rich-internet application for tracking personal or team tasks.
The 'Tasks' GUI runs on desktop and iPad browsers and is particularly useful
for managing Agile software development.

See a quick video overview at:

Check out a full demo instance at:
Login as 'SG' no password

Tasks also runs in 'ToDo' mode (this is useful to manage a list of things to do,
personal or for a team).  An instance built in this mode is available at:

'Tasks' consists of a SproutCore-based GUI and REST-based Servers.
Persevere and Google App Engine (GAE) Servers are supported out-of-the-box.

I started the 'Tasks' project in June 2009 with the following goals:

1) To become a comprehensive sample application that goes beyond  "hello world"
   examples (like "clock") and snippets showing off facets of SproutCore
   (like "drag").  I want to use 'Tasks' to learn SproutCore and showcase its
   capabilities on the desktop and iPad via a single application.

2) To illustrate how to engineer a non-trivial application using artifacts like
   a task development plan (features/tasks), wireframes/mockups (GUI design),
   statecharts/controller structure (design diagrams), and integration with
   REST-based Servers (API/JSON specifications).

3) To offer 'Tasks' as an intuitive and powerful agile software management
   tool to replace cumbersome task/issue tracking software.

4) To provide a superior GUI to manage SproutCore issues as it undegoes an
   explosive launch and maturation as a premier HTML5 framework.
   What better that an application built in SproutCore to manage its issues?

'Tasks' is under development - maturing into a tool to manage the development
of complex software.  I hope you will find 'Tasks' useful as you start your
journey with SproutCore.  Please send me your feedback or code contributions!

-Suvajit Gupta (


There are several things you can do with 'Tasks' (but you will have to read
section C below for all of them!):

1) Deploy/use it as a tool (this will take about 20 minutes the first time).
   If you need to customize 'Tasks' (e.g., put in a custom logo), read section D.
   If you deploy locally or to your intranet, read sections E, F, and G.
   If you deploy to the cloud, read sections I or J.  
   Read section K for rebuilding/redeploying 'Tasks' on the cloud.

2) Use it to learn SproutCore.  Read sections E, F, and H.

3) Contribute to 'Tasks' development and testing.  Read sections M and N.


On a Mac, you must have "Xcode" and "git" installed before using the steps below.

If you don't have Ruby 1.9 (check by typing "ruby -v"), install and use
"rvm" to get it...

bash < <( curl )

Add the following line at the end of your ~/.bash_profile or ~/.profile
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

rvm install 1.9.2
rvm use 1.9.2 --default

If you don't have SproutCore installed type...

sudo gem install sproutcore

Change to the directory where you would like to work on 'Tasks' and type...

git clone git:// tasks
cd tasks/frameworks
git clone git://
git clone git:// ki
git clone git:// scui
git clone git://
git clone git:// scuds
cd ../

sudo gem install bundler
bundle install && bundle install --binstubs


'Tasks' has several customizable settings to suit your specific needs.
This is useful if you deploy 'Tasks' on your intranet or the cloud.
Search for "Customizable" within 'Tasks' code to see what you can modify.

1) One common scenario is to build 'Tasks' in "To Do" mode:

  - Set "softwareMode" to false in "apps/tasks/core.js"

2) Another popular scenario is to customize your "Installation Title/Logo":

  - Add your logo to the "apps/tasks/english.lproj/default_theme/images" folder
  - Modify "apps/tasks/core.js" to specify if it is a "squareInstallationLogo"
  - Modify the Buildfile to customize the <InstallationTitle>
  - Modify "apps/tasks/english.lproj/main_page.js" to customize
    <InstallationTitle> and <installation-logo-filename>

Commit your changes so that you can later get code updates from git...

git add .
git commit -m "customization" .


Persevere is a bundled server you can use to run 'Tasks' locally on your machine
or deploy on your intranet if your whole team needs to access it.  The Persevere
server doesn't enforce authorization - access control is only done in the GUI.
The Persevere server also doesn't email notifications at this time.

1) To start the Persevere server...


2) To stop the Persevere server...



After starting the Persevere server (see above), run a script to create the
first user (after which you can log into 'Tasks' and use the User Manager GUI):

./scripts/ "System Admin" "SA" "Manager" localhost:8088
(enter/reenter password and remember it!)

./scripts/ "Guest User" "guest" "Guest" localhost:8088
(press Enter twice to create a blank password)


Navigate to the following URL to directly manipulate Persevere data:



1) Start the SproutCore server...

./bin/sc-server --port 4400

2) Navigate to the following URL...


3) Enter "SA" in the dialog box and the password you set earlier and press Enter.
   The 'Tasks' GUI should come up.

4) Add your projects and tasks and have fun with 'Tasks'!
   To get some sample data to play with, you can click
   on the Import button and paste in the contents of the file


You can deploy 'Tasks' to the cloud using GAE.  The GAE server enforces the same
authorization as the GUI access control, making it a secure deployment to protect
the integrity and privacy of your data.  The GAE server also supports email

1) If you don't have a GAE account, sign up here:

Click on the "Download" link for the App Engine SDK and then click on
"Google App Engine SDK for Python" and install it on your computer.

2) Sign in to GAE and create an application by browsing to:

Login to your Google account and click "Create Application".

The first time, you will be prompted to enter your mobile number to receive a
registration code. From the text message, copy the registation code into the prompt.

Enter a unique <application-identifier> and application title and press
"Create Application" button at the bottom.

3) Get the Tasks-GAE server code:

cd ../
git clone git:// <application-identifier>

4) Build 'Tasks' GUI for deployment (this may take a few minutes...)

cd ../tasks
./bin/sc-build -rc --build=build --languages=en

After sc-build finishes, copy tasks production build for deployment on GAE:
(for this "cp" command make sure there is no slash after "static" which you may
get if you tab for filename completion)

cp -r tmp/build/static ../<application-identifier>

5) Run GoogleAppEngineLauncher to add your new application:

From "File" menu, choose "Add Existing Application..."
Click on "Browse" and find/select the <application-identifier> folder,
press "Choose" and then "Add"

6) Configure/customize GAE application before deployment:

cd ../<application-identifier>
Open "app.yaml" and replace <application-identifier> on first line

Open "" and replace "" with the email you use to login to GAE

You can optionally customize "only_allow_manager_login" in "" so that only
"Manager" users can log in - this is useful in securing your personal data.
Commit your changes so that you can later get code updates from git...

git add .
git commit -m "customization" .

7) Deploy 'Tasks' to the cloud by pressing "Deploy" from GoogleAppEngineLauncher:
   (this can take a few minutes...wait until it says "finished with exit code 0")

Browse to http://<application-identifier> to launch your new 'Tasks'

8) Add yourself as a user via the same approach as what is outlined in section F:

cd ../tasks
./scripts/ "<Full Name>" "<Login Name>" "Manager" <application-identifier>
(enter/reenter password and remember it!)


1) Run the following command from inside 'Tasks' root directory
	> python setup <application-identifier> build
2) Then follow steps 8 & 9 below in the GOOGLE APP ENGINE DEPLOYMENT


1) If you made any mistakes while building or deploying or need to make additional
changes to Tasks later, follow these steps:

cd ../tasks
rm -rf tmp

From section I, repeat step 4 and then 7

2) Periodically, you can fetch code updates from git to get new features and fixes.
Make sure any changes you made are first committed (see section D).
To get code updates while you are in the "tasks" directory:

git fetch origin
git rebase origin/master

You can also get GAE Server updates with the same commands from your
"<application-identifier>" folder.

Repeat step 1.


If you need to add/update/delete GAE applications run GoogleAppEngineLauncher
and press the "Dashboard" button.  Login to your Google account and click on
"My Applications" to get access to your applications.

To modify any data directly in the database click on "Datastore Viewer"
button under the "Data" group.  Choose the type of 'Tasks' records to view/edit.

Since 'Tasks' soft-deletes data you should periodically cleanup these records
on the GAE Server.  This is an advanced topic that is detailed in the code.


'Tasks' ships with several artifacts in the "documents" folder to help you
understand its design/plans:

1) "plans/TasksDevelopmentPlan.txt" shows the work breakdown and assignments
   (see last sentence of Step 8).

2) "GUI/TasksWireframe.png" shows the initial GUI design with callouts explaining
   the key functionality.

3) "GUI/TasksMockup*.png" shows the visual design concepts used to style 'Tasks'.

4) "design/TasksStatecharts.pdf" shows the states/transitions within the GUI.

5) "design/TasksControllers.pdf" shows how the various controllers are wired
   and how the views relate to them (implementing the root controller pattern).

6) "API/TasksAPI.xml" drag this file into your browser - the files in the
   "include" folder render this specification in a nice format for you to
   understand the REST API endpoints.

7) "API/TasksJSON.xml" documents the model object structure for what is sent to
   the server via REST calls.

8) "API/TasksFileFormat.txt" Shows the simple/intuitive syntax for importing data
   into and exporting data from 'Tasks'.  In fact, the TasksPlan.txt is itself
   written in this format and can be imported into 'Tasks'!


Lebowski is used to test 'Tasks' end-to-end (GUI<=>API/Server/DB).
First get the latest Lebowski...

sudo gem install lebowski

1) From another terminal window, run the Lebowski server:


2) In another terminal window, from the "tasks/spec" folder, run Lebowski scripts:

lebowski-spec -f n main.rb

To re-run the scripts:
  - stop Lebowski server by pressing "Control-C"
  - repeat steps 1) and 2)


The filter on/off icons:
Diagona Icons
Copyright (C) 2007 Yusuke Kamiyamane. All rights reserved.
The icons are licensed under a Creative Commons Attribution 3.0 license.

The color indicators on the filter icon, as well as numerous other icons in 'Tasks':
Silk icon set 1.3
Mark James -