Problem
The runtime has two SSR issues:
initComposableObserver() checks typeof window and silently returns on SSR — the observer is never initialized, so DevTools show nothing in Nuxt apps.
- The composable registry (
Map at module level) is a shared singleton. In SSR, concurrent requests share state, causing cross-request data leaks.
Solution options
Option A — explicit SSR guard (minimal)
Document that the Vue plugin should be wrapped in a import.meta.client guard in Nuxt. Add Nuxt docs and example.
Option B — request-scoped registry (full fix)
Thread a registry instance through Vue's provide/inject so each SSR request gets its own isolated state. Requires API changes to trackComposable.
Acceptance criteria
Problem
The runtime has two SSR issues:
initComposableObserver()checkstypeof windowand silently returns on SSR — the observer is never initialized, so DevTools show nothing in Nuxt apps.Mapat module level) is a shared singleton. In SSR, concurrent requests share state, causing cross-request data leaks.Solution options
Option A — explicit SSR guard (minimal)
Document that the Vue plugin should be wrapped in a
import.meta.clientguard in Nuxt. Add Nuxt docs and example.Option B — request-scoped registry (full fix)
Thread a registry instance through Vue's
provide/injectso each SSR request gets its own isolated state. Requires API changes totrackComposable.Acceptance criteria