← overview

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

NamespaceImplementedMismatchedMissingDialect-Only
clojure.core57.4%390 / 6796228998
clojure.core.protocols0.0%0 / 110110
clojure.core.reducers0.0%0 / 210210
clojure.data20.0%1 / 5046
clojure.datafy0.0%0 / 2020
clojure.edn50.0%1 / 2110
clojure.instant0.0%0 / 5050
clojure.math100.0%45 / 450019
clojure.pprint0.0%0 / 260260
clojure.set100.0%12 / 12001
clojure.spec.alpha0.0%0 / 870870
clojure.string100.0%21 / 21002
clojure.template100.0%2 / 2100
clojure.test25.6%10 / 3962910
clojure.walk90.0%9 / 10010
clojure.zip100.0%28 / 28000

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/build
    • cljd.flutter/run
    • cljd.flutter/state
    • cljd.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:async
    • dart:collection
    • dart:convert
    • dart:core
    • dart:io
    • dart:isolate
    • dart: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)

DateImplementedVars
2026-05-2352.2%519 / 995
2026-05-2252.2%519 / 995