- 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, Tijs Mallaerts, tijsmallaerts, pfeodrippe, Paulo Rafael Feodrippe, Finn Völkel, Colin Fleming, Александар Симић, Greg Look, Alexander Yakushev, Chris Zheng & JayEdit on GitHub