Spokes.wiki Search About
Created
Updated

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 of java.* 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 through jolt.ffi instead.
  • 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.

clojure · jank · hosted-language · raylib-ios · jlt-commons · scheme · programming-language