Overview

CIDER is first and foremost a Clojure programming environment. Because all of its interaction with a running program goes through nREPL, it also works well with ClojureScript (see the ClojureScript section) and reasonably well with other Clojure-like languages that ship an nREPL server - babashka, nbb, Basilisp, ClojureCLR, scittle, joyride and so on.

This section covers those other Clojure-like runtimes. ClojureScript, being a much bigger and more deeply integrated story, has a section of its own.

Scope

CIDER is not a universal nREPL client. Its focus is Clojure and Clojure-like languages; supporting arbitrary nREPL runtimes (or other REPL protocols such as the Clojure socket REPL and prepl) is an explicit non-goal.

If you’re after a language-agnostic nREPL client, reach for Neat, a sibling project that came out of exactly this line of exploration. (For prepl there’s also Port, a minimalist prepl client.)

This wasn’t always the case. Older versions of CIDER’s roadmap had a prominent "make CIDER somewhat Clojure-agnostic" goal, but that itch was ultimately scratched by Neat and Port. That left CIDER free to focus on what it’s always been best at: a deep, opinionated nREPL-based IDE for Clojure and Clojure-like languages.

How much works

How much of CIDER lights up depends on what the runtime implements:

  • Clojure runs the full cider-nrepl middleware, so you get every advanced, tooling-heavy feature - the debugger, the inspector, the test runner, tracing, profiling, and so on.

  • ClojureScript also runs cider-nrepl, so it gets the editor-facing features (completion, documentation lookup, navigation, the test runner, macroexpansion), but the features that instrument or introspect a JVM at runtime have nothing to attach to in a JavaScript runtime. See the ClojureScript feature-support matrix for the specifics.

  • Most other runtimes expose only core nREPL operations (evaluation, loading code, and sometimes completion). You get a solid interactive-programming experience, but the cider-nrepl-powered features are unavailable - unless the runtime bundles a compatible middleware. Babashka, for instance, ships a curated subset of cider-nrepl, so it lights up more of CIDER than a bare core-nREPL server would.

In short: the closer a runtime is to Clojure - and the more of cider-nrepl it can run - the more of CIDER you get. When you invoke a command a runtime can’t support, CIDER aims to tell you so rather than fail obscurely.

Supported runtimes

CIDER has dedicated support and documentation for the following Clojure-like runtimes:

ClojureScript runtimes that happen to run on Node (like nbb) are reachable through the ClojureScript jack-in/connect commands as well; see the ClojureScript section.