Skip to content

v0.12.0 (2026-07-08)

Latest

Choose a tag to compare

@mbolli mbolli released this 08 Jul 11:28

New Features

  • Context revival: a tab backgrounded long enough that its context is destroyed now rebuilds an
    equivalent context on reconnect — same context ID, so the already-loaded DOM keeps working — and
    re-seeds signal values the client still holds, instead of hard-reloading the page. This
    preserves local (_-prefixed) signals, scroll position, and focus that a reload would wipe. It is
    on by default (10-minute window) and needs no app code; tune or disable it with
    Config::withContextRevivalWindow() (0 = fall back to the previous reload behavior). Revival
    re-runs the page handler, so — exactly as on a reload — server-only state (#[Persist]) resets and
    onDisconnect/connect hooks re-fire. Named components survive; anonymous components (no explicit
    name) reset. As part of this, TAB-scoped action IDs are now deterministic (previously random per
    registration) so a revived context's action URLs match the ones already in the DOM.
  • Config::withContextCleanupDelay(): configures the grace period (default: 5 seconds) before
    an inactive context — one whose SSE connection has closed — is destroyed, allowing time for page
    navigation or a brief reconnect. Previously hardcoded; mirrors the existing
    Config::withGcInterval() pattern. Pass 0 to disable the grace period and clean up immediately
    on disconnect.