Skip to content

MESH v0.14.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 14:20
· 36 commits to main since this release
edc1cbd

MESH v0.14.0 release notes

Prepared 2026-10-18 (not yet published: v0.13.0 is the latest release).

v0.14 gives MPRX its first new types and its first new template construct since 0.10. A program, a manifest and a template that use none of it compile and render as they did in 0.13.0: the same template, fingerprint, render tree and keys (a test installs 0.13.0 from the registry and compares).

Highlights

  • Enum types. { "kind": "enum", "values": [...] }: a string that is one of a closed set. A literal that is not a member is unknown-variant with a did-you-mean; the editor completes the members inside the quotes of a prop value and beside == and !=.
  • has(x) and x ?? y, a presence test and a default; defaults for props (default in the manifest). They make a template template-v2; the compiler writes v2 only for a template that uses them, and a v1 document that contains them is malformed.
  • Snippets. {#snippet name(a, b)} … {/snippet} and {@render name(args)}: a piece of template with parameters, declared in a template and passed to a component (a prop of kind snippet, with children as the content between the tags), or kept local and rendered, recursively if it likes (64 levels). A snippet reads the scope it was declared in. A local snippet can be passed along as a prop value (row={fmt}). An optional snippet must be rendered inside {#if has(name)} (possibly-absent-snippet).
  • A composite that only forwards. A template that is only {@render children()} makes no node of its own.
  • Language server: completion of snippet names, snippet parameters and enum members; hover and go to definition for snippets; signature help in a render's arguments.
  • Smaller compiler. The WebAssembly is optimized after linking: 320,778 gzipped bytes become 301,420.

Compatibility

  • @valancex/mesh-compiler and @valancex/mesh-runtime 0.13.0 read a manifest that uses a new kind as manifest-unknown-kind, and a template-v2 document as assembly-unsupported-format-version: nothing older misreads them.
  • Identity: a render site adds the step 0x08, a forwarder the fragment step 0x07 before it. A program that has neither keeps its keys.
  • New diagnostics: unknown-variant (with enums), unknown-snippet, snippet-arity-mismatch, duplicate-snippet, children-conflict, possibly-absent-snippet, the manifest codes manifest-snippet-misplaced and manifest-children-not-snippet, and the runtime codes assembly-snippet-to-primitive, assembly-snippet-root-scope, runtime-snippet-depth. See the diagnostics manual.

Verification

cargo test --workspace, cargo clippy --workspace --all-targets -- -D warnings, cargo fmt --check; the package tests (compiler, runtime, conformance, language server, editor grammar) including those that run Chromium; conformance vectors enums/, snippets/, forwarder/ and passing/ in Rust and JavaScript; and the replay hashes of evidence/language/replay.mjs, which are the same on 0.13.0 and 0.14.0.