ClojureScript 1.12.116 Release Notes

Table of Contents

1. Release Summary

Field Value
Version 1.12.116
Date 2025-11-24
ES Target ES2016 (was ES3)
Contributors Borkent, Gearon, Liutikov

2. Key Features

2.1. ECMAScript 2016 Target

ClojureScript transitions from ES3 (1999) to ES2016. Major JS VMs now offer great performance across the spec, enabling Proxy, Reflect, and modern iteration protocols.

Brain teaser angle: Code that relied on ES3 polyfill behavior may break or behave differently under ES2016 semantics.

2.2. cljs.proxy Namespace (Experimental)

New namespace uses ES2016 Proxy to bridge ClojureScript maps and vectors to JavaScript objects and array-likes, reducing clj->js marshalling:

(require '[cljs.proxy :refer [builder]])
(def proxy (builder))
(def proxied-map (proxy {:foo 1 :bar 2}))

Brain teaser angle: Proxied maps look like JS objects to JS code but are still persistent ClojureScript maps underneath. Mutations on the JS side don't propagate.

2.3. Clojure 1.12 Method Values

Supports method value syntax with ES2016 Reflect eliminating manual :param-tags requirements:

(refer-global :only '[String])
(map String/.toUpperCase ["foo" "bar" "baz"])
;; => ("FOO" "BAR" "BAZ")

2.4. refer-global / require-global

  • :refer-global declares global definitions available without js/ prefix
  • :require-global enables using JS libraries via script tags without build configuration

2.5. Lite Mode (Experimental)

Two compiler flags for smaller artifacts:

  • :lite-mode – simpler 2011-era data structures, ~2/3 size reduction
  • :elide-to-string – removes toString implementations for tree-shaking

Example: a functional composition program compiles to 6K Brotli compressed.

Brain teaser angle: Lite mode data structures may have different performance characteristics and missing protocol implementations compared to full ClojureScript. (= (type []) cljs.core/PersistentVector) could return false in lite mode.

3. Dependencies

  • Google Closure Compiler updated to v20250820

4. Teaser Candidates from This Release

# Title Strength
1 Proxy map mutation transparency Medium
2 refer-global shadowing (see T9) Niche
3 Lite mode type identity Medium
4 Method values + variadic functions Medium

These are documented but not yet implemented. See async-brain-teasers.org for the 1.12.145 candidates that are implemented.

Author: J Walsh

jwalsh@nexus

Last Updated: 2026-05-11 07:53:08

build: 2026-05-11 07:54 | sha: 125deff