ClojureDart
- Implemented
- 52.2%519 / 995 vars
- Reported
clojure-version - c68c42a-cljd
- 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 | 57.4%390 / 679 | 62 | 289 | 98 |
| clojure.core.protocols | 0.0%0 / 11 | 0 | 11 | 0 |
| clojure.core.reducers | 0.0%0 / 21 | 0 | 21 | 0 |
| clojure.data | 20.0%1 / 5 | 0 | 4 | 6 |
| clojure.datafy | 0.0%0 / 2 | 0 | 2 | 0 |
| clojure.edn | 50.0%1 / 2 | 1 | 1 | 0 |
| clojure.instant | 0.0%0 / 5 | 0 | 5 | 0 |
| clojure.math | 100.0%45 / 45 | 0 | 0 | 19 |
| 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 | 2 |
| clojure.template | 100.0%2 / 2 | 1 | 0 | 0 |
| clojure.test | 25.6%10 / 39 | 6 | 29 | 10 |
| clojure.walk | 90.0%9 / 10 | 0 | 1 | 0 |
| clojure.zip | 100.0%28 / 28 | 0 | 0 | 0 |
Documented Extensions (3)
Vars in this surface that are intentionally outside Clojure (JVM), as documented in the dialect's registry.
Reader behavior1 entry
cljd.reader -- EDN reader implementation
- Since
cljd-0.1- Affected Vars
cljd.reader/read-string
- Rationale
- Ships a Dart-native reader because ClojureDart cannot lean on the JVM's reader at runtime. API is a subset of clojure.edn/read-string.
JVM-static value remap2 entries
cljd.flutter -- declarative widgets and reactive state
- Since
cljd-0.1- Affected Vars
cljd.flutter/buildcljd.flutter/runcljd.flutter/statecljd.flutter/widget
- Rationale
- Declarative bindings around Flutter's widget tree. No JVM Clojure analogue; the closest comparison is seesaw / cljfx on the JVM, both third-party.
Dart library interop via `["dart:..." :as ...]`
- Since
cljd-0.1- Affected Vars
dart:asyncdart:collectiondart:convertdart:coredart:iodart:isolatedart:math
- Rationale
- ClojureDart's analogue of Java-class interop. Dart libraries are imported via string-form require entries; their members are reached as `(alias/Symbol args)` in code.
Documented Intentional Divergences (7)
Decisions where this surface intentionally departs from Clojure (JVM), as documented in the dialect's registry.
Type-system representation1 entry
Extended type-hint syntax `^#/(Type ...)`
- Since
cljd-0.1- Rationale
- ClojureDart introduces `#/`-prefixed type expressions to attach Dart type annotations to forms (e.g. `^#/(List String) xs`). The portable `^Type sym` syntax is also supported.
Reader behavior1 entry
Reader conditional :clj does not fire under ClojureDart
- Since
cljd-0.1- Rationale
- ClojureDart uses :cljd for its own branches and :cljd/clj-host for compile-time JVM-side code. Portable code that targets ClojureDart must use :cljd; code under :clj is invisible.
Concurrency primitives1 entry
Concurrency follows Dart's isolate model
- Since
cljd-0.1- Rationale
- Dart has single-threaded event loops with isolates for parallel work. Refs, agents, and the JVM's java.util.concurrent vocabulary do not translate; cljd.core surfaces atoms and provides a Dart-async-flavored alternative.
JVM-static value remap1 entry
Host runtime is Dart, not the JVM
- Since
cljd-0.1- Rationale
- Interop targets Dart libraries (`dart:core`, `dart:math`, `dart:io`, `dart:async`, `dart:isolate`). JVM-static names (System/getenv, Math/PI, java.io.File) do not resolve; equivalents come from the corresponding `dart:*` library via `(:require ["dart:..." :as ...])`.
Namespace mechanics2 entries
Surface measured via static source analysis
- Since
cljd-0.1- Rationale
- The census reads .cljd source forms directly rather than calling ns-publics at runtime. Some metadata that requires evaluation (computed `:arglists`, runtime-attached docs) is not captured. The captured surface is the set of `def` / `defn` / `defmacro` / `definline` forms visible to the reader; matches `(meta var)` for plain definitions.
Several Clojure (JVM) namespaces have no cljd analogue
- Since
cljd-0.1- Rationale
- ClojureDart ships cljd.core, .string, .set, .walk, .test, .template, .math, .data, .edn, .zip plus Dart-specific cljd.flutter and cljd.reader. The canonical clojure.pprint, .core.protocols, .core.reducers, .spec.alpha, .datafy, .instant are not present.
Macro semantics1 entry
AOT-compiled to Dart; no runtime eval
- Since
cljd-0.1- Rationale
- ClojureDart compiles ahead of time to Dart source, which Dart itself then compiles. `eval`, `load-string`, and `read-string`-then-evaluate have no runtime equivalent. Macro expansion happens only at compile time.
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 | 52.2% | 519 / 995 |
| 2026-05-22 | 52.2% | 519 / 995 |