jank: Clojure to Native - 2026 Update

⭐⭐⭐⭐ · 2026-03-06 · Clojure Native Compiler C++

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