- #217: Add keyword completion support.
- #226: Add doc and arglists to completion responses.
- #238: Expand completion and lookup error message when ns not found.
- #217: Add server support
for UNIX domain (filesystem) sockets via
-s/--socket PATH on the
command line or
(start-server ... :socket PATH) whenever the JDK
is version 16 or newer or
available as a dependency.
- #243: Keep the sideloader state in the session so it persists across middleware changes. Sanitize the input in
- #227: Fix completion for static class members.
- #231: Fix sanitize error when file is
- #208: Fix namespace resolution in the cmdline REPL.
- #248: Create fewer new classloaders.
- #258: Make compatible with graalvm native image.
- #213: Fix sideloader race condition.
- #211: Fix a couple of lookup op errors.
- #206: Fix classloader-related breakage with
cider-nrepl and Java 8.
- Bundle a couple of print functions compatible with the print middleware (see
- #174: Provide a built-in
- #143: Added a middleware that allows dynamic loading/unloading of middleware while the server is running.
- #180: Provide a built-in
- #125: The built-in client supports
- #126: The built-in client exits with an error message when the tty transport is selected. It used to fail silently. This was never supported.
- #113: Fix an issue with hotloading using Pomegranate in Leiningen.
- #17: It was possible for the bencode transport to write partial messages if a middleware tries to write something unencodable. This could cause the client or server to hang.
- #60: Implemented EDN transport.
- #140: Added initial version of spec for message responses. These are used during Clojure 1.10 tests.
- #97: Added a sideloader, a network classloader that allows dependencies to be added even when the source/class files are not available on the server JVM's classpath (e.g. supplied by the client).
- #152: Kill session threads when closing sessions.
- #132: Avoid malformed bencode messages during interrupts, mainly affecting streamed printing.
- #137: Expanded Bencode writer to work with
maps that have keywords or symbols as keys. This allowed a simplification of the
Bencode transport itself.
- #158: Interrupt now runs in three stages: calls
interrupt on the thread, waits 100ms for the thread to respond and return messages, then waits 5000ms for the thread to terminate itself. A hard
.stop is only called if it fails to do so.
- #178: Allow
:read-cond option when evaluating code.
- #167: Allow suppressing ack message when using
- #117: Replace
- New dynamic vars in
nrepl.middleware.print for configuring the print
middleware at the REPL.
- The new middleware provides behaviour that is backwards-compatible with the
old one. Existing middleware descriptors whose
:requires set contains
#'pr-values should instead use
- #128: New middleware,
nrepl.middleware.caught, provides a hook called when eval, read, or print
throws an exception or error. Defaults to
Configurable by the dynamic var
- [CLI] Make sure ack port parameter is converted to integer for command line nREPL initialization.
- [CLI] When starting the REPL, make sure the transport option is used correctly.
- [CLI] Make sure calling
cmdline ns works with the correct transport.
- #8: Clean up context classloader after eval.
- #16: Use a single session thread per evaluation.
- #107: Stop reading and evaluating code on first read error.
- #108: Refactor cmdline functions into a public, reusable API.
- Restore the
- Make sure we never send a nil transport to via
- [CLI] #90: Doesn't display properly URLs if using a 3rd-party transport.
- #89: Remove
- #12: Support custom printing
pr-values, enabling pretty-printed REPL results.
- #66: Add support for a global and local configuration file.
- [CLI] #63: Make it possible to specify the transport via the command-line client (
- #10: Bind
*e in cloned session.
- #33: Add ability to change value of
- #68: Avoid illegal access warning on JDK 9+ caused by
- [CLI] #77: Exit cleanly after pressing
ctrl-d in an interactive REPL.
- #13: Catch ThreadDeath exception thrown by interrupt.
- #56: Bind the server by default to
127.0.0.1 instead of to
:: (this turned out to be a security risk).
- #76: Move version-related logic to a dedicated namespace (
- [CLI] #81: Handle interrupt in interactive session.
- [CLI] The built-in the CLI generates an
.nrepl-port file on server startup.
- [CLI] #39: Add a
--connect command-line option allowing you to connect.
with the built-in client to an already running nREPL server.
- [CLI] Add shorthand names for most command-line options.
- [CLI] Add a
-v/--version command-line option.
- #38: Remove extra newline in REPL output.
- [CLI] Added
--help command-line option.
- [CLI] Added
--bind command-line option.
- [CLI] Added
--middleware command-line options. Extremely useful when starting nREPL using
tools.deps, as this allows you to inject middleware trivially without the need for
- [CLI] Add missing newline after colorized values displayed in the REPL.
- [CLI] Display connection info when starting the built-in cmd client. This makes it possible
for clients like CIDER to parse it and auto-connect to the server. Pretty handy if you're
clj to start your server.
- #16: Don't change the
thread used for form evaluation over time. See
#36 for a discussion of
the fix. (partial fix)
- The result of
nrepl.server/start-server no longer contains the
:ss from the days of nREPL 0.0.x. If someone was using it
they should switch to
- #28: Echo back missing
ns during eval (previously you'd only get an error that a ns is missing,
but no mention of the name of that namespace).
- #35: Add constant DCL
across evaluations (which means you can now easily hot-load
- #34: Treat
nil port as 0
(which assigns a random port).
- #11: Don't read the version string
from a resource file (
- #4: Change the project's
clojure.tools.nrepl is now
the rest of the namespaces were renamed following the pattern
- #15 Fix for
:no-code error, the correct response of
:status :done is now
- #26: Recompile the Java classes
for Java 8.
- #1: Materially identical
[org.clojure/tools.nrepl "0.2.13"], but released under
nrepl/nrepl coordinates as part of the migration out of
clojure.tools/logging is now a normal dependency (it used to be an
- #20: If
start-server is not provided with a
:bind hostname, nREPL will default
to binding to the ipv6
:: (as before), but will now always fall back to
localhost. Previously, the ipv4 hostname was only used if
:: could not be
resolved; this change ensures that the
localhost fallback is used in
networking environments where
:: is resolved successfully, but cannot be
start-server now binds to
:: by default, and falls back to
avoiding confusion when working in environments that have both IPv4 and IPv6
networking available. (NREPL-83)
clojure.tools.nrepl.middleware.interruptible-eval now accepts optional
column values in order to fix location metadata to
defined vars and functions, for more useful stack traces, navigation, etc.
- REPL evaluations now support use of reader conditionals (loading
containing reader conditionals has always worked transparently)
clojure.tools.nrepl.middleware.pr-values will not print the contents of
:value response messages if the message contains a
clojure.tools.nrepl.middleware.interruptible-eval are now public.
clojure.tools.nrepl.middleware.interruptible-eval now defines a default
thread executor used for all evaluations (unless a different executor is
provided to the configuration of
should aid in the development of
interrupt-capable alternative evaluation
- The default bind address used by
0.0.0.0. As always, the bind address can be set
explicitly via a
:bind keyword argument to that function. This is considered
a security bugfix, though technically it may cause breakage if anyone was
implicitly relying upon nREPL's socket server to listen on all network
ServerSocket created as part of
clojure.tools.nrepl.server/start-server is now configured with
SO_REUSEADDR enabled; this should prevent spurious "address already in use"
when quickly bouncing apps that open an nREPL server on a fixed port, etc.
- Middlewares may now contribute to the response of the
via an optional
:describe-fn function provided via their descriptors.
:ns component of the response to
"load-file" operations is now elided,
as it was (usually) incorrect (as a result of reusing
load-file operations) (NREPL-68)
- The topological sort ("linearization") applied to middleware provided to start
a new nREPL server has been reworked to address certain edge case bugs
interruptible-eval no longer incorrectly clobbers a session's
when it processes an
eval message containing an
- Eliminated miscellaneous reflection warnings
- Clients can now signal EOF on
*in* with an empty
:stdin value (NREPL-65)
:version-string is now included in response to a
- Improve representation of
java.version information in response to a
describe operation (NREPL-62)
- Fixed the source of a reliable per-connection thread leak (NREPL-40)
- Fix printing of lazy sequences so that
*out* bindings are properly preserved
clojure.tools.nrepl.middleware.interruptible-eval/evaluate so that a
eval function can be provided on a per-message basis (NREPL-50)
- Fix pretty-printing of reference returned by
- nREPL now works with JDK 1.8 (NREPL-56)
- The value of the
java.version system property is now included in the response
describe operation (NREPL-57)
- Common session bindings (e.g.
*1, etc) are now set in time for nREPL
middleware to access them in the case of an exception being thrown (NREPL-58)
- Now using a queue to maintain
*in*, to avoid intermittent failures due to
prior use of
- When loading a file, always bind
clojure.lang.Compiler/load expression (NREPL-41)
pr-str'ing expressions (presumably
for later evaluation)
- session IDs are now properly combined into a set by
- fixes printing of server instances under Clojure 1.3.0+ (nREPL-37)
- fixes incorrect translation between
StringBuilder.append() APIs (NREPL-38)
Never released; initial prototype of "rich content" support that (in part)
helped motivate a re-examination of the underlying protocol and design.
- added Clojure 1.3.0 (ALPHA) compatibility
- fixed (hacked) obtaining
clojure.test output when
initially loaded within an nREPL session
- eliminated 1-minute default timeout on expression evaluation
- all standard REPL var bindings are now properly established and maintained
within a session
Can you improve this documentation? These fine people already did:
Bozhidar Batsov, Chas Emerick, Shen Tian, Michael Griffiths, Eero Helenius, Tijs Mallaerts, tijsmallaerts, Arne Brasseur, pfeodrippe, Artem Solomatin, Paulo Rafael Feodrippe, Finn Völkel, Mike Martin, Rob Browning, Eric Dallo, Colin Fleming, Александар Симић, Greg Look, Alexander Yakushev, Chris Zheng & JayEdit on GitHub