ClojureScript is a dialect of the Lisp and a general-purpose language with an emphasis on functional programming, that runs on JavaScript.
Thread macros

(defn transform* [person]
   (-> person
      (assoc :hair-color :gray)
      (update :age inc)))

(defn calculate* []
   (->> (range 10)
        (filter odd? ,,,)
        (map #(* % %) ,,,)
        (reduce + ,,,)))

(as-> [:foo :bar] v
  (map name v)
  (first v)
  (.substring v 1))
ClojureScript is a modern, functional & immutable data-oriented language with a great standard library that compiles down to self-contained & compact JavaScript bundles. Based on Clojure, it brings Lisp’s elegance and meta-programming to the JavaScript ecosystem.(By @orestis)
Get an online REPL
If you want a REPL running on your machine, try Lumo or Planck.
ClojureScript shares same syntax with Clojure but with different host APIs and environments. To Learn it:

How to compile/build ClojureScript projects?

By following official Quick Start you can compile your project with cljs.main. It's the core library of compiling the language.
However in real projects you will very likely to need hot code swapping and npm integrations. This site is built with shadow-cljs along npm modules. Besides shadow-cljs, there are several tools you can choose:
ClojureScript compilation made easy.
Figwheel Main builds your ClojureScript code and hot loads it as you are coding!
You may also try boot-cljs or lein-cljsbuild if you are using those build tools.


There are several libraries in ClojureScript that light up the community. They are famous:
  • Reagent - Reagent: Minimalistic React for ClojureScript
  • Rum - Simple, decomplected, isomorphic HTML UI library for Clojure and ClojureScript
  • om - A powerful interface to React, makes use of its object oriented structures.
  • cljs-devtools - Better presentation of ClojureScript values in Chrome Devtools.
  • Datascript - An immutable in-memory database and Datalog query engine in ClojureScript.
  • re-frame - A Reagent Framework For Writing SPAs, in Clojurescript.
  • core.async - Facilities for async programming and communication in Clojure.
  • sente - Realtime web comms for Clojure/Script.
  • ClojureScript and Clojure

    ClojureScript and Clojure share the same syntax but distinguish by .cljs extension name. The most different part is the difference in host platforms, like JavaScript is known as single-threaded and restricted by browser APIs.
    Libraries of both sides release code on Clojars in jar files.

    ClojureScript and npm

    With JavaScript InterOp, you may call some JavaScript code from in Clojure syntax. ClojureScript is designed to use features from host platform. You are free to import npm modules in ClojureScript, most of them will work correctly, especially in shadow-cljs and Lumo.

    Immutable Data Structure

    Clojure is a functional programming language. It provides the tools to avoid mutable state, provides functions as first-class objects, and emphasizes recursive iteration instead of side-effect based looping. Meanwhile immutable data structure happens to be a great tool React needs in reducing redundant virtual DOM renderings.


    Join us on:
    Also cool if you use Twitter.
    Site built with shadow-cljs & Respo.