Hello World with Narwhal and Jack

Alex R. Young





tutorials server

Hello World with Narwhal and Jack

Posted by Alex R. Young on .

tutorials server

Hello World with Narwhal and Jack

Posted by Alex R. Young on .

Narwhal allows you to create local or server-side JavaScript
applications. It's made by 280north who also
developed Atlas. Narwhal is a

  • Narwhal itself is a platform that's designed to be multi-interpreter and cross-platform
  • Rhino has the most complete interpreter support
  • Narwhal has a standard library that conforms to the CommonJS standard
  • A package manager is provided, called Tusk

This tutorial is based on the hello-web example from the Narwhal
documentation. You'll build a tiny web app that can return text, all
from JavaScript.


Downloaded it from the narwhal
. There's a zip file,
or just use git:

git clone git://github.com/tlrobinson/narwhal.git


Narwhal makes a JavaScript interpreter and several scripts (including
tusk) available. To get your shell into a suitable state,
run bin/sea from the narwhal directory. Confirm everything
works by typing narwhal.

Tusk and Jack

Tusk can install remote packages. Try typing tusk search
to view some JSON-related packages. Typing tusk
install package-name
will install a package.

Let's use tusk to create our own app:

tusk init hello-web
cd hello-web

Then install jack:

tusk install jack

This command added jack to your hello-web project. Jack makes
communicating with web servers easier -- it's based on highly successful
projects from the Ruby and Python communities.

Hello, world

Jack expects a file called jackconfig.js. Create one that
looks like this:

exports.app = function(env) {
  var text = "Hello, world!";
  return {
    status : 200,
    headers : { "Content-Type" : "text/plain", "Content-Length" : String(text.length) },
    body : [text]

From the same directory run jackup and visit


Narwhal comes with documentation in the docs/ folder.
There's enough in there about packaging, the standard library and
narwhal's environment to keep you busy for a while.