Skip to content

Add SSR DbClient and live query identity#1564

Draft
tannerlinsley wants to merge 9 commits into
mainfrom
codex/ssr-db-client-live-query-identity
Draft

Add SSR DbClient and live query identity#1564
tannerlinsley wants to merge 9 commits into
mainfrom
codex/ssr-db-client-live-query-identity

Conversation

@tannerlinsley

Copy link
Copy Markdown
Member

Summary

  • Adds DbClient, DbProvider, and row-based dehydrate / hydrate APIs to support SSR and streaming at the collection level.
  • Makes React live queries derive identity from structured query IR by default, with queryKey reserved for opaque functional variants and hot render paths.
  • Keeps legacy dependency-array forms working for now with dev warnings ahead of 1.0 removal.
  • Updates docs, examples, skills, and test coverage to match the new SSR-friendly and React Query-aligned patterns.

Testing

  • Added and updated unit, type, and adapter tests for DbClient, hydration/dehydration, IR hashing, DbProvider, and React live-query identity behavior.
  • Ran package test suites and builds for @tanstack/db and @tanstack/react-db, plus adapter contracts and docs validation.
  • Verified formatting and diff cleanliness with git diff --check.

@coderabbitai

coderabbitai Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5bb903e9-9b87-4e8e-af6e-ee9d0268d3df

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/ssr-db-client-live-query-identity

Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-new Bot commented May 30, 2026

Copy link
Copy Markdown
More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1564

@tanstack/browser-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/browser-db-sqlite-persistence@1564

@tanstack/capacitor-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/capacitor-db-sqlite-persistence@1564

@tanstack/cloudflare-durable-objects-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/cloudflare-durable-objects-db-sqlite-persistence@1564

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1564

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1564

@tanstack/db-sqlite-persistence-core

npm i https://pkg.pr.new/@tanstack/db-sqlite-persistence-core@1564

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1564

@tanstack/electron-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/electron-db-sqlite-persistence@1564

@tanstack/expo-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/expo-db-sqlite-persistence@1564

@tanstack/node-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/node-db-sqlite-persistence@1564

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1564

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1564

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1564

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1564

@tanstack/react-native-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/react-native-db-sqlite-persistence@1564

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1564

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1564

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1564

@tanstack/tauri-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/tauri-db-sqlite-persistence@1564

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1564

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1564

commit: 132d53a

@github-actions

github-actions Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Size Change: +3.64 kB (+2.99%)

Total Size: 125 kB

