Back to Blog

RIDDL 1.27.0 Released

RIDDL 1.27.0 is now available.

release riddl compiler

RIDDL 1.27.0 is now available. This release of the RIDDL compiler and language tooling includes the following changes:

What’s New

What’s New

This release makes RIDDL’s AST → JSON serialization (root2Json, introduced in 1.26.0) lossless, complete, and deterministic. It matters most to consumers who round-trip models through JSON — notably AI training-data generation, where the JSON must faithfully and reproducibly represent the model.

Improvements

  • root2Json is now lossless and complete. It is reimplemented on RIDDL’s HierarchyPass infrastructure, so it visits every node in the model by construction. Entity state machines with multiple states — each with its own nested handlers — now round-trip in full, as do command/event/query/result messages defined inside entities, repositories, projectors, adaptors, and streamlets. Previously a multi-state entity collapsed to a single state and processor-defined messages were dropped, leaving dangling references when the JSON was read back. The entire riddl-models corpus (187 models) now round-trips through parseJson(root2Json(...)) with zero new validation errors — up from 0 of 187 clean.

Bug Fixes

  • Deterministic JSON round-trip. The AST↔JSON mapping is now a true fixed point: serialize a model to JSON, read it back to an AST, and re-serialize — the two JSON documents are byte-identical. As part of this, an unbounded String now serializes with its canonical String(0,255) bounds made explicit (matching the defaults parseJson already applies), so repeated round-trips are stable. The 1.26.0 JSON input-tolerance defaults are unchanged.

Internal

  • New fidelity tests: a JVM corpus test over all 187 riddl-models .bast files (asserting both JSON-identity and validation-parity), and a cross-platform (JVM/JS/Native) idempotence test on an inline multi-state model.
  • The hand-written JsonSerializer is replaced by JsonifierPass.

Compatibility: Fully backward compatible. parseJson still accepts the singular entity state alongside the new states array. No public API removed.