Skip to content

This release adds 3 notable features for engineering teams evaluating rollout.

Published 1mo Build & Package
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

clojure compiler go interpreter scripting-language vm

Summary

AI summary

Updates affect core, lower-go, vm, rt, reader, bytecode, and tooling with new features, fixes, and compatibility changes.

Changes in this release

Feature Medium

Add os/exec* functions to run commands with inherited stdio.

Add os/exec* functions to run commands with inherited stdio.

Source: llm_adapter@2026-06-08

Confidence: high

Feature Medium

Add 3‑arg deref with timeout for promises/futures.

Add 3‑arg deref with timeout for promises/futures.

Source: llm_adapter@2026-06-08

Confidence: high

Feature Medium

Add compare-and-set! for atoms.

Add compare-and-set! for atoms.

Source: llm_adapter@2026-06-08

Confidence: high

Feature Medium

Add clojure.string/replace-first function.

Add clojure.string/replace-first function.

Source: llm_adapter@2026-06-08

Confidence: high

Feature Medium

Add invokable (IFn) and derefable (IDeref) protocols.

Add invokable (IFn) and derefable (IDeref) protocols.

Source: llm_adapter@2026-06-08

Confidence: high

Dependency Low

Update Brew cask to let-go version v1.9.0.

Update Brew cask to let-go version v1.9.0.

Source: llm_adapter@2026-06-08

Confidence: high

Bugfix Medium

Fix lexical binding resolution in the compiler.

Fix lexical binding resolution in the compiler.

Source: llm_adapter@2026-06-08

Confidence: high

Bugfix Medium

Ensure binding restores dynamic vars on non‑local exit.

Ensure binding restores dynamic vars on non‑local exit.

Source: llm_adapter@2026-06-08

Confidence: high

Bugfix Medium

Make find return a MapEntry and pop drop the first element of a one‑item seq.

Make find return a MapEntry and pop drop the first element of a one‑item seq.

Source: llm_adapter@2026-06-08

Confidence: high

Bugfix Medium

Fully skip non‑matching reader‑conditional branches.

Fully skip non‑matching reader‑conditional branches.

Source: llm_adapter@2026-06-08

Confidence: high

Full changelog

