From a two-year sabbatical and a stubborn idea to powering the engineering stack of one of the world’s largest fintech companies — this is the story of Clojure.
Featuring Rich Hickey, Alex Miller, Stuart Halloway, and many more, this full-length documentary traces Clojure’s unconventional origins, its values-driven community, and the language’s quiet but profound impact on how we think about software.
Documentary made possible with the support of Nubank!
Out of the Tarpit — Ben Moseley & Peter Marks (2006). Identifies mutable state as the primary source of accidental complexity in software.
Ideal Hash Trees — Phil Bagwell. Research on Hash Array Mapped Tries (HAMTs), the direct inspiration for Clojure’s persistent data structures.
Composable Memory Transactions — Tim Harris, Simon Marlow, Simon Peyton-Jones & Maurice Herlihy (2005). Software Transactional Memory; a key influence behind Clojure’s STM concurrency model.
Paper Bibliography - a full list of papers used by Rich while developing Clojure, compiled by Michael Fogus
On Lisp — Paul Graham. Widely referenced book on advanced Lisp techniques. Free online.
Programming Clojure (4th ed.) — Alex Miller, Stuart Halloway & Aaron Bedra. The first edition by Stuart Halloway launched alongside Clojure 1.0.
The Joy of Clojure — Michael Fogus & Chris Houser.
Simple Made Easy (2011) — Rich’s famous talk from Strange Loop 2011. Defines the distinction between "simple" and "easy."
Clojure at LispNYC (2007) - the first public talk about Clojure.
Sierra’s Blog on LispNYC Presentation — 2007. An early public introduction to Clojure.
Are We There Yet? (2009) - The Clojure state model and a dissection of time in programming.
Hammock Driven Development (2010) — On thinking deeply about problems before writing code.
Strange Loop Language Panel (2011) - A fun panel of language designers including Rich Hickey and Gerald Sussman.
The Value of Values (2012) — The case for immutable values over mutable objects.
Writing Datomic in Clojure (2012) - An overview of Datomic and how Clojure was the perfect language to write it in.
Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojure (2013) - a long-form interview with Rich about Clojure.
Effective Programs - 10 Years of Clojure (2017) - Rich reflects on the first 10 years of Clojure and the prioritization of Clojure’s features for solving real-world problems.
Talk Transcripts — Community-maintained transcripts of Clojure talks by Rich Hickey and others.
Rich Hickey Talks - A video playlist of many of Rich’s talks.
Cognitect Blog — The consultancy that stewarded Clojure for many years.
Nubank — World’s largest independent digital bank, running core infrastructure on Clojure and Datomic. Acquired Cognitect in 2020 and currently stewards Clojure’s development.
Datomic — Distributed database built on immutable facts, designed by Rich Hickey and Cognitect.
Java.next Blog Series — Stuart Halloway’s 2008 series on emerging JVM languages.
Clojure IRC Log Archive — Preserved archive of the original Clojure IRC channel.
Clojure Etiquette - derived from Rich’s original post to the mailing list.
Clojure — Runs on the JVM. Follow the official getting started guide or pick up Brave Clojure for a free, beginner-friendly introduction.
ClojureScript — Compiles to JavaScript. Powers frontend development with libraries like Reagent and Re-frame.
ClojureCLR — Clojure on the .NET CLR.
Babashka — Fast scripting without JVM startup time.
Jank — Targets LLVM for native compilation.
ClojureDart — Flutter mobile apps.
libpython-clj — Call Python libraries (NumPy, pandas, scikit-learn) directly from Clojure.
Noj — Clojure-native data science toolkit from SciCloj, combining dataframes, visualization, and machine learning.
Tablecloth — Combine Python interop with Clojure’s dataframe library.
ECA - Editor Code Assistant
Backseat Driver - Clojure Tools for Copilot
ClojureMCP — MCP server connecting AI assistants (Claude, Codex, Gemini) to your Clojure REPL with structure-aware editing.
MCP-nREPL — Minimal Babashka MCP server giving coding agents direct nREPL access.
clojure-mcp-light — Lightweight CLI tools for delimiter repair and REPL eval with any LLM coding assistant.
#ai-assisted-coding on Clojurians Slack — Active community channel for AI + Clojure development.
Full experience — Follow the official getting started guide with step-by-step installation videos for macOS, Linux, Windows WSL, and Windows. The videos use Calva in VS Code.
Quickest path — Install Babashka and start scripting immediately. No JVM setup needed.
Web / frontend — Try ClojureScript with Shadow CLJS.
Mobile apps — Try ClojureDart for Flutter.
Already a Python user — Use libpython-clj to call your favorite Python libraries directly from Clojure.
Editor — Calva provides Clojure development in VS Code with interactive REPL, structural editing, and AI integration via Backseat Driver. See the editors guide for more options.
Watched the documentary and want to dig in? Here are a few terms you’ll encounter.
| Term | Definition |
|---|---|
Lisp |
A family of programming languages that represent code as nested lists enclosed in parentheses. Clojure is a Lisp dialect. |
REPL |
Read-Eval-Print Loop. An interactive session that reads an expression, evaluates it, prints the result, and repeats. Clojure developers use the REPL to build and test programs while they run. |
Functional programming |
A programming style built around functions that take values and return values, minimizing mutable state and side effects. |
Value |
A piece of data that does not change after creation: a number, a string, or a persistent collection. Clojure defaults to values; you opt in to mutable state explicitly when you need it. |
Persistent data structure |
A collection that preserves its previous version when you modify it. Adding an element returns a new collection; the original remains unchanged. "Persistent" here means version-preserving, not stored to disk. |
Accidental complexity |
Difficulty in software caused by your tools and design choices, not by the problem itself. Contrasted with essential (or incidental) complexity, which is inherent to the problem domain. |
STM |
Software Transactional Memory. A concurrency model that coordinates shared-state changes through transactions instead of locks. |
Hosted language |
A language designed to run on an existing platform rather than its own runtime. Clojure runs on the JVM, ClojureScript compiles to JavaScript, and ClojureCLR targets the .NET CLR. |