What's All This, Then?

Stunt is a set of extensions to the LambdaMOO server and Improvise is an associated framework that uses those extensions.

Stunt+Improvise is well suited to building immersive, collaborative, Web-based applications—specifically, applications where every user is a programmer.

Together, Stunt+Improvise comprise:

  • a persistent, NoSQL object database with a simple JSON API
  • an server-side MVC framework with support for HTML5 features like pushState
  • a client-side RAI framework based on Backbone.js
  • an environment for securely executing untrusted code
  • a simple, embedded programming language
  • integrated package management

Recently Updated Pages

Documentation TOC May 13 2013

Table of contents.

Start Scripts May 13 2013

Specify start scripts when starting the Stunt server.

Integer Prototype Apr 27 2013

$int_proto defines the verbs that can be called on integers.

String Prototype Apr 27 2013

$str_proto defines the verbs that can be called on strings.

System (#0) Apr 14 2013

Documentation for the System Object ($system, AKA #0).

Table of contents

Recently Contributed Packages

toddsundsted primitive (0.0.6) Apr 27 2013

The primitive package comprises prototype objects for LambdaMOO primitive data-types, utility operations on primitives, and objects for basic functional-style programming.

toddsundsted ask (0.0.2) Mar 30 2013

Ask implements queries based on relational algebra.

toddsundsted plastic (0.0.3) Mar 30 2013

Plastic is the MOOcode parser toolkit. It comprises an extended MOOcode language parser and compiler, and is compatible with the Stunt verb language extension mechanism.

toddsundsted primitive (0.0.4) Feb 24 2013

The primitive package comprises prototype objects for LambdaMOO primitive data-types, utility operations on primitives, and objects for basic functional-style programming.

toddsundsted core (0.0.2) Feb 21 2013

The Core package contains objects that work with and/or extend the Kernel package.

All packages

Recent Snaps

toddsundsted MOOCode, Plastic Feb 11 2013

toddsundsted

toddsundsted MOOCode, Original Feb 11 2013

toddsundsted

toddsundsted Test Snap Feb 11 2013

toddsundsted

Play with code

Build and Run it Locally

If you can build the LambdaMOO server and run LambdaCore (or similar legacy database) you shouldn't have any problems compiling and running Stunt+Improvise. I have personally had success with both Linux and OSX.

Fork/clone the Stunt repository and the Improvise repository.

git clone git@github.com:toddsundsted/stunt.git
git clone git@github.com:toddsundsted/improvise.git

Build the Stunt server:

cd stunt
./configure
make
cd ..

In order to connect to a brand-new database you need to define bootstrap passkeys for the two default players. The default players and the passkeys should only be used in a trusted development environment. The passkeys are set via environment variables. The Wizard player has full access to the database and server.

export Stunt_Passkey_Wizard=<passkey>
export Stunt_Passkey_Programmer=<passkey>

Run the Stunt server on the Improvise database. The server will start listening for telnet connections on port 7777 and web (HTTP) connections on port 8888.

cd improvise
../stunt/moo Improvise.db Improvise.db.new

In your browser, connect to the running server (http://localhost:8888/) and enter the appropriate player's passkey credentials and press "Connect". You will drop into a web-based console from which you can explore the server.

If you like, you can also connect via telnet:

telnet localhost 7777

Try it on Heroku

Note: Heroku support is proof-of-concept and is currently only suitable for trying out Stunt+Improvise without the hassle of building your own server—it is otherwise not ready for prime-time.

Specific caveats:

  • Changes to the database are not persisted. I may eventually address this by providing transparent serialization to/from back-end cloud storage.

This brief tutorial assumes you have a credible working knowledge of both Git and Heroku.

Fork/clone the Improvise repository.

git clone git@github.com:toddsundsted/improvise.git
cd improvise

Create a Heroku app and specify the Stunt buildpack:

heroku create <appname> --buildpack https://github.com/toddsundsted/heroku-buildpack-stunt

Add Heroku as a remote:

heroku git:remote -a <appname>

In order to connect to a brand-new database you need to define bootstrap passkeys for the two default players. The default players and the passkeys should only be used in a trusted development environment. In Heroku, the passkeys are set via config variables. The Wizard player has full access to the database and server.

heroku config:set Stunt_Passkey_Wizard=<passkey>
heroku config:set Stunt_Passkey_Programmer=<passkey>

Commit changes to git and push to Heroku:

git push heroku master

Open in the browser:

heroku open

Enter the appropriate player's passkey credentials and press "Connect". You will drop into a web-based console from which you can explore the server.

Contact

Note: The current release of Stunt+Improvise is for hackers only—the new code is reasonably well covered by tests and I use it extensively in my own projects... but consider yourself warned.

I'm available via the MOO-talk Google Group. Post questions and comments there.

Todd Sundsted