FAQ
What’s the difference between contrib’s nREPL and this one?
See our history. Very simply put - this project is the continuation of the contrib project. There were several major changes that happened during the migration:
-
The artifact id changed from
org.clojure/clojure.tools.nrepltonrepl/nrepl. -
The namespace prefix changed from
clojure.tools.nrepltonrepl. -
The namespace
clojure.tools.nreplwas renamed tonrepl.core. -
Minimal requirements changed from Java 6 and Clojure 1.2 to Java 8 and Clojure 1.7 (currently Java 8 and Clojure 1.9).
-
All the code which existed for compatibility with nREPL 0.0.x was removed.
What’s the plural form of "middleware"?
The plural form of "middleware" is "middleware", not "middlewares".[1] While there’s some debate on whether its okay to write something like "a collection of middlewares", we’ve opted to stick to using "middleware" everywhere in both the codebase and the documentation.
Does nREPL support ClojureScript?
Yes, it does, although you’ll need additional middleware to enable the ClojureScript support (e.g. piggieback or shadow-cljs).
Does nREPL support ClojureCLR?
There is a separate implementation of nREPL for ClojureCLR: https://github.com/clojure/clr.tools.nrepl.
What’s the difference between the bencode and EDN transports?
Bencode is the default wire format and the only one guaranteed to be supported by all nREPL servers and middleware. It’s simple and language-agnostic, but limited to strings and integers — keywords, sets, and other Clojure types are coerced to strings in transit.
The EDN transport preserves richer Clojure types (keywords, sets, symbols, etc.) and is a good choice for clients that only target Clojure servers. See Transports for details.
How do I configure the nREPL server?
nREPL reads configuration from two EDN files: a global ~/.nrepl/nrepl.edn
and a project-local .nrepl.edn. You can set the bind address, port,
transport, middleware, and more. Command-line flags override config file values.
See Server Configuration for the
full details.
Can I use nREPL with Unix domain sockets?
Yes, since nREPL 1.2 (requires JDK 16+). Pass a filesystem path instead of a port when starting the server:
$ clj -M:nrepl -m nrepl.cmdline --socket path/to/socket
See Server for more on this.
Why doesn’t interrupt stop my evaluation?
On Java 21+, Thread.stop() has been disabled by the JDK. nREPL ships a native
JVMTI agent to restore this capability, but it requires the JVM flag
-Djdk.attach.allowAttachSelf at startup. See
Enable libnrepl JVMTI agent for setup
instructions.
When was nREPL 1.0 released?
nREPL 1.0 was released on August 24, 2022. This completes the promise we made way back in 2018 to address most languishing problems and get nREPL in a great shape.
Future releases will focus on polishing the nREPL protocol and potentially adding some new features.
Are there any interesting nREPL extensions worth checking out?
Sure! See Extensions for details.
Where can I get help regarding nREPL?
See the Support section of the manual.
What should I do if I run into some issues with nREPL?
Don’t panic! Next step - visit the Troubleshooting section of the manual.
How can I help the project?
There are many ways in which you can help nREPL:
-
Donate funds
-
Work on improving the documentation
-
Solve open issues
-
File bug reports and suggestions for improvements
-
Promote nREPL via blog posts or at meetups and conferences
-
Invite members of the nREPL team to speak about nREPL at meetups and conferences