Follow-up to #1623 (Phase 6). #1564 added the shared DbClient and hydration payload, but the SSR guide leaves Solid client-provider work for a later change.
Goal
Render Solid live queries on the server from a request-scoped DbClient, then hydrate their result in the browser without an empty/loading flash or cross-request state leakage. Preserve Solid-native signals, resources, and keyed reactivity.
Acceptance criteria
- Provide an idiomatic Solid client context/provider so
useLiveQuery can resolve collection descriptors against the current DbClient. Direct collection inputs and existing non-SSR usage remain supported.
- A server request can create its own client, preload a collection or live query, render the expected rows, and serialize
dbClient.dehydrate(). Concurrent requests do not share collection/query state.
- A browser client consumes the server state before its first query read. The initial hydrated output matches the server; subsequent normal sync replaces it without duplicate rows or stale resource results.
- Add an integration or E2E test through a real Solid server-render/hydration path, including request isolation and a post-hydration update.
- Document setup and any unsupported query/resource cases.
Reuse the core SSR snapshot/observer contract rather than introducing a Solid-specific payload.
Follow-up to #1623 (Phase 6). #1564 added the shared
DbClientand hydration payload, but the SSR guide leaves Solid client-provider work for a later change.Goal
Render Solid live queries on the server from a request-scoped
DbClient, then hydrate their result in the browser without an empty/loading flash or cross-request state leakage. Preserve Solid-native signals, resources, and keyed reactivity.Acceptance criteria
useLiveQuerycan resolve collection descriptors against the currentDbClient. Direct collection inputs and existing non-SSR usage remain supported.dbClient.dehydrate(). Concurrent requests do not share collection/query state.Reuse the core SSR snapshot/observer contract rather than introducing a Solid-specific payload.