v0.18.0
Released June 3, 2026 · All releases
Contract hardening. Follows v0.17.0's declarative metadata-and-layout model. The release hardens the rune output contract before third-party themes build against it, and lands the one breaking change held back from v0.17.0.
Changes
- Remove the legacy
slots+structureassembly shim from the identity transform engine (SPEC-079 phase 3). - Breaking for third-party themes/plugins that still declare
RuneConfig.slots. Every first-party rune migrated to the SPEC-080metaFields+blocks+layoutmodel across v0.17.0, and the deprecation warning shipped for a full minor release. This release removes: RuneConfig.slots(the ordered slot-name array) and the slot-based assembly path in the engine.StructureEntry.slotandStructureEntry.order— only meaningful under slot assembly.- The automatic universal
.rf-badgeclass the shim applied to every meta-typedStructureEntry. AStructureEntrythat should render as a chip must now set its ownclassviaattrs. Thedata-meta-type/data-meta-sentimentattributes are unchanged. - The
structure-only before/after assembly (icons/badges injected around content) is unchanged — only the slot vocabulary is gone. - Migration: move slot ordering into a
layouttree and project metadata throughmetaFields+blocks. See the SPEC-079 migration notes in the theme-authoring docs (config-api,dimensions). - Harden the rune output contract (SPEC-081 + SPEC-082).
- Declarative structure assembly (SPEC-081). A recursive
layoutfield assembles a rune's output tree from flat, nameddata-nameslots the transform emits — wrappers, headers, and grouping are described in config rather than built imperatively in each rune'stransform/postTransform. All first-party runes (recipe, howto, character, realm, faction, event, playlist, symbol, budget, embed, diagram, sandbox, mockup, comparison, …) migrated to flat-emit +layout, removing mostpostTransformstructure-building. - Typed node data channel (SPEC-082). Rune field data now rides a single typed
data-rune-fieldsJSON bag (camelCase keys) instead of per-field<meta data-field>children. The engine reads modifiers/metaFields/field-consumers from the bag and strips it from the final output, so rune HTML is markedly cleaner. Schema.org/RDFa SEO metadata is emitted inline and kept separate from the data channel. - Chart seam.
chartkeeps the authored<table>as the single source of truth and emits an<rf-chart>custom element that renders an SVG (bar/line) on the client; the table remains as the no-JS fallback. - Contracts now surface the layout skeleton;
projection.group/projection.relocateare deprecated in favour of placing slots directly in thelayouttree.