0.8.20AUGUST 2026

KEY · OWNER · LIFETIME

Own every row.
Keep every node.

Keyed collections now cross one explicit source boundary with deterministic parent, child, component, state, ref, handler, and binding ownership.

168/168Tests passing
0 BRuntime graph delta
7Parity fixtures
01

WHAT CHANGED

Make ownership explicit.
Leave the DOM alone.

BLOCKS

Deterministic structure

Every keyed site records its slot, parent, children, key policy, collection source, selector, and source range.

COMPONENTS

Complete membership

Recursive local and imported rows retain every specialization, including stateless intermediate components.

HOOKS

State and ref provenance

Row states and refs retain their declaration source and exact component-specialization owner.

LINKS

Owned generated code

Keyed commands, handlers, effects, expressions, conditions, and calculated bindings point back to their block.

OUTPUT

Byte parity

Complete site output and seven representative keyed fixture trees match 0.8.19.

RUNTIME

Same identity

Build-time rendering still owns final IDs, while retained keys preserve DOM, state, refs, and effects exactly as before.

UPGRADE

Keep the keys. Make ownership visible.

$npm install @kudzujs/core@^0.8.20