Malli Compatibility Matrix¶
Balli is a Malli clone for Basilisp. This matrix tracks the major Malli feature families Balli covers and calls out runtime or ecosystem differences where Basilisp/Python diverge from Clojure/JVM.
| Area | Balli status |
|---|---|
| Vector syntax | Supported |
| Map syntax / schema AST | Supported via raw schema input, balli.core/ast, and balli.core/from-ast |
| Lite syntax | Supported explicitly via balli.lite/form and balli.lite/schema |
| Validation / explain / humanize | Supported |
| Spell checking and custom messages | Supported, including schema messages, locale maps, caller overrides, and global message formatting |
| Value transformation / coercion | Supported, including non-throwing reports and roundtrip checks |
| Integration transformer presets | Supported for env/config maps, query params, and JSON API payloads |
| Parse / unparse | Supported |
| Sequence regex schemas | Supported |
:seqable / :every |
Supported, including bounded-prefix :every checks |
| Function schemas / instrumentation | Supported, including :->, :=>, :function, wrapper ergonomics, and contract metadata |
| Generative function checking | Supported |
| Value generation / sampling | Supported |
| Reusable generator objects | Supported via balli.generator/generator and :gen/gen |
| Generator combinators | Supported via Balli-native generator objects (return, elements, fmap, bind) |
| Generator property checks | Supported via balli.generator/check and check-roundtrip reports |
| Shrinking | Heuristic Balli shrinker with shrink-trace; not Clojure test.check shrinking |
| Provider inference | Supported |
| Provider closed-map/common-key inference | Supported via {:closed-maps true} and {:optional-threshold f} metadata |
| Provider fit reports | Supported via balli.provider/provide-report |
| Destructuring | Supported via balli.destructure |
| Immutable/custom registries | Supported |
| Mutable default registry | Supported |
| Dynamic registry | Supported |
| Lazy registry | Supported |
| Local property registry | Supported |
| Var registry | Supported via derefable schema refs |
| JSON Schema export | Supported |
| OpenAPI / Swagger export | Supported |
| DOT / PlantUML visualization | Supported |
| English descriptions | Supported |
malli.util-style map introspection |
Supported via entries, keys, required-key?, and optional-key? |
malli.util-style map surgery |
Supported via set-entry, update-entry, rename-keys, and transform-entries |
malli.util-style path utilities |
Supported via path-map, update-at, and diff |
| EDN schema persistence | Supported safely via named function refs |
| Experimental schema analysis | Balli-native data-only helpers via balli.experimental, including dependency graphs, migration impact, and risk reports |
| Python ecosystem integrations | Supported at adapter boundaries via balli.integrations, including callable validators and coercers |
| Static schema inspection | Supported via balli.inspect |
| SCI integration | Data-only host context via balli.sci; no Clojure SCI runtime |
| clj-kondo / static analyzer integration | Data export via balli.clj-kondo; no Clojure analyzer runtime |
malli.experimental |
Not ported as executable Clojure experimental APIs |
Compatibility Corpus Categories¶
The executable corpus in tests/test_compatibility_corpus.lpy uses three
working categories:
- Supported: behavior Balli implements and tests directly.
- Intentionally different: behavior Balli documents where Python/Basilisp semantics differ from JVM/Clojure, such as scalar type distinctions.
- Not applicable: Clojure runtime ecosystem APIs that do not have a direct Basilisp/Python equivalent, such as browser/ClojureScript integrations.
Evidence¶
Compatibility claims are backed by CI tests where practical. See
Compatibility Evidence and
tests/test_compatibility_corpus.lpy for the executable corpus.