Changelog

  • bdab0276bd999ee069ed63135ff1ff48a2a25f4b Brew cask update for let-go version v1.9.0 (#139)
  • 7f8d720e65ad84ab8a8a8903471764e7f295f22d Minimal compatibility with weavejester/medley (#157)
  • 9b7e7a156203feb39c6bdb507c0d9d70301202b1 Out-of-SSA Go lowering: lineage coalescing, dead-store elimination, const-param inlining, loop-closure capture (#142)
  • ef13bac5fb96a18a99fb7b79b3b9434491adf6c1 build: consolidate generated-artifact gates into make check-generated (#162)
  • 60731cf84f2f8d7865c5a404c6d74087942dc234 build: coordinate the code-generation pipeline in scripts/generate.lg (#163)
  • 2457fce14ce802d6bf597c6a20e40669a1f83e4e build: fix + install the core_compiled.lgb merge driver; add a content freshness gate (#152)
  • 6b69c99bc8a88b72eac20481be959a5fbc3165d9 docs(readme): document :lg reader-conditional portability convention (#132) (#161)
  • 18aed18f95dc40724246e98deb97b2857134c442 feat(bytecode): carry local-variable names as debug info in the bundle (#131)
  • c572516c669481b39a02775bd5f712fcd16d7b48 feat(core): Comparable protocol + let-go.semver (versions, ranges, sha) (#160)
  • 779bab8335ad7b3c5d160af188ddd1b862937609 feat(core): faithful print-method dispatch (#179)
  • b27111c36c883101e589559aefbfa0b87d92d9cd feat(core): hybrid ir-compile — fall back to bytecode for unlowerable defns (#191)
  • af8784460bc0cfc1cfd4fa977f5b727133020861 feat(core): mutable deftype fields (^:mutable / ^:unsynchronized-mutable) (#135)
  • a45419960488faa3d16d3c74bba17ec6874489a9 feat(core): namespaced and :syms associative destructuring (#150)
  • 7b0d457cd4d72060c24aa543b71603c4b2e4c95c feat(core): upstream clojure.core fns from the malli shim (#181)
  • 2050fe86d2e28a1278e639c10286c8e1bdcbaed1 feat(examples): revive the malli-on-let-go shim example (#172)
  • 4af8ceac0d1d815b6685c3de9795b23ef9c5b910 feat(lower-go): cross-ns IFn dispatch via cached vars (rt.CachedVarFn) (#189)
  • ef72a922f7f6ce0f488bfa8dc83d4af449e0f0ac feat(lower-go): intra-namespace direct-call lowering (slice 1) (#168)
  • 9e870fb2fe12fe00dfd6a3527294ae3c6e9439e3 feat(lower-go): registry-driven intra-namespace direct-call lowering (slice 2) (#188)
  • fe6c6e2bca14c63e23bcc639d9e0c64540be56a3 feat(math): expose the math namespace as clojure.math too (#156)
  • 098f55bb355d602b7084587b1e2c83f7ac45b4b2 feat(os): add os/exec* — run a command with inherited stdio (#154)
  • de8d3ee3922f1f8e4b611b545b11b1e6d8afeeba feat(reader): don't require type-hint tags to resolve as vars (#141)
  • d57d0cdec58c27b31a7ce51062dfadc13ad848a3 feat(reader): match :bb reader-conditional feature (opt-in) (#136)
  • 64f53fce3849428453f88181e49355327c615008 feat(rt): 3-arg deref (blocking deref with timeout) for promises/futures (#140)
  • 64501a265d50c9ce67c618124012b2f6d2771118 feat(rt): bytecode bundle disassembler (lgb -> round-trippable EDN) (#184)
  • cfb7654de63538e71cdaf298dba0880115be0b17 feat(rt): compare-and-set! for atoms (#137)
  • 6db26f2e6e1006e6a47d69de5a6b73de67922bac feat(rt): lazy var roots, bound?, defonce; own-ns access to private vars (#147)
  • ee129dbd58145ed51995db0cede87c49bd492a5a feat(rt): pluggable host-method-dispatch seam (#138)
  • 0e4e4cda8e22012f633cef805c0d346f610d2498 feat(rt/term): wake read-key on SIGWINCH via BEL self-pipe (#165)
  • 98a5d21c900b1484137267a9473d21d48c633916 feat(semver): require-letgo (Layer 3) + npm/cargo range sugar (Layer 4) (#132) (#164)
  • de92b59d45492c23d2bda160548a55ce51319d3a feat(source-paths): explicit -source-paths/LG_SOURCE_PATHS fully define the search path (#199)
  • fdacba37dcb461ec0e3e843ffc53e54b25371b8d feat(string): add clojure.string/replace-first (#153)
  • 430b72d747f6f1bd09cb91015a892cd746001ebe feat(tooling): fanout-ratchet — generated-code-size gate (#171)
  • 7fcac880945c635ddeff88cb631a16e9d7d07a2f feat(vm): make Protocol and deftype/reify instances metadata-aware (IMeta) (#187)
  • 91be84866c330e5ce05e8004dff8eeccf1e24ea4 feat(vm): set-field! primitive for in-place deftype field mutation (#133)
  • c71ba4ddd2fa036a4f9bc50a605a8f26edcebac4 feat: Add io/resource with -resource-paths roots and -b binary embedding (#178)
  • 5c5f434b57763453aaf13f73e17f4d1a158534d9 feat: browser interop (js/emit + LetGoHost API) (#174)
  • 664b13cc6f3f04f7fe9962f879bf1504709ff36b feat: invokable (IFn) + derefable (IDeref) protocols (#158)
  • f5930101318cecbde5ae31ca4f2a74852ec9e18a fix(compiler): correct lexical binding resolution (#144)
  • 1d906cdd950c6471ef8a77f50126b7af2231187f fix(core): binding must restore dynamic vars on non-local exit (#185)
  • 81dcc4fad53980ca94c8c8ec1278d36c4b7b33be fix(core): deftype/defrecord/reify/extend-protocol macro hygiene (#151)
  • a9e35b4569af8c4c920e4e52dedbfe5a2d371f6d fix(core): ns :require is load-only; run-tests runs each ns's tests in its home ns (#149)
  • f9037fbcf88c2daf36ac54d2eac623e64d859b83 fix(core): thread reader metadata through defmacro so ^:private works (#180)
  • b0dd737b19d82c3f4d0cab4c4599acaad2380caa fix(lower-go): deterministic gensym naming so lowered Go is reproducible (#182)
  • 9dcbdc772e744818de335938189d10d00f585ea9 fix(lower-go): unbox vm.Value -> primitive at branch-edge copies (#166)
  • 79d26c8e548716a7290cc5ae3424e2e0248b99fd fix(reader): fully skip non-matching reader-conditional branches (#145)
  • 8734dde75d50510d9847ad0a1af93362b677c997 fix(rt): find returns a MapEntry; pop drops the first element of a one-item seq (#148)
  • 873cb7947a88f70cd64fa1ae9936217a07856864 fix(vm): emit EDN-conformant string escapes from pr-str (#183)
  • 7930fb187c67709a0dff4fc72ebcf2a89dff2654 fix(vm): type dispatch — Object default, instance? on protocols, deftype fields, re-pattern (#146)
  • ab99a52313604289902d8123eecade1b305cfc4c perf(timeline): perf-data branch, execution-only suite, 3 IR exec variants (#190)
  • b8c37fc27c16fa470ae64c64a1d6ac5d2fc7328e perf: add timeline page and main snapshots (#173)
  • 74d4ec61da0e8ffa9070419761727b6960f84e4f test(bench): fixed-workload program benchmark from benchmark/*.clj (#170)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track I made a Clojure-like language in Go, boots in 7ms

Get notified when new releases ship.

Sign up free

About I made a Clojure-like language in Go, boots in 7ms

All releases →

Related context

Beta — feedback welcome: [email protected]