01
Many Lisps, one window
Six dialect profiles pick the runtime for whatever file is open. Jolt runs in or out of process, jank and ClojureScript are launched for you, and the rest attach over nREPL.
Alpha · macOS (Apple Silicon) · Linux from source · open source, EPL-2.0
Jonquil is a DrRacket-style editor for Jolt, Clojure, ClojureScript, jank, Basilisp and babashka. Edit code at the top, press Run, see the results in a REPL underneath, and Stop really stops a runaway program. On Jolt it goes further: your program runs on the editor's own runtime, so the inspector and the debugger see its real values.
Runs
Why Jonquil
The DrRacket loop for every Lisp you use, and on Jolt, the tools of a Lisp Machine.
01
Six dialect profiles pick the runtime for whatever file is open. Jolt runs in or out of process, jank and ClojureScript are launched for you, and the rest attach over nREPL.
02
Describe Key, the locations list, presentations in the console, Save World, the Processes panel: ideas from the MIT CADR and Symbolics Genera, working on your program's live values.
03
A plugin is one Clojure file of commands, keys, hooks and agent tools. An agent can drive the window over MCP, and a dialect profile is the plug point for the next Lisp.
Run and Stop
Run evaluates everything in the editor, the REPL prompt evaluates one line, and Stop ends a program even when it's spinning in a loop. It's the DrRacket loop, for every dialect.
read-line reads from the console, so stdin just worksLisp Machine ideas, on Jolt
Emacs is extended in a different Lisp from the one you write. Jonquil is written in Clojure on Jolt, and your Jolt code runs on that same runtime, so the tools look at real values, not the editor's.
Debugging
On Jolt: breakpoints, Step Into, Over and Out, Break on error, and the last error's frames with every local. Retry, Edit and retry, and Define and retry pick a failed evaluation back up in every dialect.
Help
Completion with a doc preview, quick doc, jump to definition and rename all ask the live runtime, whichever Lisp it is. The command palette lists every command with its keys.
nsAgents
jonquil --mcp serves six tools over MCP with no window. Add --window and an agent opens, edits, saves and runs tabs while you watch, through twenty tools.
--mcp-attach bridges to a window you already have open$ claude mcp add jonquil -- jonquil --mcp /path/to/project
Dialects and runtimes
Jonquil picks a dialect profile for whatever file is open, and its status bar says which one and whether the runtime is up.
Jonquil's own Lisp, and the one breakpoints, stepping and Break on error need. A program in a deps.edn project runs out of process over nREPL, so one that crashes or calls System/exit takes down a child, not Jonquil. A loose file runs in Jonquil's own process.
Start a server with clojure -M:serve, or anything that writes .nrepl-port, and Jonquil connects on the first Run. ClojureDocs examples in the full doc are runnable.
In a shadow-cljs project Jonquil attaches to your watch. Anywhere else it starts ClojureScript itself, on node or in a browser tab.
Open a .jank file and Jonquil starts its own jank repl for the window on the first Run.
Basilisp's server writes .nrepl-port in the folder you start it in, so {:dialect :nrepl} alone is enough. Run, the REPL, quick docs and completion work; errors arrive as a Python traceback.
;; in the project folder
;; $ basilisp nrepl-server
;; .jonquil.edn
{:dialect :nrepl}Point a project at any nREPL server you started, here or on another host. Features follow what the server offers, and the console says what it can't do.
Like CIDER on a live process: Jonquil attaches to a ClojureDart app you already have running and never starts, stops or signals it. The app writes its port to NREPL.lock, which Jonquil reads.
;; run the app on the fork that adds nREPL
;; $ clj -M:cljd flutter
;; then open a .cljd file and Run.
;; Jonquil reads NREPL.lock, never writes it.Tour
Every screenshot here is captured from the real app by Jonquil's own docs harness. Click one for a closer look.
Extend
A plugin adds commands and keys, hooks on saves, Runs and errors, and tools an agent can call. Each version that goes live is kept, so you can see its history and revert.
Read more(p/defplugin
{:id :wrap-when
:doc "Wrap the form at the caret in (when ...)."
:effects #{}
:commands
[{:id :wrap-when/wrap :scope :editor
:edit (fn [snapshot]
(p/wrap-form snapshot "(when " ")"))}]})A dialect is a profile: what its files look like, how they're painted, which evaluator runs them. A profile's port file is most of what an attach runtime needs.
Read moreOff by default. Turn on Smart and each open bracket closes itself as you type, dedenting a body line pulls the closer up, and indenting pulls it back in. Cmd/Ctrl+Shift+M cycles the themes: light, dark, solarized, navy and auto.
Read moreProvenance
Jonquil ports the idea of DrClojure and lifts its pure text-analysis code: the tokenizer, brackets, smart indent, the formatter. The front end is GTK4 on direct FFI, rebuilt in Jolt, and the Jolt fixes the project needed went upstream.
Recently added CHANGELOG
Get started
Signed and notarized, for Apple Silicon Macs on macOS 26 or newer. GTK comes inside the app, so it opens and runs a file straight away. To run a project (a folder with a deps.edn), also install Jolt and git. Intel Macs and Linux build from source.
sha256 4cf24c47710ea0021a8e3fb31ec6755702f14d6e193fdc60740d7be00b3d4428
sha256 bc5cbddb0a0e170ae4f736cfae9c2c888184f2958ade6babbd88cb85d80a8f2a
Alpha software. Some dialects are experimental, and Known limits lists the rough edges for each runtime.