📦 View Changed
Filename Size Change
packages/db/dist/esm/client.js 1.27 kB +1.27 kB (new file) 🆕
packages/db/dist/esm/index.js 3.14 kB +133 B (+4.42%)
packages/db/dist/esm/query/builder/index.js 5.96 kB +169 B (+2.92%)
packages/db/dist/esm/query/ir-stable-identity.js 2.06 kB +2.06 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
packages/db/dist/esm/collection/change-events.js 1.39 kB
packages/db/dist/esm/collection/changes.js 1.38 kB
packages/db/dist/esm/collection/cleanup-queue.js 810 B
packages/db/dist/esm/collection/events.js 434 B
packages/db/dist/esm/collection/index.js 3.61 kB
packages/db/dist/esm/collection/indexes.js 1.99 kB
packages/db/dist/esm/collection/lifecycle.js 1.69 kB
packages/db/dist/esm/collection/mutations.js 2.46 kB
packages/db/dist/esm/collection/state.js 5.33 kB
packages/db/dist/esm/collection/subscription.js 3.74 kB
packages/db/dist/esm/collection/sync.js 2.88 kB
packages/db/dist/esm/collection/transaction-metadata.js 144 B
packages/db/dist/esm/deferred.js 207 B
packages/db/dist/esm/errors.js 5.01 kB
packages/db/dist/esm/event-emitter.js 748 B
packages/db/dist/esm/indexes/auto-index.js 829 B
packages/db/dist/esm/indexes/base-index.js 729 B
packages/db/dist/esm/indexes/basic-index.js 2.05 kB
packages/db/dist/esm/indexes/btree-index.js 2.17 kB
packages/db/dist/esm/indexes/index-registry.js 820 B
packages/db/dist/esm/indexes/reverse-index.js 538 B
packages/db/dist/esm/local-only.js 890 B
packages/db/dist/esm/local-storage.js 2.1 kB
packages/db/dist/esm/optimistic-action.js 359 B
packages/db/dist/esm/paced-mutations.js 496 B
packages/db/dist/esm/proxy.js 3.75 kB
packages/db/dist/esm/query/builder/functions.js 1.37 kB
packages/db/dist/esm/query/builder/ref-proxy.js 1.23 kB
packages/db/dist/esm/query/compiler/evaluators.js 1.83 kB
packages/db/dist/esm/query/compiler/expressions.js 430 B
packages/db/dist/esm/query/compiler/group-by.js 3.56 kB
packages/db/dist/esm/query/compiler/index.js 6.67 kB
packages/db/dist/esm/query/compiler/joins.js 2.5 kB
packages/db/dist/esm/query/compiler/lazy-targets.js 918 B
packages/db/dist/esm/query/compiler/order-by.js 1.74 kB
packages/db/dist/esm/query/compiler/select.js 1.4 kB
packages/db/dist/esm/query/effect.js 4.77 kB
packages/db/dist/esm/query/expression-helpers.js 1.43 kB
packages/db/dist/esm/query/ir.js 1.25 kB
packages/db/dist/esm/query/live-query-collection.js 360 B
packages/db/dist/esm/query/live/collection-config-builder.js 8.34 kB
packages/db/dist/esm/query/live/collection-registry.js 264 B
packages/db/dist/esm/query/live/collection-subscriber.js 1.93 kB
packages/db/dist/esm/query/live/internal.js 145 B
packages/db/dist/esm/query/live/utils.js 1.81 kB
packages/db/dist/esm/query/optimizer.js 2.92 kB
packages/db/dist/esm/query/predicate-utils.js 2.97 kB
packages/db/dist/esm/query/query-once.js 359 B
packages/db/dist/esm/query/subset-dedupe.js 960 B
packages/db/dist/esm/scheduler.js 1.3 kB
packages/db/dist/esm/SortedMap.js 1.3 kB
packages/db/dist/esm/strategies/debounceStrategy.js 247 B
packages/db/dist/esm/strategies/queueStrategy.js 428 B
packages/db/dist/esm/strategies/throttleStrategy.js 246 B
packages/db/dist/esm/transactions.js 3.02 kB
packages/db/dist/esm/utils.js 927 B
packages/db/dist/esm/utils/array-utils.js 273 B
packages/db/dist/esm/utils/browser-polyfills.js 304 B
packages/db/dist/esm/utils/btree.js 5.61 kB
packages/db/dist/esm/utils/comparison.js 1.05 kB
packages/db/dist/esm/utils/cursor.js 457 B
packages/db/dist/esm/utils/index-optimization.js 1.54 kB
packages/db/dist/esm/utils/type-guards.js 157 B
packages/db/dist/esm/virtual-props.js 360 B

compressed-size-action::db-package-size

@github-actions

github-actions Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 4.24 kB

ℹ️ View Unchanged
Filename Size
packages/react-db/dist/esm/index.js 249 B
packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.32 kB
packages/react-db/dist/esm/useLiveQuery.js 1.34 kB
packages/react-db/dist/esm/useLiveQueryEffect.js 355 B
packages/react-db/dist/esm/useLiveSuspenseQuery.js 567 B
packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​playwright/​test@​1.60.010010010099100

View full report

@grrowl

grrowl commented Jun 10, 2026

Copy link
Copy Markdown

You may be interested in our post-implementation report in grrowl/tanstack-do-db-collection#2 (comment) — it's slop but describes some of our sync layer (single websocket and sequence over multiple collections on a single Durable Object) and approach to implementing SSR support.

No major worries in the design; There's edge cases (3, 4) where a row changes between SSR query and later client connection catch-up, but might be satisfied by future canonical collection implementation pattern or docs. Broadly the feedback is it's nice, it works, and works in testing and under contrived edge cases.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants