Clojure

Documentary

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!

Clojure: The Documentary

Show Notes

Foundational Research Papers

  • 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

Influential Books

  • 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.

Talks by Rich Hickey

Important Companies and Projects

  • 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.

Community & Archival Resources

Clojure Dialects & Runtimes

Core

Beyond the Core

Data Science

  • 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.

Clojure & AI

  • 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.

Getting Started

  1. 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.

  2. Quickest path — Install Babashka and start scripting immediately. No JVM setup needed.

  3. Web / frontend — Try ClojureScript with Shadow CLJS.

  4. Mobile apps — Try ClojureDart for Flutter.

  5. Already a Python user — Use libpython-clj to call your favorite Python libraries directly from Clojure.

  6. EditorCalva provides Clojure development in VS Code with interactive REPL, structural editing, and AI integration via Backseat Driver. See the editors guide for more options.

Glossary

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.

Follow Clojure

Join us at the Clojure/Conj Conference 2026 — September 30 – October 2, Charlotte, NC · LinkedIn