Omnist
A data-interchange format built around one idea: a document is an ordered list of labeled edges, not a map. Its schema algebra proves compatibility and equivalence between schemas — a decidable guarantee, not a heuristic.
Most formats model an object as a map from key to value. That works fine until a format needs to express "many" without a wrapper, or interleave repeated elements with other data — the shape XML uses and JSON, YAML, and TOML can't natively carry. Omnist's Document model handles all of it the same way: a node is a list of (label, value) edges, in order, with no special case for arrays. Two item edges are the array. There is no separate list type to define.
A Schema is a graph of named, closed records constraining those edges. Because both models are small and closed, a set of operations over schemas — inclusion, equivalence, minimization, extraction, inference — are decidable and total, not best-effort.
Read the specification → View the introduction slides → Try the tutorial →
Boringly correct
Every port runs the same two-track conformance harness — structural fixtures and a JSON test-vector suite — against the same specification pin, backed by formal ABNF grammars for OML and OSD verified against each port's own parser. The schema algebra itself is cross-checked three independent ways against the same test cases, so no single method's blind spot can hide a bug.
Implementations
Five official ports, all built against the specification.
| Language | Version | Maturity | Docs |
|---|---|---|---|
| Python | 0.9.4 | beta, reference | py.omnist.dev |
| TypeScript | 0.3.0-alpha | alpha | ts.omnist.dev |
| Rust | 0.2.2-alpha | alpha | rs.omnist.dev |
| Go | 0.3.0-alpha | alpha | go.omnist.dev |
| Java | 0.2.2-alpha | alpha | j.omnist.dev |