CIDER for Emacs: a Clojure REPL-driven workflow, reviewed
The Clojure Interactive Development Environment that Rocks for Emacs
At a glance
- What is it?
- CIDER is an Emacs minor-mode that turns a running Clojure process into the centre of your editing. Here is what it installs, how cider-jack-in works, and where the approach stops paying off.
- Who is it for?
- Adopt CIDER if you already live in Emacs and want compilation, completion, tests and definition lookup to run against a live Clojure process rather than a static index. Do not adopt it if you want a standalone editor, or if your team cannot agree on a shared nREPL workflow.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Emacs Lisp, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem CIDER solves for Clojure programmers
Clojure rewards a workflow where you evaluate forms against a running program instead of restarting it. Plain clojure-mode and clojure-ts-mode only handle editing source files. They know nothing about a live process, so completion, documentation lookup, test running and debugging have to happen somewhere else. CIDER adds exactly that layer. The README describes cider-mode as an Emacs minor-mode that complements clojure-mode and clojure-ts-mode, adding support for interacting with a running Clojure process for compilation, code completion, debugging, definition and documentation lookup and running tests. The audience is narrow and specific: people who already use Emacs and want the REPL to be the centre of the edit-compile-evaluate loop rather than a terminal window beside the editor. If that is not you, nothing here will convince you, and that is fine. The project's own framing is interactive programming, and the manual at docs.cider.mx is where the full command surface lives.
How cider-jack-in and cider-connect split the workflow
CIDER talks to your program over nREPL, the network REPL protocol that Clojure tooling converged on. There are two entry points, and picking the wrong one is the most common early mistake. cider-jack-in starts an nREPL server for you, with project dependencies loaded, and connects automatically. cider-connect assumes a server already exists and only attaches to it. The split matters because jack-in reads your project's build configuration to decide how to launch that server, while connect needs a host and port you supply. In a ClojureScript buffer the connect path has its own command, cider-connect-cljs, which is a separate binding because a ClojureScript REPL is not the same target as a Clojure one. The architecture is deliberately thin on the Emacs side: CIDER is the client, your build tool owns the process, and the protocol between them is nREPL rather than anything CIDER-specific. That is why you can start a server by other means and still attach. It also means that when jack-in fails, the fault is usually in how your project declares its dependencies, not in CIDER's connection code.
Installing CIDER and running your first jack-in
The README calls package.el the recommended installation route, and CIDER is published on NonGNU ELPA, MELPA Stable and MELPA. Once one of those archives is enabled in your Emacs setup, installation is a single command. Run it and confirm that the package appears in your installed package list.
M-x package-install RET cider RETNow open a file that belongs to a Leiningen or tools.deps project, for example foo.clj, and start a session. This launches an nREPL server with the project dependencies loaded and connects Emacs to it automatically.
M-x cider-jack-inIf you would rather not visit a file first, the README documents a prefix argument that lets you specify the path to a Clojure project directly. The same command is bound to C-c C-x (C-)j inside Clojure and ClojureScript buffers.
C-u M-x cider-jack-inFor an already running server, start it outside Emacs and then attach. The README gives Leiningen as the example.
lein replBack in Emacs, cider-connect attaches to that server. In Clojure and ClojureScript buffers it is bound to C-c C-x (C-)c (C-)j, and cider-connect-cljs to C-c C-x (C-)c (C-)s. The project also publishes a one-page printable quick reference card in its repository for the command set.
Where CIDER stops being the right tool
CIDER is Emacs-only, and that is a hard boundary rather than a preference. Every feature in the README is framed as an extension of Emacs behaviour, and the manual is written for Emacs users. If your team edits Clojure in another editor, CIDER is not a candidate at all, and no amount of nREPL compatibility changes that, because the nREPL server is the part that is portable while cider-mode is not. The second limitation is operational: jack-in depends on detecting your build tool and constructing a launch command for it. A project with an unusual setup, a custom task, or dependencies resolved by something the detection does not recognise is where the automatic path stops being automatic, and you fall back to starting a server yourself and using cider-connect. Third, the version history shows a major release, 2.0, arriving in July 2026 after a long 1.x line. Major versions in a project that follows SemVer are where configuration and keybinding assumptions get revisited, so a pinned older config is a real thing to check rather than assume. The repository's own ROADMAP.md and CHANGELOG.md exist precisely because behaviour shifts between releases.
CIDER compared with a plain nREPL client
The honest alternative is not another Emacs package. It is skipping the editor integration and driving nREPL directly, either from a terminal REPL or from a small client you write. The difference in approach is stark. A raw nREPL client gives you evaluation and nothing else: you type forms, you get values. CIDER adds the layer that reads your source buffers, so definition and documentation lookup, code completion, test running and debugging all resolve against the running process while you stay in the file you are editing. That layer is the product. It is also the cost, because it is Emacs Lisp code living inside your editor configuration, and it is what breaks when a release changes a default. The other realistic comparison is clojure-mode alone. It edits Clojure well and does nothing with a process. If your work is mostly reading and refactoring source rather than evaluating against a live system, clojure-mode plus a terminal REPL covers the same ground with less configuration surface.
Maintenance, licence and the cost of upgrading
The repository is not archived, and the last push was on 2026-09-20, so the codebase is receiving commits. Recent releases are v2.0.1 on 2026-07-23, v2.0.0 on 2026-07-15 and v1.22.2 on 2026-06-17. The project states that it follows SemVer and links to a release policy page in its documentation, which is the page to read before deciding how aggressively to track new versions. Upgrading has two distinct costs. The first is the Emacs version you build and test against: the Makefile notes that linting and compiling assume Emacs 28, and it shows how to point ELDEV_EMACS at a separate Emacs 28 installation if your daily editor is a different version. The second is the development toolchain itself. The Makefile targets run through eldev, and the README points to a generic eldev installation script rather than the CircleCI-specific one, with an explicit warning not to use the CircleCI script locally. If you contribute or run the test suite, that distinction will cost you an afternoon if you miss it. CIDER is licensed GPL-3.0. That is a copyleft licence, and it governs the package you install and any modified version you distribute. Whether your own Clojure source is affected is a question for your legal team, not for this article. The repository also carries a codespell configuration and a spell-checking workflow, which is a small signal about how strictly changes are reviewed.
Editorial conclusion
Adopt CIDER if you already live in Emacs and want compilation, completion, tests and definition lookup to run against a live Clojure process rather than a static index. Do not adopt it if you want a standalone editor, or if your team cannot agree on a shared nREPL workflow. Before committing, verify that cider-jack-in detects your build tool in your own project, and read the release policy page for what a major version bump means for your config.
Frequently asked questions
What is CIDER in the context of Clojure and Emacs?
CIDER is an Emacs minor-mode called cider-mode that complements clojure-mode and clojure-ts-mode. It adds support for interacting with a running Clojure process for compilation, code completion, debugging, definition and documentation lookup, and running tests.
How do I install CIDER?
The README calls package.el the recommended route. With NonGNU ELPA, MELPA Stable or MELPA enabled in your Emacs setup, run M-x package-install RET cider RET.
What is the difference between cider-jack-in and cider-connect?
cider-jack-in starts an nREPL server with the project dependencies loaded and connects Emacs to it automatically. cider-connect attaches to an nREPL server that is already running, which you can start yourself, for example with lein repl.
Which Emacs version does CIDER build and test against?
The Makefile states that linting and compiling assume Emacs 28, and documents setting ELDEV_EMACS to point at a separate Emacs 28 installation if you normally use a different version.
What licence is CIDER released under?
CIDER is licensed GPL-3.0, as shown by the licence badge in the README and the LICENSE file at the top level of the repository.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/clojure-emacs-cider)