A short series of tutorials on ClojureScript
Clone or download
Pull request Compare This branch is 25 commits ahead, 1337 commits behind magomimmo:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


modern-cljs 日本語訳プロジェクト


Tutorial 1 - 基本的なこと

最初のチュートリアルでは、基本的なClojureScriptのプロジェクトを作り、 設定するところから始める。

Tutorial 2 - ブラウザでClojureScript!! (bREPL)

このチュートリアルでは、ClojureScriptのREPLを、外部http-serverを立ち上げることで ブラウザと接続する方法を学ぶ。

Tutorial 3 - Clojureベースなhttp-server


Tutorial 4 - モダンなClojureScript

このチュートリアルでは、Larry Ullmanが書いたModern JavaScript: Development and design ログインフォームを、JavaScriptからClojureScriptに書き換えるということで、 ClojureScriptによるフォームバリテーションを楽しんでみよう。

Tutorial 5 - Domina入門

このチュートリアルでは、domina libraryを使って、もっとClojureっぽい ログインフォームのバリテーションを実現してみよう。

Tutorial 6 - 安易なことは複雑になるし、シンプルなことは簡単になる



A series of tutorials to guide you in creating and setting up ClojureScript (CLJS) projects.

If you ask yourself why the series has been named modern-cljs even if the ClojureScript language is only a couple of years old, you're right. It just happens that I started this series while trying to port on ClojureScript few examples from the Modern JavaScript: Develop and Design book. Its correct title should have been current-cljs. Now it's too late to change it.

Required background

This series requires some programming experience. I assume you already made your hands dirty with Clojure programming language, but you need not to be proficient with it or even with the underlying Java and JavaScript programming languages.

If you don't know anything about Clojure (or Lisp), I strongly recommend to study it before to start reading this series.

Even if the net is plenty of outstanding resources on Clojure programming language, you can't understimate the benefit of reading few books on Clojure and on other Lisp dialects:

  • SICP - Structure and Interpretation of Computer Programs: this is still the best book I have ever read about Computer Programming in my very long carrier, even if it uses the Scheme programming language (a Lisp dialect);
  • On Lisp: if you want to make your hands dirty with macros, this is the place to start from even if it uses CommonLisp (a well known Lisp dialect);
  • Clojure Programming: written by three of the most heroics clojureans, it contains everything you need to know about Clojure and its ecosystem;
  • Programming Clojure: written by another legendary clojurean, it represents the easiest path to approach Clojure;
  • The Joy of Clojure: the title speaks by itself. A must read
  • ClojureScript Up and Running: at the moment, it's the only available book on ClojureScript. Due to the youth of the ClojureScript language, the book is now a little bit outdated. It's so brief that you can read it in a very short time with some profit, specially if you want to integrate external JavaScript libraries in your code.
  • The Annotated Clojure Reference Manual by Rich Hickey: The most missed book on Clojure :).


More people asked me which operating system and editor/IDE are most appropriated for developing Clojure/ClojureScript code. I personally use Mac OS X and Ubuntu. On top of those I use Emacs with the standard stuff to be productive with Clojure programming. Because I'm aged, *nix and Emacs are the OS/Editor I know better. That said, in this series you're not going to find any suggestion about any OS or IDE/Editor. Use whatever tool fits better your habits. I have too much respect for people developing IDE/plugins for Clojure/ClojureScript to say that one is better than another.


This series of tutorials will guide you in creating, setting up and running simple CLJS projects. The series follows a progressive enhancement of the project itself.

NOTE 1: I suggest to code yourself the content of the series. In my experience it is always the best choice if you are not already fluent with the programming language you have under your fingers.

That said, assuming you already have installed leiningen 2, to run the latest available tutorial without coding:

  1. git clone https://github.com/magomimmo/modern-cljs.git
  2. cd modern-cljs
  3. lein cljx once # used from tutorial-16 forward
  4. lein ring server-headless
  5. open a new terminal and cd in the modern-cljs main directory
  6. lein cljsbuild once
  7. lein trampoline cljsbuild repl-listen
  8. visit login-dbg.html and/or shopping-dbg.html
  9. play with the repl connected to the browser

NOTE 2: If you want to access the code of any single tutorial because you don't want to copy&paste it or you don't want to write it yourself, do as follows:

  • git clone https://github.com/magomimmo/modern-cljs.git
  • cd modern-cljs
  • git checkout tutorial-01 # for tutorial 1, tutorial-02 for tutorial 2 etc

Tutorial 7 - On being doubly aggressive

In this tutorial we're going to explore CLJS/CLS compilation modes by using the usual lein-cljsbuild plugin of leiningen, but we'll discover a trouble we'll solve by using a new feature of the 0.3.0 of lein-cljsbuild plugin.

Tutorial 8 - Introducing Domina events

In this Tutorial we're going to introduce domina events which, by wrapping Google Closure Library event management, allows to follow a more clojure-ish approach in handing DOM events.

Tutorial 9 - DOM Manipulation

In this tutorial we're going to face the need to programmatically manipulate DOM elements as a result of the occurrence of some DOM events.

Tutorial 10 - Introducing Ajax

In this tutorial we're going to extend our comprehension of CLJS by introducing Ajax to let the CLJS client-side code to communicate with the CLJ server-side code.

Tutorial 11 - A deeper understanding of Domina events

In this tutorial we're going to enrich our understanding of Domina events by applying them to the login form example we introduced in the 4th Tutorial.

Tutorial 12 - The highest and the deepest layers

In this tutorial we're going to cover the highest and the deepest layers of the Login Form example we started to cover in the previous tutorial.

Tutorial 13 - Don't Repeat Yourself while crossing the border

One of our long term objectives is to eliminate any code duplication from our web applications. That's like to say we want firmly stay as compliant as possible with the Don't Repeat Yourself (DRY) principle. In this tutorial we're going to respect the DRY principle by sharing validators between the client (i.e. CLJS) and the server (i.e. CLJ).

Tutorial 14 - It's better to be safe than sorry (Part 1)

In this tutorial we are going to prepare the stage for affording the unit testing topic. We'll also introduce the Enlive template sytem to implement a server-side only version of the Shopping Calculator aimed at adhering to the progressive enanchement implementation strategy. We'll even see how to exercize code refactoring to satisfy the DRY principle and to solve a cyclic namespaces dependency problem.

Tutorial 15 - It's better to be safe than sorry (Part 2)

In this tutorial, after having added the validators for the shoppingForm, we're going to introduce unit testing.

Tutorial 16 - It's better to be safe than sorry (Part 3)

In this tutorial we make unit testing portable from CLJ to CLJS (and vice-versa) by using the clojurescript.test lib and the cljx lein plugin.

Tuturial 17 - Enlive by REPLing

To be respectful with the progressive enhancement strategy, in this tutorial we're going to integrate the form validators for the server-side Shopping Calculator into the corresponding WUI (Web User Interface) in such a way that the user will be notified with the right error messages when the she/he types in invalid values in the form.

Tutorial 18 - Housekeeping

In this tutorial we're going to digress about two topics. The setup of a more comfortable browser REPL based on nREPL. The setup of a more comfortable project structure by using the profiles features of Leiningen


Copyright © Mimmo Cosenza, 2012-2013. Released under the Eclipse Public License, the same as Clojure.