A retrospective on the nREPL vs. socket REPL/prepl debate in the Clojure ecosystem. When socket REPL landed in Clojure 1.8 (2016) and prepl in 1.10 (2018), many predicted nREPL would be replaced by these simpler, built-in alternatives. Eight years later, the opposite happened: every editor project that tried prepl either reinvented nREPL's features (request IDs, ops, multiplexing, interrupts) or switched back to nREPL outright. Tutkain, Chlorine/Lazuli, and Conjure all converged on nREPL. The author argues that while prepl is a purer REPL semantically, editor tooling requires correlation, multiplexing, server-side hooks, and protocol stability — exactly what nREPL was designed for. nREPL is now healthier than ever, supported across CIDER, Calva, Cursive, Conjure, Babashka, and even non-JVM Clojure dialects.

8m read timeFrom batsov.com
Post cover image
Table of contents
What the “hopeful” era looked likeWhat actually happened“Real” REPL vs. tool-friendly REPLTaking stock, eight years laterWhat I take from this
299 Impressions