- #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 junixsocket is 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
clojure.main/repl-caught. 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 function in
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 something like
- [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 using
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 legacy key
: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 dependencies).
- #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 namespaces. (breaking)
clojure.tools.nrepl is now
nrepl.core, the rest of the namespaces were renamed following the pattern
- #15 Fix for
:unknown-session error and
:no-code error, the correct response of
:status :done is now being returned.
- #26: Recompile the Java classes for Java 8.
- #1: Materially identical to
[org.clojure/tools.nrepl "0.2.13"], but released under
nrepl/nrepl coordinates as part of the migration out of clojure-contrib https://github.com/nrepl/nrepl
clojure.tools/logging is now a normal dependency (it used to be an optional dependency).
- #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 bound.
start-server now binds to
:: by default, and falls back to
localhost, 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
.cljc files 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
clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval). This should aid in the development of
interrupt-capable alternative evaluation middlewares/handlers.
- The default bind address used by
clojure.tools.nrepl.server/start-server is now
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 interfaces.
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. (NREPL-67)
- Middlewares may now contribute to the response of the
"describe" operation via an optional
:describe-fn function provided via their descriptors. (NREPL-64)
:ns component of the response to
"load-file" operations is now elided, as it was (usually) incorrect (as a result of reusing
interruptible-eval for handling
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 (NREPL-53)
interruptible-eval no longer incorrectly clobbers a session's
*ns* binding 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
describe operation (NREPL-63)
- 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 (NREPL-45)
clojure.tools.nrepl.middleware.interruptible-eval/evaluate so that a custom
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 to a
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
*print-length* when generating the
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
clojure.test is 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