Simple router/microframework for NodeJS


A router/microframework for NodeJS.


  • Is tightly tied to HTTP--there's no HTTP abstraction going on.
  • Handles all HTTP verbs more or less equivalently--it's no more difficult to handle a DELETE than a GET, for example.
  • Uses standard regular expressions to do the URL matching and routing.

A Scylla application is simply a JavaScript object that inherits from scylla.Base. To figure out how to route a request, Scylla looks the method names of this object, which double as URL-matching patterns: the method GET /user/(.*) is invoked when a GET request is made for a URL like /user/mjs. (And mjs is passed as an argument to the method.)

If myapp is a Scylla object, calling the dispatcher() method on it returns a function suitable for passing to http.createServer(...):


var sys = require('sys'),
    scylla = require('scylla');

function HelloWorld(name) {; = name;

HelloWorld.prototype = scylla.beget({

    "GET /$": function(req, res) {
        var body = "Hello, " + + "!\n";

        res.writeHead(200, {
            "content-type": "text/plain",
            "content-length": body.length



DEBUG = true;

require('http').createServer(new HelloWorld("Michael").adapter('nodejs')).listen(8000);

There are a few Scylla demos in the examples directory:

$ node static.js 
Server running at


  $ curl -i -s -X GET
  $ curl -i -s -X GET

Michael Stillwell