nREPL Middleware Setup
You can skip this section if you don’t plan to use cider-connect or don’t care
about the advanced functionality that requires cider-nrepl .
|
Much of CIDER’s functionality depends on its own
nREPL middleware. cider-jack-in
(C-c C-x (C-)j (C-)j) automatically injects this middleware and other
dependencies as required. But if you prefer a standalone REPL, you will need to
invoke cider-connect
instead of cider-jack-in
and manually add the
dependencies to your Clojure project (explained in the following sections).
Setting Up a Standalone REPL
Using Leiningen
Use the convenient plugin for defaults, either in your project’s
project.clj
file or in the :repl
profile in ~/.lein/profiles.clj
.
:plugins [[cider/cider-nrepl "0.52.0"]]
A minimal profiles.clj
for CIDER would be:
{:repl {:plugins [[cider/cider-nrepl "0.52.0"]]}}
Be careful not to place this in the :user profile, as this way CIDER’s
middleware will always get loaded, causing lein to start slower. You really
need it just for lein repl and this is what the :repl profile is for.
|
Using tools.deps
You can add the following aliases to your deps.edn in order to launch
a standalone Clojure(Script) nREPL server with CIDER middleware from
the commandline with something like clj -A:cider-clj
. Then from emacs
run cider-connect
or cider-connect-cljs
.
:cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.52.0"}}
:main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]}
:cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"}
cider/cider-nrepl {:mvn/version "0.52.0"}
cider/piggieback {:mvn/version "0.6.0"}}
:main-opts ["-m" "nrepl.cmdline" "--middleware"
"[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]}
the suggested ClojureScript setup is apt for e.g. library development, but not for frontend development. For those cases, you may want to check out our shadow-cljs or figwheel setups instead. |
Using Gradle
Make sure you’re using Clojurephant 0.4.0 or newer. |
dependencies {
devImplementation 'nrepl:nrepl:0.9.0'
devImplementation 'cider:cider-nrepl:0.52.0'
}
tasks.named('clojureRepl') {
middleware = ['cider.nrepl/cider-middleware']
}
You can then launch the nREPL server from the command line via: ./gradlew clojureRepl
.
For more information, see the Clojurephant docs.
Using Embedded nREPL Server
If you’re embedding nREPL in your application, you’ll have to start the server with CIDER’s own nREPL handler.
(ns my-app
(:require [nrepl.server :as nrepl-server]
[cider.nrepl :refer (cider-nrepl-handler)]))
(defn -main
[]
(nrepl-server/start-server :port 7888 :handler cider-nrepl-handler))
It goes without saying that your project should depend on cider-nrepl
.
CIDER and cider-nrepl projects are co-developed, but are not released in a
lock-step — they have differing versions. Usually, any recent version of
cider-nrepl should be (mostly) compatible with a recent version of CIDER. You
can check the required version of cider-nrepl for your version of CIDER by
looking at cider-required-middleware-version . See also the
compatibility
matrix.
|