Repository navigation
MESH v0.7.0
MESH v0.7.0 release notes
Released 2026-10-02.
v0.7 lets a program's structure vary, and settles what a node's identity means when it does. It adds no MPRX syntax: conditional and repeated structure are two provisional reserved components, mesh-if and mesh-each, declared in the component model like any other. The contract they keep is spec §9.10, which is not provisional.
Highlights
- Node identity is a contract (§9.10). An identity is a sequence of (site, instance) steps. A site is a place in the templates, never a position in a render tree; an instance exists only at a repeated site, where it is a key the author declares, a string or a finite number. Reordering, inserting and removing siblings change no identity. A node that leaves and returns has the same identity and is a new occurrence: identity is a name, not a handle on whatever a renderer built. A handler's identity is its node's identity and its event.
mesh-if. One or two element children are alternatives, chosen by a booleanwhen. Each alternative is a distinct site. It is never a node of the render tree.mesh-each.<mesh-each items={todos} as="todo" key={todo.id}>…</mesh-each>renders its one child per item, identified by the declared key and never by the item's index. The checker bindstodofor the key and the child and requires the key to be a string, a number orany; the runtime checks every key it evaluates. A missing, invalid or duplicate key renders nothing and reportsruntime-invalid-keyorruntime-duplicate-key.- Dispatch finds a repeated item by identity. A handler identifier is a hash and can't be turned back into an item, so for a program with a repeat dispatch renders from the stored program, model and snapshot and evaluates the handler in the scope it had. An identifier whose item isn't in the snapshot is
runtime-unknown-handler. - Conformance vectors for identity,
examples/conformance/identity/(C1–C10) andidentity/repeat/(C11–C22): language-neutral render-v1 trees for a renderer in any language to test its reconciliation against, with the pairing matching by position would make.
Compatibility
- A program that uses neither
mesh-ifnormesh-eachis unchanged: the same keys and handler identifiers, the same render trees, the same dispatch. The static-program tests and conformance trees are untouched. render-v1,template-v1, the manifest format and model fingerprints are unchanged. A repeated node is a node with a key; the order of its parent'schildrenis the order of the items.- Provisional. The spelling
mesh-ifandmesh-each, and the encoding of the new key steps (0x04,0x05, and a repeat's key writtens:orn:inside the hash), may change. Treat a program that uses them as using a preview. - Reserved names. A manifest that declares a component called
mesh-iformesh-eachgets these meanings. - Rust API:
mesh_analysis::Expectationhas a new variant,RepeatKey;mesh_runtime::RuntimeCodehasINVALID_KEYandDUPLICATE_KEY. - Renderers that matched children by position were correct only for static programs. They must match by key (§9.10.10); the vectors show each case.
Not decided
The MPRX syntax for conditional and repeated elements and for declaring a key, nested repeats, the key encoding, hydration's transport of identity, and whether a renderer may cache a realization across an absence. See §9.10.12.