Catapult

One of the benefits of building stateful client-side apps, is that you can make them independent from the rest of your backend, having a separate repository and deploy process. The advantages of this is that it keeps your backend and frontend decoupled, and was the principal point behind my article on using Rails as an API.

However, splitting JavaScript, CoffeeScript and CSS out from a Rails app can be tricky. You no longer have an automatic asset pipeline and compilation, or indeed a server.

I've been using a number of basic Rack scripts to manage my JavaScript projects, and recently bundled them up into a gem called Catapult. Catapult manages building new apps, compiling assets and serving them. The gem is built on-top of Sprockets, and comes with CoffeeScript, Stylus and CommonJS compilers out of the box, my usual work flow.

To be fair, there's no shortage of asset compilation libraries on GitHub, and I was a bit loath to reinvent the wheel. Having said that, the key principal behind Catapult is simplicity. It's suits my personal use-case perfectly, and customizing it is absolutely trivial.

Now let's explore some basic usage. To generate an app, use the new command:

$ catapult new myapp

  create  myapp
  create  myapp/assets/javascripts/app.js
  create  myapp/assets/stylesheets/app.css
  create  myapp/browser.json
  create  myapp/public/index.htm

$ cd myapp

Now you can start a catapult server:

$ catapult server

And open up the app in your browser. During deployment, you'll want to serve the files statically. You can write compiled files to disk using the build command.

$ catapult build

You can even watch the files for changes, and then automatically build:

$ catapult watch

As I say, the source is incredibly simple. In the spirit of @fat's talk on documentation, I invite you to dive in.