Two weeks ago I wrote that CIDER 2.0 was brewing. Today the brew is ready - CIDER 2.0 (“Terceira”)1 is officially out! I promised the release would follow the preview within a week or two if nothing serious surfaced, and for once in my life I’m actually on schedule. The preview post covered the big themes in detail - the transient menus, the call-graph browsers, cider-macrostep, the revamped tracing and enlighten, the ClojureScript improvements - so I won’t rehash all of that here. Instead I’ll focus on what changed between the preview and the release, and on the bigger picture of what CIDER 2.0 is actually about. What CIDER 2.0 is about Looking back at the (enormous) changelog, the release boils down to four themes: Tackle some ambitious ideas that had been lying dormant for ages - inline macro stepping, rich (content-type) results, source-aware cross-referencing. Some of the issues closed by this release were filed the better part of a decade ago. Polish the “understand your code” toolbox - the debugger, the macroexpansion facilities, tracing, enlighten, the stacktraces and the cross-references all got a serious amount of love. Make the whole CIDER experience more consistent and discoverable - transient menus everywhere, one tree-view widget shared by all the browsers, and a naming cleanup that brought a bunch of stragglers in line. Fix old annoyances - the friendly-session complexity that 1.22 started taming (remember the redisplay lag fix and default sessions?), the find-references gaps, the flaky SSH tunnels, the confused stdin handling. Notice what’s not on that list - a pile of shiny new features. There are a few genuinely new things in 2.0, of course, but the heart of this release is that most of CIDER’s important features got overhauled (tastefully, I hope) or made more robust and faster. After 14 years you accumulate a lot of good ideas with rough edges; 2.0 is me going over them with fine-grit sandpaper. What landed after the preview Quite a lot, as it turns out - the last two weeks were busy. The headliners: Rich results are now on by default. Evaluate something that returns an image and it renders inline; a result that points to external content (a file, a URL) gets a [show content] button that fetches it only when you press it. HTML renders as formatted text, URLs are clickable. This works for regular C-x C-e-style evaluations too, not just in the REPL (configurable via cider-eval-rich-content-destination). Fun fact: content-type support was added way back in 0.17, disabled in 0.25 after it got a bit overzealous with the fetching, and the interactive-eval part was requested in 2018. Better late than never, right? The transient story got finished. The debugger and the inspector now have menus of their own (? and m respectively), and many menus grew argument flags - pick a pretty-printer per invocation, set test selectors once and reuse them across runs, toggle the refresh modes, pass aliases at jack-in. As before, your muscle memory is safe - the menus only help when you pause. There’s a new cider-doctor command that checks your Emacs setup and your active session for common problems (version mismatches, stale byte-code, leftover obsolete config) and produces a copy-pasteable report. My hope is that it will make “CIDER doesn’t work” bug reports a thing of the past - or at least give us something to look at when they arrive. Pending evaluations now show an animated spinner overlay right at the form you’re evaluating, instead of a spinner in the mode-line of a REPL buffer you probably can’t even see. The debugger got dusted off properly: quitting a debug session finally restores point to where you started - an issue filed in 2016 - the force-step-out key works again, and cider-nrepl 0.62 fixed a batch of instrumentation bugs (records surviving instrumentation, clear errors for forms too big to instrument, and a few crashes). Stdin handling got a long overdue overhaul - input prompts are routed to the session that actually asked for input, cancelling a prompt now interrupts the evaluation (instead of quietly letting it continue), and C-c C-d sends EOF for code that reads until end of input. Clicking a stack frame for a top-level anonymous function now jumps to the actual source instead of clojure.core/fn - a bug from 2020 - and ClojureScript frames render their ns/fn properly. A big consistency pass over the options: the REPL history browser is now cider-history, the inline-result options became a coherent cider-eval-result-* family, and the six per-buffer auto-select options collapsed into a single cider-auto-select-buffer. Every old name keeps working as an obsolete alias, so nothing breaks. And a long tail of robustness work - a slow memory leak on the eldoc/completion path, cider-classpath on Windows, formatting no longer corrupting multi-line strings, theme-aware colors for the nREPL message log, and plenty more of the same ilk. The documentation also got restructured to be more approachable - there’s a proper quickstart now, a keybindings reference page, dedicated pages on using CIDER alongside clojure-lsp and clojure-ts-mode, and a guide for full-stack Clojure + ClojureScript projects. The manual has grown organically for over a decade, and it showed; hopefully finding things is much easier now. Upgrading Despite the big scary version number, upgrading should be uneventful. All the renames ship with obsolete aliases, the transient menus preserve the classic keybindings, and the only removals are commands that had been no-ops for years. The one bit of muscle memory you may need to adjust: cider-macroexpand-all moved from C-c M-m to C-c M-m a, as C-c M-m is now a prefix for all the macroexpansion commands. If anything feels off after the upgrade, M-x cider-doctor is your friend. Fourteen years later CIDER 0.1 (well, nrepl.el 0.1) was released on July 10th, 2012 - fourteen years (and five days) ago.2 I’ve been reflecting on this a lot lately. Fourteen years is an eternity in our line of work - entire ecosystems have come and gone in that time - and yet here we are, still innovating, still improving, still moving forward. I dare say CIDER 2.0 is the strongest release in the project’s history, and it’s certainly the one I’ve enjoyed working on the most.3 None of this would have been possible without the people and organizations who have supported the project over the years - everyone who contributed code, reported issues, wrote about CIDER, answered questions, or backed the project financially. A special thanks to Clojurists Together for their long-standing support, and to everyone who took the snapshot for a spin after the preview post and shared feedback - several rough edges got filed down because of you. So, go play with CIDER 2.0! Kick the tires, explore the menus, crack open some values in the inspector, step through a macro or two. And if CIDER makes your work a little nicer every day, consider supporting its future development that’s what keeps CIDER and friends going. Where to from here? The sky is the limit. The REPL is the inspiration. The best is always yet to come… Keep hacking! Continuing the Azores naming streak started by 1.22 (“São Miguel”). “Terceira” literally means “the third” in Portuguese, which is a slightly confusing name for a 2.0 release, but naming things has never been my strong suit. ↩ The full origin story is in CIDER Turns 10, if you’re curious how a prototype hacked on a flight to San Francisco ended up here. ↩ That I can remember. My memory is not what it used to be. ↩
Nguồn: https://metaredux.com/posts/2026/07/15/cider-2-0.html. 8sync News chỉ tóm tắt và dẫn link; bản quyền nội dung thuộc tác giả và nguồn gốc.
Đọc tin ở đây, luyện code, học theo lộ trình và luyện IELTS trên các sản phẩm anh em — tất cả kết nối với nhau trong hệ sinh thái 8 Sync Dev.
Cổng chính của hệ sinh thái: giới thiệu sản phẩm, blog và bảng giá trọn bộ.
Khám pháHọc theo lộ trình với video, quiz chấm tự động, certificate và mentor đang làm nghề.
Xem khóa họcLuyện thuật toán chấm tự động 7 ngôn ngữ, chạy code ngay trên trình duyệt.
Drawbridge 0.4 vừa được phát hành sau 14 năm tồn tại trong tình trạng "bảo trì kỹ thuật". Dự án từng bị coi là bí ẩn nhất trong hệ sinh thái nREPL nhưng nay đang được nâng cấp để hiện thực hóa tiềm năng vốn có.
Lập trình viên nên đọc bài này để khám phá cách Drawbridge – một công cụ ít được biết đến nhưng có thể giải quyết những vấn đề kỹ thuật phức tạp trong việc tương tác với các hệ thống nREPL, giúp tối ưu hóa hiệu suất và khả năng mở rộng cho các ứng dụng lớn.
AI cho doanh nghiệp B2B: chat đa kênh AI phản hồi, gom lead tiềm năng, phân loại khách hàng.
Sắp ra mắtThư viện Clojure nhẹ biff.graph giúp cấu trúc mô hình dữ liệu dưới dạng đồ thị truy vấn được, lấy cảm hứng từ Pathom nhưng đơn giản hơn. Nó cho phép định nghĩa các resolver với truy vấn đầu vào/đầu ra, thống nhất truy cập cơ sở dữ liệu và logic nghiệp vụ vào một đồ thị duy nhất, tích hợp sẵn xử lý traversal, caching, batching và hỗ trợ autogenerate từ schema cơ sở dữ liệu.
Lập trình viên cần đọc để khám phá cách xây dựng mô hình dữ liệu có thể truy vấn hiệu quả bằng cách kết hợp cơ sở dữ liệu và logic kinh doanh trong một cấu trúc đồ thị đơn giản, giúp tiết kiệm thời gian phát triển và bảo trì khi cần xử lý các truy vấn phức tạp.
Báo cáo tiến độ hai tháng 5-6/2026 của Bozhidar Batsov về dự án nREPL/CIDER (được tài trợ bởi Clojurists Together) ghi nhận sự kiện CIDER 1.22 ra mắt (kết thúc phiên bản 1.x) và CIDER 2.0 sắp hoàn thiện với các tính năng mới như transient menus, inline macroexpansion, trình duyệt đồ thị cuộc gọi, cùng khả năng hiển thị nội dung REPL giàu có. Debugger Sayid cũng được hồi sinh sau nhiều năm ngừng phát triển. Hai dự án mới là 'port' (môi trường Clojure tối giản dựa trên prepl cho Emacs) và 'neat' (client nREPL đa ngôn ngữ cho Emacs) đã ra mắt. Cải tiến tooling ClojureScript thông qua các bản cập nhật Piggieback 0.7.0 và Weasel 0.8.0, cùng nhiều bản phát hành mới cho cider-nrepl, Orchard, và refactor-nrepl. Tác giả cũng đề cập đến sự suy giảm tài trợ cho các dự án nguồn mở trong 4 năm qua.
Lập trình viên Clojure nên đọc bài này để cập nhật những tiến bộ mới nhất trong hệ sinh thái nREPL/CIDER, từ các tính năng nâng cao như debug Sayid, giao diện menu tạm thời và đồ họa gọi hàm cho đến các công cụ mới như port và neat, giúp tối ưu hóa hiệu suất và trải nghiệm phát triển trong môi trường Emacs.
MrAnderson 0.6 is released, a Clojure dependency inlining tool used by cider-nrepl to bundle private copies of dependencies that can't clash with user project dependencies. The release fixes several long-standing bugs including incorrect handling of records vs. namespace references (dash vs. underscore munging), over-eager import rewriting, mixed imports of deftype-generated and real Java classes, skipped import rewrites, broken load statement path rewriting, and a critical bug that could delete project sources. The release also adds a Leiningen-free entry point (mranderson.core/inline-deps) enabling use with tools.build, and improves test coverage for the Java class repackaging subsystem.
Sayid 0.4 is a revived release of the long-neglected omniscient debugger for Clojure. Rather than using breakpoints, Sayid records every function call's arguments, return values, timing, and call tree so developers can inspect execution history after the fact. The release brings new artifact coordinates (mx.cider/sayid), renamed namespaces, a reworked nREPL API that returns structured data instead of pre-rendered text, and a rebuilt Emacs UI with foldable trees, source jumping, and CIDER inspector integration. The motivation came from CIDER 2.0 work, where the author realized Sayid's approach was superior to anything he could build into the built-in tracer. Breaking changes were made deliberately since the bundled Emacs client was effectively the only consumer.
A deep-dive into Piggieback, the nREPL middleware that enables ClojureScript evaluation over a standard nREPL server. The author explains how Piggieback hijacks nREPL sessions to reroute eval messages to a JavaScript runtime (Node, browser, etc.) via ClojureScript's IJavaScriptEnv protocol, without requiring any client-side changes. Key internals covered include session-based dispatch, the DelegatingReplEnv trick to prevent premature teardown, how the compiler environment is stashed for use by tools like cider-nrepl, and the two distinct code paths for REPL setup vs. steady-state evaluation. The post also covers known limitations (one Node REPL per JVM, no interrupt support, multi-form eval), contrasts Piggieback's approach with shadow-cljs, and summarizes recent 0.6.x/0.7.0 bug fixes and refactoring work done as part of the CIDER 2.0 effort.
CIDER, the Clojure interactive development environment for Emacs, is getting a major version bump to 2.0. Key additions include transient-based discoverable keymaps, a unified foldable tree-view widget across all browsers, built-in cross-reference/call-graph functionality (reducing need for clj-refactor.el or clojure-lsp), a revamped debugging toolbox with inline macro stepping and a dedicated trace buffer, ClojureScript test and macroexpansion fixes, async Eldoc, and numerous quality-of-life improvements. The snapshot is available on MELPA now, with the official release expected in a week or two. The author credits AI agents for helping prototype ideas faster, while noting design decisions remain his own.