Get Started with ClojureScript with Leiningen Templates
When I was about to get started with ClojureScript, I was discouraged by the fact that I apparently had to figure out so much before getting a trivial project up and running.
Eventually I learned, built and showed a minimal application running with just Leiningen and Ring, and a little bit of jQuery in ClojureScript.
Some time later Kyle Cordes showed me cljs-template. It’s a Leiningen template created by Chris Granger, also known as the guy behind Noir and Light Table. That was quite fun. All you need to get a project up and running is:
lein new cljs-template my-project cd my-project lein run
That’s it, you’re now running a Noir application with ClojureScript in client (jQuery included). You can start hacking at the CLJS source and see changes in browser immediately.
I soon discovered that it was a few months old, using Clojure 1.3, dated build of ClojureScript and pretty much everything. Eventually (thanks to Kyle and Raynes) I got push access to the project and updated everything, so it should be in even better shape now.
I am not sure where cljs-template is going though, with Noir itself going away. I also found one bit missing: That template is awesome to get up and running and show off a demo, but you would still need to do some manual plumbing to make such a project work for a real application (with leiningen hooks on compilation etc.).
That’s why I created another template: cljs-kickoff. Like my first steps, it’s really minimal: just Ring, lein-cljsbuild and ClojureScript. Fewer files, fewer dependencies, very easy to grasp.
To kick it off, just run:
lein new cljs-kickoff my-project cd my-project lein run
It will compile the ClojureScript file included in the project and start Ring server with it.
In another shell, you can run:
lein cljsbuild auto
This will start lein-cljsbuild in the auto-compile mode. Whenever the CLJS source changes, it will be automatically recompiled and the running application will pick it up after reload.
Compared to cljs-template, this template is much smaller and only
uses very basic, popular and mature pieces (just Ring and CLJS). It also
has all the “real” Leiningen hooks in place: CLJS compilation is
included in lein run, lein jar and lein uberjar.
I hope it all makes someone’s life easier by making the first step on CLJS path as easy as possible. Happy hacking!
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





