jank
- Implemented
- 69.0%687 / 995 vars
- Reported
clojure-version - jank-alpha
- Clojure (JVM) Version
- 1.12.4
- Snapshot Taken
- 2026-05-23 16:05 UTC
Per-Namespace Implementation
| Namespace | Implemented | Mismatched | Missing | Dialect-Only |
|---|---|---|---|---|
| clojure.core | 89.0%604 / 679 | 70 | 75 | 71 |
| 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 | 0.0%0 / 45 | 0 | 45 | 0 |
| clojure.pprint | 0.0%0 / 26 | 0 | 26 | 0 |
| clojure.set | 100.0%12 / 12 | 0 | 0 | 1 |
| clojure.spec.alpha | 0.0%0 / 87 | 0 | 87 | 0 |
| clojure.string | 100.0%21 / 21 | 0 | 0 | 0 |
| clojure.template | 100.0%2 / 2 | 0 | 0 | 0 |
| clojure.test | 97.4%38 / 39 | 0 | 1 | 6 |
| clojure.walk | 100.0%10 / 10 | 0 | 0 | 0 |
| clojure.zip | 0.0%0 / 28 | 0 | 28 | 0 |
Documented Extensions (1)
Vars in this surface that are intentionally outside Clojure (JVM), as documented in the dialect's registry.
JVM-static value remap1 entry
Seamless C++ interop via cpp/ tag
- Since
jank-0.1- Affected Vars
cpp/jank.runtime.object_refcpp/std.chrono.millisecondscpp/std.coutcpp/std.exceptioncpp/std.getenvcpp/std.this_thread.sleep_for
- Rationale
- jank's defining feature: any C++ type, function, or static is reachable from jank source via cpp/. Type conversion is implicit at the boundary. Roughly the jank analog of JVM Clojure's Java interop, but with AOT-compiled C++ instead of JVM reflection.
Documented Intentional Divergences (8)
Decisions where this surface intentionally departs from Clojure (JVM), as documented in the dialect's registry.
Reader behavior1 entry
Reader conditional :clj does not fire under jank
- Since
jank-0.1- Rationale
- Portable code uses :jank (or :default) to target jank. Code under :clj is invisible to jank's reader.
Printer behavior1 entry
*print-namespace-maps* / *print-length* / *print-level* not exposed
- Since
jank-0.1- Rationale
- jank-0.1-alpha does not yet provide the dynvars that control pretty-printing. Code that (binding [*print-length* 10] ...) fails at compile time with unresolved-var. Pending stdlib expansion.
Error message shapes1 entry
catch targets C++ types, not JVM classes
- Since
jank-0.1- Rationale
- (catch cpp/jank.runtime.object_ref e ...) for runtime objects; (catch cpp/std.exception e ...) for native exceptions. Portable code uses :jank reader conditionals around catch targets.
JVM-static value remap1 entry
Host interop is C++ via cpp/, not Java
- Since
jank-0.1- Rationale
- jank's host is LLVM/C++. Methods, types, and static functions are referenced via cpp/ (e.g. cpp/std.getenv, cpp/std.chrono.milliseconds). JVM-shaped interop (System/getenv, Math/PI) does not resolve.
Namespace mechanics3 entries
Alpha-stage: any specific behavior may change before 1.0
- Since
jank-0.1- Rationale
- jank is pre-1.0. The current snapshot reflects what is implemented today; behavior, var availability, and error shapes will continue to evolve. Hand-curated divergences here are starting points, not the final contract.
require resolves at compile time, not runtime
- Since
jank-0.1- Rationale
- An unknown module aborts the script before any try/catch can intercept. Portable code that probes for optional namespaces via try-require must instead use a known-good list per dialect.
Many Clojure (JVM) stdlib namespaces are not yet implemented
- Since
jank-0.1- Rationale
- jank-0.1-alpha ships clojure.core, .string, .set, .walk, .test, .template. The other 10 namespaces in Clojure (JVM)'s target list (clojure.edn, .zip, .pprint, .math, .data, .datafy, .instant, .core.protocols, .core.reducers, .spec.alpha) are tracked for later releases.
Macro semantics1 entry
AOT-compiled; semantics may differ at compile vs runtime
- Since
jank-0.1- Rationale
- jank compiles ahead of time to LLVM IR. Macroexpansion and analysis happen during compilation; eval at runtime via the JIT is supported but exception behavior and var resolution timing can differ from JVM-Clojure's runtime model.
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 | 69.0% | 687 / 995 |
| 2026-05-22 | 69.0% | 687 / 995 |