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
ClojureScript shares same syntax with Clojure but with different host APIs and environments. To Learn it:


Compiling and hot-swapping ClojureScript programs require tools. Pick one of those as you need:
ClojureScript compilation made easy.
Fast, cross-platform, standalone ClojureScript environment.
Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding!
clj --main cljs.main --compile hello-world.core --repl
You may also try Planck, boot-cljs or lein-cljsbuild based on your needs.


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.