jank: Clojure to Native - 2026 Update
Summary
jank is a Clojure dialect that compiles to native code with unprecedented C++ interoperability. The project switched to alpha status in January 2026 after fixing critical garbage collection issues.
Key Updates
- Alpha Status: jank reached alpha in January 2026 after six weeks of fixing GC issues
- LLVM 22 Integration: Worked on upgrading to LLVM 22, encountered API changes and performance regressions
- Codegen Rework: Rewrote codegen approach to work around LLVM issues, resulting in faster performance than before
- nREPL Server: Implemented nREPL server written entirely in jank, works with NeoVim/Conjure and Emacs/CIDER
C++ Interop Features
- Referred Globals: Include C/C++ headers directly in ns macro, use :refer-global to bring native symbols
- Native Loop Bindings: Loop bindings can be unboxed native values, great for C++ iterators
- Unsafe Casting: Support for C++ unsafe casting via cpp/unsafe-cast
Quote from early adopter: "It's hard to describe the experience of compiling C++ code interactively - I'm so used to long edit-compile-run loops and debuggers that it feels disorienting (in a good way!)"
Technical Details
jank uses a two-phase build process - first compiling jank to C++, then using Clang/LLVM to compile to native binaries. The nREPL server is itself written in jank and baked into the runtime, demonstrating the tight integration.
The project acknowledges challenges with LLVM's C++ API stability but is working with LLVM/Clang developers to address these issues for future releases.
Resources
- jank book - Official documentation
- Original blog post
- GitHub