Clojerl
- Implemented
- 74.3%739 / 995 vars
- Reported
clojure-version - 0.0.0-1.4ad14e5
- Clojure (JVM) Version
- 1.12.4
- Snapshot Taken
- 2026-05-23 20:49 UTC
Per-Namespace Implementation
| Namespace | Implemented | Mismatched | Missing | Dialect-Only |
|---|---|---|---|---|
| clojure.core | 72.3%491 / 679 | 25 | 188 | 26 |
| clojure.core.protocols | 0.0%0 / 11 | 0 | 11 | 0 |
| clojure.core.reducers | 90.5%19 / 21 | 0 | 2 | 1 |
| clojure.data | 60.0%3 / 5 | 0 | 2 | 1 |
| clojure.datafy | 0.0%0 / 2 | 0 | 2 | 0 |
| clojure.edn | 100.0%2 / 2 | 0 | 0 | 0 |
| clojure.instant | 60.0%3 / 5 | 1 | 2 | 1 |
| clojure.math | 0.0%0 / 45 | 0 | 45 | 0 |
| clojure.pprint | 100.0%26 / 26 | 2 | 0 | 26 |
| clojure.set | 100.0%12 / 12 | 0 | 0 | 0 |
| clojure.spec.alpha | 97.7%85 / 87 | 1 | 2 | 5 |
| clojure.string | 100.0%21 / 21 | 0 | 0 | 0 |
| clojure.template | 100.0%2 / 2 | 0 | 0 | 0 |
| clojure.test | 94.9%37 / 39 | 1 | 2 | 3 |
| clojure.walk | 100.0%10 / 10 | 0 | 0 | 0 |
| clojure.zip | 100.0%28 / 28 | 0 | 0 | 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
erlang/* -- direct BEAM module interop
- Since
clojerl-0.1- Affected Vars
erlang/binary.spliterlang/lists.reverseerlang/maps.geterlang/os.getenv
- Rationale
- BEAM modules become Clojerl namespaces under the `erlang/` prefix. This is the analogue of JVM class interop -- the surface is everything OTP ships, surfaced as Clojure-callable functions.
Documented Intentional Divergences (8)
Decisions where this surface intentionally departs from Clojure (JVM), as documented in the dialect's registry.
Numeric tower1 entry
Numeric tower follows the BEAM, not the JVM
- Since
clojerl-0.1- Rationale
- Integers are arbitrary-precision (BEAM's `integer()`). Floats are IEEE-754 double. `bigint` is not a separate type. Ratios are not a built-in BEAM type.
Reader behavior1 entry
Reader conditional :clj does not fire under Clojerl
- Since
clojerl-0.1- Rationale
- Clojerl uses :clje for its own branches. Code under :clj is not evaluated by Clojerl's reader.
Collection semantics1 entry
All values are immutable, including strings
- Since
clojerl-0.1- Rationale
- On the BEAM there are no mutable references that user code can observe. Strings are lists of integers or binaries; mutation operations from JVM-Clojure idioms (StringBuilder, transient!) have different shapes.
Concurrency primitives1 entry
Concurrency is process-and-message, not shared-state
- Since
clojerl-0.1- Rationale
- Clojerl inherits BEAM's actor model: lightweight processes communicate by sending messages. Refs and agents do not map to that model. Atoms are implemented; deref/swap! semantics match Clojure (JVM)'s where the value is in-process.
Error message shapes1 entry
Exceptions are Erlang errors, not JVM Throwables
- Since
clojerl-0.1- Rationale
- Erlang raises errors tagged as `error`, `throw`, or `exit`. Clojerl's catch syntax is `(catch _ e ...)` for any kind of error; `(catch :error reason ...)` for a specific Erlang error class. Portable code that catches JVM exception classes must use a :clje reader conditional.
JVM-static value remap1 entry
Host runtime is the BEAM, not the JVM
- Since
clojerl-0.1- Rationale
- Interop targets Erlang modules. JVM-static names (System/getenv, Math/PI, java.io.File) do not resolve; equivalents reach into OTP's `os`, `math`, `file`, `binary`, etc. via Clojerl's erlang/* shim namespace.
Namespace mechanics2 entries
Pre-1.0; behavior may change between releases
- Since
clojerl-0.1- Rationale
- Clojerl is pre-1.0. The current snapshot reflects what is implemented today; the divergence list will continue to evolve.
Many Clojure (JVM) stdlib namespaces are not implemented
- Since
clojerl-0.1- Rationale
- Clojerl ships clojure.core, .string, .set, .walk, .test, .template. clojure.edn, .pprint, .math, .data, .zip, .datafy, .instant, .core.protocols, .core.reducers, .spec.alpha are not yet ported.
History (1 Snapshot)
| Date | Implemented | Vars |
|---|---|---|
| 2026-05-23 | 74.3% | 739 / 995 |