ClojureScript (planck)
- Implemented
- 53.5%532 / 995 vars
- Reported
clojure-version - 1.11.132
- Clojure (JVM) Version
- 1.12.4
- Snapshot Taken
- 2026-05-23 16:04 UTC
Per-Namespace Implementation
| Namespace | Implemented | Mismatched | Missing | Dialect-Only |
|---|---|---|---|---|
| clojure.core | 59.4%403 / 679 | 110 | 276 | 425 |
| clojure.core.protocols | 0.0%0 / 11 | 0 | 11 | 0 |
| clojure.core.reducers | 0.0%0 / 21 | 0 | 21 | 0 |
| clojure.data | 0.0%0 / 5 | 0 | 5 | 0 |
| clojure.datafy | 0.0%0 / 2 | 0 | 2 | 0 |
| clojure.edn | 100.0%2 / 2 | 1 | 0 | 8 |
| clojure.instant | 0.0%0 / 5 | 0 | 5 | 0 |
| clojure.math | 0.0%0 / 45 | 0 | 45 | 0 |
| clojure.pprint | 76.9%20 / 26 | 0 | 6 | 33 |
| clojure.set | 100.0%12 / 12 | 0 | 0 | 0 |
| clojure.spec.alpha | 67.8%59 / 87 | 1 | 28 | 26 |
| clojure.string | 95.2%20 / 21 | 0 | 1 | 0 |
| clojure.template | 0.0%0 / 2 | 0 | 2 | 0 |
| clojure.test | 23.1%9 / 39 | 1 | 30 | 18 |
| clojure.walk | 70.0%7 / 10 | 0 | 3 | 0 |
| clojure.zip | 0.0%0 / 28 | 0 | 28 | 0 |
Documented Extensions (2)
Vars in this surface that are intentionally outside Clojure (JVM), as documented in the dialect's registry.
Collection semantics1 entry
cljs.spec.gen.alpha for generator wiring
- Since
cljs-0.1- Affected Vars
cljs.spec.gen.alpha/generatorcljs.spec.gen.alpha/sample
- Rationale
- Generator-side surface for cljs.spec.alpha; Clojure (JVM) exposes the equivalent via clojure.spec.gen.alpha. Captured as a cljs.* namespace for documentation; not in the v1 :include-only-namespaces filter.
JVM-static value remap1 entry
JavaScript-host interop sugar
- Since
cljs-0.1- Affected Vars
cljs.core/aclonecljs.core/agetcljs.core/arraycljs.core/asetcljs.core/clj->jscljs.core/js->clj
- Rationale
- Bidirectional conversion between CLJS data and JS data, plus typed-array helpers. Necessary for JS host interop; absent from Clojure (JVM) by design.
Documented Intentional Divergences (10)
Decisions where this surface intentionally departs from Clojure (JVM), as documented in the dialect's registry.
Type-system representation1 entry
No JVM class hierarchy
- Since
cljs-0.1- Rationale
- CLJS targets JavaScript; there is no java.lang.Class, no clojure.lang.* concrete types. type returns the JS constructor function. Code that pattern-matches on JVM-class names is not portable.
Numeric tower1 entry
Number tower follows JavaScript, not JVM
- Since
cljs-0.1- Rationale
- Numbers are JavaScript numbers (IEEE-754 doubles with integer fast path). No Long, no Ratio, no BigDecimal as separate types. Integer overflow silently converts to double; *' / +' have no additional precision over * / +.
Reader behavior1 entry
Reader conditional :clj does not fire under CLJS
- Since
cljs-0.1- Rationale
- Portable code must use :cljs (or :default) to target CLJS. Code under :clj is invisible to the CLJS reader.
Concurrency primitives1 entry
Concurrency primitives are JS-event-loop-bound
- Since
cljs-0.1- Rationale
- No JVM threads. atom is synchronous as in Clojure (JVM). future, agent, promise are absent or async-only; code relying on blocking semantics is not portable.
JVM-static value remap3 entries
clojure.java.io is absent
- Since
cljs-0.1- Rationale
- No File / InputStream abstractions. CLJS hosts have host-specific IO (planck.io, lumo.io, browser fetch); excluded from parity comparison intentionally.
proxy and gen-class are not provided
- Since
cljs-0.1- Rationale
- No JVM bytecode emitter. JS-target equivalents are deftype + protocols or specify-based JS-object construction.
No clojure.reflect / no runtime class inspection
- Since
cljs-0.1- Rationale
- JS has no class system to reflect on. Code that inspects member signatures must use JS interop (.constructor, Object.keys, etc.) directly.
Namespace mechanics3 entries
clojure.math is not provided
- Since
cljs-0.1- Rationale
- JS exposes Math/ statics directly; CLJS code uses js/Math.sin etc. or wraps them per-codebase rather than via a clojure.math namespace.
Some namespaces use the cljs.* prefix
- Since
cljs-0.1- Rationale
- clojure.core, clojure.spec.alpha, clojure.test, clojure.pprint are exposed as cljs.core, cljs.spec.alpha, cljs.test, cljs.pprint respectively. clojure.string, clojure.set, clojure.walk keep their Clojure (JVM) names.
clojure.edn is cljs.reader
- Since
cljs-0.1- Rationale
- CLJS exposes the EDN reader as cljs.reader; the portable :namespace-renames in this tool maps cljs.reader -> clojure.edn for comparison purposes, but the canonical CLJS API name is cljs.reader/read-string.
Drift Since 2026-05-22
- Added Vars
- 0
- Removed Vars
- 0
- Changed Vars
- 0
- Implementation Delta
- +0.0000
History (2 Snapshots)
| Date | Implemented | Vars |
|---|---|---|
| 2026-05-23 | 53.5% | 532 / 995 |
| 2026-05-22 | 53.5% | 532 / 995 |