Repository navigation
MESH v0.13.0
MESH v0.13.0 release notes
Prepared 2026-10-17 (not yet released: v0.12.0 is the latest release).
v0.13 fixes how MPRX reads a space between two interpolations. <text>{first} {last}</text> rendered AdaLovelace: the space is a whitespace-only text child, and whitespace-only text is formatting (spec §3) and is dropped. A Valance application found it writing #{r.id} {r.customer} and worked around it with a separator character. A change in rendered text, so a minor version; nothing else changes.
Highlights
- A space on the line is content. A whitespace-only text child that has no line break and an interpolation immediately before and after it is kept verbatim, as part of the text run.
{first} {last}reads "Ada Lovelace";{a} {b}(two spaces) keeps both;#{id} {name} !is one run. - Layout is still layout. A line break is formatting wherever it is:
{a}and{b}on separate lines readab, as before, so a person or a formatter that re-wraps a template between two interpolations changes nothing it renders. Whitespace next to an element, a block, a slot or the start or end of the content is dropped as before (<b>x</b> <i>y</i>still has no space between the two elements; nothing asks for that yet, and a stray text child is not harmless on every target). {" "}still works where a space must sit at a line break or beside an element.
The rule is the one JSX and Vue (condensed) use: whitespace with a line break is layout, whitespace without one is content, narrowed here to the case the spec's own model of a text run already implied (§9.7: a run is literal text and interpolations concatenated).
Upgrading
Move @valancex/mesh-runtime, @valancex/mesh-compiler and @valancex/mesh-lsp to ^0.13.0 together (before 1.0 a minor is a new range). Search your templates for a space between two interpolations: {a} {b} on one line now renders its space. A template with none renders exactly what it did, with the same keys and handler identifiers; templates, manifests and programs compiled with 0.12 mean the same under 0.13 apart from this.
Compatibility
- Rendered text. The one change, above. The semantic model keeps a whitespace-only text child it used to drop (spec §3), so a template compiled with 0.13 has a text child in that place and one compiled with 0.12 has none; both are valid
mesh-templatedocuments and run on either runtime. - Rust and npm. No API changes. All packages move to 0.13.0 together.
- Tooling.
mesh-formatand the language server leave the space alone (it is content); the grammar does not change. - No diagnostics change.
Stability
The rule (a space with no line break between two interpolations is content; a line break is formatting; neighbours other than interpolations are unchanged) is stable on release. Whether whitespace between two inline elements should be content too is open, and would be a later minor with its own note.
Verification
cargo test --workspace, cargo clippy --workspace --all-targets -- -D warnings, cargo fmt --check, cargo doc with warnings as errors; five new runtime tests (mesh-runtime/tests/whitespace.rs: three fail without the change) and one formatter test; the design note is docs/superpowers/specs/2026-10-16-mprx-whitespace-between-interpolations.md.