Joker
- Implemented
- 48.1%479 / 995 vars
- Reported
clojure-version - 1.7.1-joker
- 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 | 56.8%386 / 679 | 58 | 293 | 20 |
| 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 | 0.0%0 / 2 | 0 | 2 | 0 |
| clojure.instant | 0.0%0 / 5 | 0 | 5 | 0 |
| clojure.math | 26.7%12 / 45 | 12 | 33 | 33 |
| clojure.pprint | 3.8%1 / 26 | 0 | 25 | 0 |
| clojure.set | 100.0%12 / 12 | 0 | 0 | 0 |
| clojure.spec.alpha | 0.0%0 / 87 | 0 | 87 | 0 |
| clojure.string | 95.2%20 / 21 | 5 | 1 | 5 |
| clojure.template | 100.0%2 / 2 | 0 | 0 | 0 |
| clojure.test | 92.3%36 / 39 | 1 | 3 | 0 |
| clojure.walk | 100.0%10 / 10 | 0 | 0 | 0 |
| clojure.zip | 0.0%0 / 28 | 0 | 28 | 0 |
Documented Extensions (4)
Vars in this surface that are intentionally outside Clojure (JVM), as documented in the dialect's registry.
JVM-static value remap4 entries
joker.filepath -- path manipulation
- Since
joker-1.0- Affected Vars
joker.filepath/absjoker.filepath/basejoker.filepath/dirjoker.filepath/extjoker.filepath/join
- Rationale
- Replaces clojure.java.io's File-centric path helpers with a string-first API matching Go's path/filepath package.
joker.{json,yaml,csv} -- data-interchange formats
- Since
joker-1.0- Affected Vars
joker.csv/read-stringjoker.json/read-stringjoker.json/write-stringjoker.yaml/read-stringjoker.yaml/write-string
- Rationale
- Built-in parsers/emitters for common data formats. On the JVM, equivalents live in third-party libraries (cheshire, clj-yaml, clojure.data.csv).
joker.os -- host process and environment access
- Since
joker-1.0- Affected Vars
joker.os/envjoker.os/execjoker.os/exitjoker.os/get-envjoker.os/sh
- Rationale
- Replaces System/getenv, java.lang.ProcessBuilder, and clojure.java.shell with a Go-flavored API.
joker.tools.cli -- command-line argument parsing
- Since
joker-1.0- Affected Vars
joker.tools.cli/parse-opts
- Rationale
- A port of org.clojure/tools.cli to Joker's interpreter; same API shape, no JVM dependency.
Documented Intentional Divergences (7)
Decisions where this surface intentionally departs from Clojure (JVM), as documented in the dialect's registry.
Type-system representation1 entry
Joker performs lint-time type checking
- Since
joker-1.0- Rationale
- Many shape errors that Clojure (JVM) reports at runtime are reported at lint time by Joker (joker --lint). This shifts the failure mode but does not change the runtime semantics of correct code.
Reader behavior1 entry
Reader conditional :clj does not fire under Joker
- Since
joker-1.0- Rationale
- Joker uses :joker for its own branches. Code under :clj is not evaluated by Joker's reader.
Printer behavior1 entry
*print-namespace-maps* / *print-length* / *print-level* not exposed
- Since
joker-1.0- Rationale
- Joker's pr-str emits a canonical form without exposing these binding-controlled dynvars to user code. Portable code that depends on binding them must guard with a :joker reader conditional.
Collection semantics1 entry
Several core fns lack the single-arg transducer arity
- Since
joker-1.0- Rationale
- `(map f)`, `(filter pred)`, etc. -- the transducer forms -- are not all implemented. Calling `(into [] (map inc) coll)` with the single-arg transducer form raises an arity error. The sequence-returning forms (`(map f coll)`) work as expected.
JVM-static value remap1 entry
Host runtime is Go, not the JVM
- Since
joker-1.0- Rationale
- Interop targets Go packages, not java.lang.*. JVM-static names (System/getenv, Math/PI, java.io.File) do not resolve; equivalents are reached via Joker's batteries-included joker.os, joker.filepath, joker.http, etc.
Namespace mechanics2 entries
clojure.spec.alpha is not implemented
- Since
joker-1.0- Rationale
- Spec's macro and dynamic-registry design does not fit Joker's lint-time analysis. Code that uses spec must guard with a :joker reader conditional.
Joker is a deliberate subset of Clojure
- Since
joker-1.0- Rationale
- Joker targets scripting and linting; it ships joker.core, joker.string, joker.set, joker.walk, joker.test, joker.template, joker.pprint, joker.math. clojure.edn, .zip, .data, .core.protocols, .core.reducers, .datafy, .instant, .spec.alpha are not implemented.
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 | 48.1% | 479 / 995 |
| 2026-05-22 | 48.1% | 479 / 995 |