Project Goals •Common foundation for Clojure tooling •Trivial to embed •Zero runtime dependencies •Extremely simple wire format •Easy to extend with additional functionality
Migration Strategy • Teach most extensions about both versions of nREPL • Migrate tools like Lein and Boot to the new nREPL • Provide ways for users of older Boot/Lein to run the new nREPL • Drop support for tools.nrepl from the extensions • Document nREPL extensively in the process • Focus on actual nREPL improvements
•Simpler code evaluation model •Robust handling of Clojure’s special variables •Massively improved value printing logic •Better way to hook into evaluation errors •Global/project server configuration via configuration files •Reusable command-line API
•bundled with Clojure & ClojureScript •streaming REPL •a socket based version of the default REPL •easy if you want to evaluate something in a remote app •can be started with a JVM property •hard to build tools on it
Language Server Protocol • Language agnostic • Doesn’t rely on a running REPL • A much broader protocol (completions, code lookup, etc) • Usually is implemented in terms of static analysis • Message oriented, JSON data format • Extensible protocol • Controlled by an evil corporation turned good
• designed to power programmings tools • message oriented • can be extended with arbitrary operations • interruptible evals • session multiplexing • supports arbitrary communication protocol/data format • async in nature
nREPL implementations •HyREPL - an nREPL for the Hy programming language •JeeJah - an nREPL server for Fennel and Lua •Ogion - an nREPL server for Racket •Chicken NREPL - an nREPL server for Chicken Scheme •cl-nrepl - an nREPL server for Common Lisp •cljs-noderepl - an nREPL server for ClojureScript running on Node.js •R-nREPL - an nREPL server for R •nREPL CLR - an nREPL server for ClojureCLR •Arcadia nREPL - an nREPL server implemented in C# for Arcadia.
Dreams for the future • nREPL implemented in ClojureScript/ClojureCLR • nREPL for Erlang/Elixir • nREPL for Smalltalk • Better behaved nREPL clients (ones that don’t make assumptions they are dealing with a Clojure server)
Roadmap for nREPL 0.7 •EDN Transport (done) •Client-side resource/class injection API (unrepl) •Upgrade socket REPL to nREPL (unrepl) •Rich data printer (unrepl)