let-go is a bytecode compiler and VM for a Clojure-dialect written in Go: 10MB binary, ~7ms cold start, standalone executables, and WASM output.
Key Takeaways
Benchmarks vs Babashka (GraalVM native): 7ms vs 20ms startup, 14MB vs 27MB idle memory, 10MB vs 68MB binary size.
Passes 4696/4921 assertions (95.4%) of the jank-lang/clojure-test-suite across 217 test files.
Compiles to standalone binaries (lg -b myapp) or self-contained WASM HTML pages (lg -w outdir) with xterm.js terminal emulation.
Supports Babashka pods, core.async (real goroutines, not IOC), nREPL (CIDER/Calva/Conjure), and Go struct interop via RegisterStruct[T].
Known gaps: no STM/Refs, no Agents, no chunked seqs, no clojure.spec, numeric overflow wraps silently on int64.
Hacker News Comment Review
Commenters immediately flagged an ecosystem crowding question: Joker, Janet, Glojure, and let-go all occupy similar space, with active cross-project collaboration already happening between let-go and Glojure authors.
There is a thread-level consensus that Go’s runtime and stdlib are the real draw; the syntax layer is what these projects are solving, with Lisette also mentioned as an active compile-to-Go alternative.
A minor README inconsistency (7ms vs 6ms) was caught and corrected by the author; median is ~6.5ms on Apple M1 Pro.
Notable Comments
@veqq: Points to Janet in production use and Fennel (Lua VM) as mature JVM-free Clojure-like alternatives worth comparing.
@phplovesong: “signals that the runtime / stdlib of Go is one of the best” but surface syntax drives developers toward lisps and DSLs on top of it.