Skip to content

v0.6.1

Choose a tag to compare

@fahchen fahchen released this 30 May 09:26
· 9 commits to main since this release
4216285

[0.6.1] — 2026-05-30

Fixed

  • TransportMusubi.Transport.Socket.build_connect_socket/2 no
    longer crashes the WebSocket handshake with FunctionClauseError when
    Phoenix's cookie session store delivers connect_info = %{session: nil} (the shape it produces on a cookieless first visit). The handler
    now normalizes nil to %{} before passing the session through to
    Musubi.Socket.put_session/2 (#63).
  • @musubi/react — Drop the react ^18.3.0 / react-dom ^18.3.0
    devDependencies that were causing pnpm-workspace consumers on React
    19 to ship two React copies in their production bundle and crash
    with minified React error #525 on the first Suspense render. React
    is now hoisted at the repo root and pinned via pnpm.overrides; the
    package's public peerDependencies (react ^18.2.0 || ^19.0.0) is
    unchanged (#63).
  • @musubi/reactuseMusubiRootSuspense no longer wedges
    Suspense in an infinite mount/unmount loop under React 19. The
    previous timer-based orphan sweep raced React 19's
    MessageChannel-scheduled commit and tore the mount entry down before
    any consumer could claim it. The cleanup path is now a
    FinalizationRegistry-backed safety net: each render-phase mount
    allocates a fresh unregister token and adds the fiber's useId
    claim to a Set<claimerId> on the shared entry. The finalizer
    fires only after React releases the discarded fiber, drops this
    fiber's claim, and bails while the set is non-empty (other sibling
    consumers still hold the entry) or while refs > 0 (a committed
    consumer owns the lifecycle). Falls back to "cleanup on channel
    termination" on hosts that lack FinalizationRegistry. (#63).