v4.2.0

Released 2026-05-21 · GitHub release · CHANGELOG

A large release: no_std Rust support, cross-file composition via the Oceans Model, and four breaking changes. Upgrading from 4.1.x? Read the Migration: 4.1.x → 4.2.0 child page — it walks each break with fix-its.

Highlights

  • no_std support for the Rust target (#31, #33) — generated Rust can run in no_std / embedded / interrupt contexts.
  • Cross-file composition via the Oceans Model (RFC-0022 → RFC-0024) — multi-system Frame projects now compose through the host language’s own imports rather than a Frame-level @@import.
  • RFC-0017 init decoupling — the per-backend initialization mechanism was reworked (breaking; see migration).
  • Quality & test infrastructure — RFC-0027 in-tree snapshot tests (insta), property-based tests for codegen invariants, and the RFC-0031 post-release process.

Breaking changes

Four user-visible breaks — each surfaces as a clear compile error or wire-format mismatch. Full walk-throughs in the Migration guide:

  • @@import removed (RFC-0024)E823; replace with the target language’s native import syntax.
  • @@codegen { ... } removed (RFC-0032)E824; delete the block (auto-inference replaces it).
  • Enter/exit cascade removed (RFC-0019) — ancestor $> / <$ no longer run implicitly; forward explicitly with => $^.
  • Persist wire-format changes — Python / Lua / Erlang blobs saved by 4.1.x need a one-time migration.

Table of contents