Jolt (Clojure on Scheme)
A Clojure implementation that compiles to Scheme. Jolt reads Clojure source, analyzes it to a host-neutral IR, emits Scheme, and runs it — on Chez Scheme by default, or on Gambit compiled to JavaScript for the browser. The compiler is self-hosted: written in Clojure and compiling itself. EPL-2.0, first commit 2026-06-01, 279 stars when this page was written.
HOMONYM — this is not Jolt Physics. ../game-engines-wiki records "Jolt" as the physics backend
Godot ships (godot-engine). Same word, unrelated project: that one is a C++ rigid-body engine,
this one is a Clojure compiler. Route on the substance, never on the name.
The fourth host for one language
clojure targets the JVM, the CLR and JavaScript. jank re-hosts it on C++. Jolt re-hosts it on Scheme, which makes it the second independent host-swap in this corpus and sharpens what hosted-language can claim: the language survives the move, and what changes is everything the host was providing.
What Jolt says it gives up, in its own README's list:
- No Java interop. No reflection, no
gen-class/proxy. Interop syntax resolves against a shimmed subset ofjava.*written in Scheme — the shims reimplement the API, not the JVM, so classloaders, JVM GC behaviour and JVM thread lifetime rules do not apply. C libraries are reached throughjolt.ffiinstead. - Codepoint strings.
(count "😀")is 1, not 2 — no UTF-16 surrogate pairs. - A different regex engine — irregex, not
java.util.regex. - Partial
clojure.core. A namespace can load with most functions working and a few missing.
Each item is a JVM property that Clojure programmers had taken for a Clojure property. The argument hosted-language makes from front pages, written here as a compatibility note by the people who had to reimplement around it.
The half jank does not have
jank's compilation story is JIT for the REPL, AOT for shipping — the dev-vs-ship split
dart also runs. Jolt's is AOT only: jolt build emits a self-contained executable where Chez
owns main, over threaded portable bytecode, with nothing generated at run time. It keeps the
interactive half by other means — an nREPL that attaches to the running program rather than a
compiler that runs inside it.
raylib-ios is what that buys: a Clojure program running on an iPhone, live-coded over the network, with no JIT anywhere in it.
Related
clojure · jank · hosted-language · raylib-ios · jlt-commons · scheme · programming-language