| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| CIDER 1.22 (_Sao Miguel_) source code.tar.gz | 2026-06-16 | 8.9 MB | |
| CIDER 1.22 (_Sao Miguel_) source code.zip | 2026-06-16 | 9.0 MB | |
| README.md | 2026-06-16 | 18.2 kB | |
| Totals: 3 Items | 17.9 MB | 0 | |
New features
- #3645: Show a spinner in the mode line while tests are running.
- #3865: Add default session feature to bypass sesman's project-based dispatch (
cider-set-default-session,cider-clear-default-session). - #3930: Inspector: add help message with keybindings.
- #3884: Introduce
cider-jack-in-toolsandcider-register-jack-in-toolso third-party packages can register new project tools forcider-jack-inandcider-jack-in-universal. - #3888: Cache the result of
cider--running-nrepl-paths(used bycider-locate-running-nrepl-ports) forcider-running-nrepl-paths-cache-ttlseconds (default 5). Repeatedcider-connectcompletions no longer re-spawn a fresh round ofps/lsofsubprocesses each time.cider-clear-running-nrepl-paths-cachediscards the cache on demand. - #3890: New
nrepl-make-eval-handlerwith a keyword-arg API: - Keyword slots:
:on-value,:on-stdout,:on-stderr,:on-done,:on-eval-error,:on-content-type,:on-truncated. - Sub-handlers no longer take a buffer argument; they close over whatever they need.
nrepl-make-response-handler, the legacy 7-positional-arg form, is preserved as an obsolete shim that adapts the old(buffer x)lambdas to the new(x)lambdas, so existing extensions keep working.- #3929: Keyword-argument forms for several low-level request APIs, so callers no longer pad arguments with
nilto reach a later one. In every case the legacy positional function is kept as a thin shim that delegates to the new one, so existing callers (including third-party packages) keep working unchanged: - Eval requests:
nrepl-send-eval-request(shim:nrepl-request:eval) andcider-nrepl-send-eval-request(shim:cider-nrepl-request:eval), with:ns,:line,:column,:additional-params, plus:toolingat the nREPL level and:connectionat the CIDER level. - Sync requests:
nrepl-sync-request(shim:nrepl-send-sync-request) andcider-nrepl-sync-request(shim:cider-nrepl-send-sync-request), with:abort-on-input,:tooling/:connection, and:callback. - Op helpers:
cider-info-request(shim:cider-sync-request:info),cider-eldoc-request(shim:cider-sync-request:eldoc),cider-apropos-request(shim:cider-sync-request:apropos), andcider-load-file-request(shim:cider-request:load-file). - #3921: New
cider-repl-history-doctorcommand: walkscider-repl-input-historylooking for entries whose parens don't balance under Clojure syntax, shows each in a side buffer, and asks whether to delete it. When done, rewritescider-repl-history-fileif one is configured. Useful for cleaning up history after a typo got committed that breakscider-repl-historyrendering (see #3915). - #3926: Recognize let-go (a Clojure dialect implemented in Go) as a known nREPL runtime.
cider-runtimereturnslet-gofor these connections and the connection info line shows the runtime version, e.g.CLJ project@localhost:2137 (let-go 1.0). - #3892: Decouple the nREPL transport layer from CIDER's UI layer (closes #1099):
nrepl-make-eval-handleris now CIDER-agnostic. It no longer referencesnrepl-namespace-handler-function,nrepl-err-handler-function,nrepl-need-input-handler-function, or any hardcoded UI strings.- New
:on-nsand:on-statuskeyword slots let any consumer wire up their own namespace tracking and status handling. - The editor-level
cider-make-eval-handlerwraps it with CIDER's UI behavior (ns tracking, default error handler, need-input prompt, "Evaluation interrupted." / "Namespace not found." messages). In-tree callers all use it. - #3927: New nREPL message log commands:
nrepl-show-messagespops up the messages buffer (prompting when there are multiple connections), andcinnrepl-messages-moderuns the newnrepl-clear-messagesto wipe the buffer. Auto-follow on new entries now leaves windows alone if you've scrolled back to read history; only windows already at end-of-buffer get scrolled to the latest message.
New features
cider-eval-commands-map(C-c C-vprefix) now binds five eval commands that previously had no entry under the prefix:cider-eval-last-sexp-to-repl(j/C-j)cider-eval-print-last-sexp(p/C-p)cider-read-and-eval(:)cider-eval-defun-to-comment(;)cider-pprint-eval-last-sexp-to-repl(f j e)
Bugs fixed
- #3937:
cider-find-keywordno longer opens the result in another window on a single prefix argument; only-or a double prefix does, matching the othercider-find-*commands. - #3938: Disabling
cider-modenow removes its reader-conditional font-lock keywords instead of re-adding them, so fontification no longer lingers and repeated toggling no longer stacks duplicate keywords. - #3939: Fix the malformed Clojure Interaction mode menu, where "Eval and print last sexp" rendered as an empty submenu instead of a working command.
- #3941: REPL history insertion with the mouse no longer risks inserting the wrong entry; the overlay lookup now honors the clicked position instead of point.
- #3942:
cider-log: apply the consumer's own filters when initializing a session, fix the brokencider-log-infoautoload, and honor a caller-supplied logger prompt. - #3953: Fix the cider-debug "Forced move out of sexp" menu entry erroring with a void variable, and an off-by-one in the cider-xref no-backing-file references fallback.
- #3933: Fix severe editor lag in Clojure buffers when no REPL is linked. Friendly-session matching no longer scans the project classpath (or the buffer's namespace) on every redisplay; it now just checks whether the buffer's file is under a session's project directory. Dependency sources jumped to via
cider-find-varare pinned to their originating session instead. cider-browse-spec-mode,cider-browse-spec-view-mode, andcider-browse-spec-example-modeeach have aneasy-menunow, exposing the drill/browse-all/generate-example commands that previously had no menu affordance.cider-repl-history-modenow has aneasy-menu("REPL History") covering insert, navigation, search/filter, refresh/delete/undo, and quit.cider-log-modenow has aneasy-menu("CIDER Log") covering event inspect/print, navigation, and the framework/appender/consumer/event management commands previously only reachable via theC-c M-lprefix.cider-macroexpansion-mode,cider-repl-history-mode, andcider--debug-modedocstrings now include\\{...-map}, soC-h m(describe-mode) lists the active key bindings instead of just a one-line description.cider-repl-mode-menunow listscider-repl-history("Browse REPL input history",C-c M-p) alongside the other Browse entries.cider-test-menunow listscider-test-rerun-test("Rerun the last test",a/C-aincider-test-commands-map) andcider-test-toggle-fail-fast(rendered as a:style togglereflectingcider-test-fail-fast).cider-browse-ns-mode-menunow lists "Operate at point" (RET) and dedicated "Filter" and "Group by" submenus that expose theh p/t/m/f/vandg t/vchords. Previously the menu showed only 3 of the 11+ bound commands.cider-inspector-mode-menunow exposes the inspector's full command surface: sibling navigation, max-nested-depth, the three view toggles (pretty-print / sort-maps / only-diff, rendered as:style toggle), the object/normal view toggle, tap/print/analytics, andcider-inspect-expr-from-inspector. Previously ~13 bound commands were menu-invisible.cider-mode-eval-menunow listscider-pprint-eval-defun-at-point("Eval top-level sexp in popup buffer",C-c C-f),cider-read-and-eval(C-c M-:),cider-undef(C-c C-u), andcider-undef-all(C-c C-M-u). All were bound but menu-invisible.cider-sesman-browser-mapno longer bindsC-c C-itocider-describe-connection.C-iisTABon terminals, so the binding shadowedTABwhile point was on a REPL entry in the sesman browser.C-c C-dandC-c M-dstill invoke the command, alongside thej d/j ichords.- Fix
cider-macroexpansion-modemenu's "Go to Javadoc" entry callingcider-docview-javadoc(the doc-buffer-only helper) instead of the generalcider-javadoccommand bound tojin the same map. - Fix two "ClojureScript" submenu entries in
cider-mode-menuthat pointed at long-renamed commands: "Connect to a ClojureScript REPL" calledcider-connect-clojurescript(gone, nowcider-connect-cljs) and "Create a ClojureScript REPL from a Clojure REPL" calledcider-jack-in-sibling-clojurescript(never existed; the right command iscider-connect-sibling-cljs). - Fix Xref menu entries "Find fn dependencies" / "Find fn dependencies and select" in
cider-mode-menuthat called the non-existentcider-xref-fn-defs/cider-xref-fn-defs-select. They now correctly callcider-xref-fn-deps/cider-xref-fn-deps-select, matching theC-c C-? d/C-c C-? C-dbindings. - #3209: Fix
cider-formatdropping non-map cljfmt options (e.g.remove-consecutive-blank-lines?). - #3883:
cider-jack-in-cljnow restores the originating buffer when running its connect callback, matching the behavior ofcider-jack-in-cljsandcider-jack-in-clj&cljs. - #3885:
cider-locate-running-nrepl-portsnow runs itsps/lsofprobes viaprocess-file, so endpoint completion forcider-connectworks correctly from a TRAMP buffer (it inspects the remote host instead of the local one). Same for thelsofhealth check on.nrepl-portfiles. - #3885:
cider-clojure-cli-commandandcider-jack-in-defaultno longer freeze their auto-detection result at package load time. With the newnildefault, CIDER picks the right command/tool at jack-in time, so installing Clojure (or moving it on PATH) no longer requires restarting Emacs. - #3885:
cider--update-project-dirno longer reuses a single*cider-context-buffer*across calls. Each invocation gets a unique hidden buffer, so concurrent or interrupted jack-ins don't stomp each other. - #3885:
nrepl-server-filternow treats wildcard/loopback printed bind addresses (localhost,127.0.0.1,0.0.0.0,::1,::) as "use the calling context", so jacking in over TRAMP to a server that printslocalhostconnects to the TRAMP host instead of the local machine. - #3886:
cider--resolve-commandnow actually verifies command presence on remote hosts viaexecutable-find's remote search, instead of unconditionally trusting the user-supplied command. A missing tool on the remote side now surfaces immediately during jack-in instead of as a server-startup failure later. - #3887:
nrepl--ssh-tunnel-connectno longer routes itssshinvocation through a shell. The tunnel command is now spawned viastart-processwith an explicit arg list, eliminating shell-quoting hazards in user/host components. - #3894: Plug five request-id leaks in raw nREPL response handlers (
cider/test-stacktrace,cider/test-var-query,cider/analyze-last-stacktrace,cider/ns-reload,cider/get-state). They never callednrepl--mark-id-completed, so their ids accumulated in the connection'snrepl-pending-requestsfor the lifetime of the session. - #3896: A response-handler error or an unrecognized response id no longer aborts the nREPL response queue.
nrepl-client-filterwraps the dispatch call inwith-demoted-errors, and the no-callback case innrepl--dispatch-responseis now amessageinstead of a hard error -- so a single misbehaving callback can no longer drop later responses on the floor. - #3897:
nrepl-client-sentinelnow tears down the SSH tunnel buffer/process when the client connection closes. Previously only the orderlycider-quitpath killed the tunnel, so an abnormal disconnect (server crash, network drop) left thesshsubprocess as a zombie until Emacs exited. - #3898: Bound
nrepl-completed-requestswith a FIFO cap (nrepl-completed-requests-max-size, default 1000). The completed-request handler table previously grew unbounded for the lifetime of a connection; long-running sessions accumulated thousands of stale handler closures. - #3916:
nrepl-bencodeno longer crashes when handed a non-string scalar (symbol, float, etc.). The documented fallback ("everything else is encoded as string") usedstring-bytesdirectly, which errors on non-string input; values are now coerced viaformatbefore measuring byte length. - #3915: Fix
cider-repl-historyfailing with "Unmatched bracket or quote" on its second invocation in a session when the user's history contained an entry with unbalanced parens.cider-repl-history-setupnow erases the reused*cider-repl-history*buffer before re-enteringcider-repl-history-mode, so any user-configuredclojure-mode-hook(e.g. one that runscheck-parens) runs on an empty buffer instead of stale content from the previous render. - #3918:
cider--completing-read-portnow defaults to7888when no running nREPL port can be inferred.
Changes
- #3922: Project root detection no longer goes through
clojure-mode/clojure-ts-mode. The newcider-project-dirwalks up looking for any file incider-build-tool-files; if none is found it falls back toproject-current. Works in any buffer, including non-Clojure ones (e.g.M-x cider-connectfrom Dired). - #3924: The path-based fallback in
cider-expected-nsno longer delegates toclojure-expected-ns. Inline the same algorithm usingcider-project-dirand a newcider-directory-prefixesdefcustom (mirroringclojure-directory-prefixesbut owned by cider). No behavior change for files on the classpath (still preferred) or in a recognized project layout; removes the runtime dependency onclojure-modefor ns derivation. - #710: Use namespaced nREPL ops (e.g.
cider/infoinstead ofinfo) to match cider-nrepl 0.59+. - Bump the injected
nreplto [1.7.0](https://github.com/nrepl/nrepl/blob/master/CHANGELOG.md#170. - Bump the injected
cider-nreplto [0.59.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0590. - #3788: Remove the
cider-info-formeval fallback forcider-var-info. TheinfoandlookupnREPL ops are now required. - Bump the injected nREPL version to 1.6.
- #3868: Convert modern tuple-format indent specs (e.g.
[[:block 1] [:inner 0]]) to legacy format for compatibility with older clojure-mode versions. - #3867: Rename
cider-eval-spinner-type,cider-show-eval-spinner, andcider-eval-spinner-delaytocider-spinner-type,cider-show-spinner, andcider-spinner-delay. The old names are kept as obsolete aliases. - #3884: Replace
cider-jack-in-universal-optionswith the more generalcider-jack-in-toolsregistry; the old variable is removed. Anyone who customized it should migrate by callingcider-register-jack-in-toolinstead. - #3928: Performance and correctness pass on the nREPL message logger:
nrepl-log-messageno longer mutates the live response dict to attach its display timestamp. Response callbacks used to see a stray"time-stamp"key on freshly-arrived messages.nrepl-log--pp-listlikenow walks the plist in a single pass instead of copy-sequencing it through a sort/filter/concat pipeline. Specials (id,op,session,time-stamp) still print first but in canonical order, and the remaining keys now print in insertion order rather than alphabetically.ppwas swapped forprin1in the non-dict leaf paths ofnrepl-log-pp-object.nrepl-message-buffer-max-sizeandnrepl-message-buffer-reduce-denominatorare nowdefcustomto match their docstring intent.