No description, website, or topics provided.
JavaScript CSS CoffeeScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



High-level, "Model/View" (or "Presentation Model") style object oriented library made to aide you in your quest for Javascript awesomeness by assisting with such things as implementing inheritance patterns, handling data-mutation observation, establishing hierarchies of objects which have intrinsic knowledge of their responsibilies, and the making of sandwiches.


  • Specific module documentation and examples moved to the wiki.
  • See the Docco annotated source code located in the docs directory.
  • Utilize the patterns and best practices docs in the TechRabbit Blog

API Reference

Methods Exposed by Module and Their Corresponding Wiki Page


  • addDelegate(object)
  • getDelegate(role)
  • removeDelegate(role)
  • delegate(role, method)
  • construct([el][, data])
  • base(methodName[, args...])


  • set(key, value)
  • setPath(path, value)
  • sets(object)
  • get(key)
  • getPath(path)
  • gets(array)
  • unset(key)
  • unsetPath(path)
  • unsets(array)


  • addChild(child, name)
  • getChild(argument)
  • removeChild(argument)
  • bubble()
  • removeFromParent()
  • send(arguments)


  • becomePremier
  • init
  • resignPremier
  • setEl(argument)
  • $(selector)

observable extension

  • observe(fn)
  • observes(array)
  • unobserve(fn)
  • unobserves(ary)
  • deliverChangeReords

Modules Residing in 'Extras'

####Change Delegate

  • filter

####Data Delegate

  • filter

listener extension

  • bindEvents
  • unbindEvents

persistable extension

  • create([options])
  • read([options])
  • update([options])
  • destroy([options])
  • save([options])


  • addedToParent(parent)
  • render([change])


  • template(string, data, scope)


  • instantiateChildren()

bindable extension

  • setBinding()
  • setBindings()

Test Suite

The specRunner.html file in root runs each individual module's specs. Load it as a file in your browser of choice or, if you have Node.js installed you can npm install node-static then node staticServer.js which will serve the spec runner at localhost:5678/specRunner.html. This is useful, for me at least, for x-platform testing as I can just point virtual machines at the host. Note that individual spec files can be run from here as well, just adjust the path accordingly. The sudo.Base module for example could be run at localhost:5678/base/specRunner.html

Rails Gem

A rather opinionated gem is available here. More than just making sudo builds (sudo and sudo-x) available for your rails apps it enforces a rather unique workflow. More info there...

Node.js Module

A simplified version of sudo.js is available for Node:

npm install sudoclass

It provides sudo.js style inheritance, key-value coding (the sudo.js Base Object), delegation, and data-mutation-observation via the Observable extension. The sudo.js build tool is built with this.

Build Tool

The latest concatonated (but unminified) version of sudo.js (and sudo-x.js [sudo.js with added stuff]) is always located in build/debug. If you are making changes, adding new modules, or creating a custom build and need the debug/ files to be rebuilt cd into the build/lib directory and run:

node run sudo.html [sudo-basic.html] [foo.html] ...

Note that the foo.html above would represent an HTML configuration file you created for a custom build of sudo.js.

You will need Node.js installed as well as the sudoclass module mentioned above. The arguments that follow the invocation of run are the html files that the build tool uses to load the 'modules'. If you are adding new 'modules' be sure to add them to sudo.html (and/or other foo.html) config file(s) or they will not be added to the concatonated debug/ file(s).


The debug version, build/debug/sudo.js, contains the basic 'modules' as well as the others located in the extras directory that have been tested and documented. A basic build is also available (sudo-basic), this serves as an example of how to configure a custom build of sudo.js if desired.