Repository navigation
ci: Version Packages - #2217
Open
github-actions[bot] wants to merge 1 commit into
Open
ci: Version Packages#2217github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
Contributor
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
github-actions
Bot
force-pushed
the
changeset-release/main
branch
12 times, most recently
from
October 26, 2026 23:12
8d2d222 to
793f41a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 27, 2026 00:04
793f41a to
59d37ec
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@tanstack/[email protected]
Minor Changes
Collect the helpers the framework adapters share into one adapter layer, exported from
@tanstack/dband marked unstable for external use. It addsidentifyLiveQuery, which checks a prepared query's identity and source Collection IDs for a hook that compares query identity, andbindLiveQueryWindow, the window binding everyuseLiveInfiniteQuerynow uses. The window helpers that binding replaces are no longer exported. (#2235)Add
SourceCollectionIdReuseError, which a mounted hook that compares query identity throws when a different source Collection appears under a Collection ID it already read.Add
rejectLiveQueryInputandreleaseDeferredOnReclaimfor framework hooks. The first releases the sync starts a rejected query deferred and rethrows the rejection. The second releases a render's deferred sync starts when garbage collection reclaims the live query it built, so a render that never commits, because a sibling threw or it suspended, does not keep its sources deferred. Each released source follows its own start policy, sostartSyncImmediate()or another hook can still start it.Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Patch Changes
Garbage collection no longer cleans up a collection while a transaction that touches it is persisting. Cleaning it up dropped the transaction's optimistic rows while its mutation handler still ran, and rejected waits such as Electric's
awaitTxId, so a write could fail after the screen that made it unmounted. ThegcTimedelay now starts again when the last such transaction completes or fails, cancels obsolete queued idle cleanup, and preserves the remaining startup grace. Rolling back a manual transaction that stayed pending preserves the existing deadline. Explicitcleanup()still starts immediately; a transaction that settles afterward no longer restores another transaction's cleared optimistic rows. (#2258)Keep ordered live queries accurate and loading when source work overlaps. A window with
orderByandlimitno longer stops loading, keeps old rows, or holds acquisitions in these cases: a failed or superseded request, a truncate replay, a source change during a repair, or an on-demand joined source. Recovery after a failure uses one full-source read, and a window move whose load succeeded now resolves. (#2194)When an adapter's
unloadSubsetthrows, TanStack DB now reports the error as an uncaught error and continues as if the release succeeded. The error is no longer a subset failure. It does not setlastErrororlastSubsetError, fail a truncate replay, rejectsetWindow(), or dispose an Effect.unsubscribe(),releaseSnapshot(), and Effectdispose()no longer throw or reject with it.The newest
setWindow()call now wins. A pending source recovery that defers two calls no longer lets the older one set the window. A superseded call that succeeds now resolves only after the newest call settles, so awaiting it shows the window that won.Apps without a persisted Collection no longer bundle the persisted initial-render wait. The persistence adapter now supplies the wait, so a typical app is about 230 bytes smaller after gzip. (#2228)
Start the required Collection sync run when an ordinary subscriber follows an abandoned suspended render. Deferred acquisition still starts no idle source sync run or acquisition attempt. (#2229)
Ordinary subscription admission and deferred acquisition resumption throw during cleanup, including automatic GC. Effects created then return disposed handles. Failed setup releases partial ownership, and throwing callbacks cannot prevent healthy observers receiving cleanup status. Subscribers surviving cleanup retain demand for an explicit restart.
SSR captures each reader's rows and Collection status. Hydration preserves that view through browser preloads, runtime errors, sibling commits, and delayed streamed records. Missing records reject when transport ends. Known pending results survive normal record-stream close. A new stream after client cleanup starts independently of prior failures.
Empty loading SSR needs no preload. Rendering rows or readiness requires matching query preparation or explicit source Collection preparation. Streaming Suspense prepares its result. Unsupported preparation throws with guidance. Prepared non-streaming Suspense remains supported. The DbClient query hash includes an infinite query's initial limit and offset.
Apps without
DbClientexclude its SSR implementation. Its API stays unchanged.Svelte roots initialized with
hydrate()must sethydratingonDbProvider. Nested providers inherit it. Each provider clears initial hydration after mount so new children read live rows.@tanstack/[email protected]
Minor Changes
Reloaded persisted collections now read their rows before they write a leader election term. A collection still takes its leader lock when it subscribes, but it reserves its durable term only after the database work already queued on the shared scheduler has settled, or as soon as something needs a leader during that election: a local write, a follower request, a sync commit during startup, or
ensureLeadership. A need that an earlier leader already served does not let a later takeover skip the wait. A tab that takes over treats the departed leader's route as gone, so a sync commit queued behind one of its reads goes to the new leader and settles without waiting out an RPC timeout. The Electron renderer applies the same rule to its own hydrations. The renderer now has a hydration scope, so its startup runs as one hydration, as a Browser tab's does, and a restart keeps its metadata and row reads in one scope, so a term cannot run between them. (#2219)ensureLeadershipnow resolves when this node becomes leader, keeps its place in the Web Locks queue instead of replacing its lock request, and rejects if the coordinator is disposed.Migration for custom persistence adapters:
runInRegularScopeis now aRegularScope, which must also provideafterQueuedWork(). It resolves once every operation queued or running on the adapter's scheduler at the call has settled. An adapter without a scheduler can return a promise that settles with its running hydrations. A coordinator now rejects an adapter whoserunInRegularScopelacksafterQueuedWorkwithInvalidPersistenceAdapterError.Patch Changes
Fix type inference for schema-free collection options wrapped with persistedCollectionOptions and passed to createCollection. (#2259)
Reject caller utilities that use the reserved local persistence names acceptMutations, getLeadershipState, or forceReloadSubset, instead of silently replacing them.
Apps without a persisted Collection no longer bundle the persisted initial-render wait. The persistence adapter now supplies the wait, so a typical app is about 230 bytes smaller after gzip. (#2228)
Reloads no longer repeat setup that is already complete. A reopened persisted collection checks its tables, indexes, triggers, and bookkeeping rows in the same query that reads its registration, and runs its nine setup statements only when something is missing. Each adapter checks database-wide setup with one query and runs it only when a table, index, or migrated column is missing, instead of about 19 statements on every load. The write-only global
schema_versionrow, which adapters with different schema versions overwrote on every load, is no longer created or written. (#2219)A tab no longer rereads all of a collection's rows after its own write. It used to record the write's stream position before that write's commit notice arrived, so the notice looked like a gap and triggered
pullSinceand a full row scan.Add
SQLiteConnectionClosedError. A browser OPFS connection now rejects requests made after close starts with this error instead ofInvalidPersistedCollectionConfigError. (#2213)Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Minor Changes
@tanstack/preact-db, a Preact adapter withuseLiveQueryanduseLiveInfiniteQuery. Both compare query identity derived from the query IR on each render, require aqueryKeyfor functional query variants, and pass the shared live-query and infinite-query conformance suites. Queries read concrete source Collections;DbProviderand collection descriptors are not supported yet. (#2235)Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Minor Changes
Breaking (1.0): a live query whose IR has no stable identity, such as one using
fn.where,fn.select, orfn.having, now throwsUnhashableQueryIRErrorunless it supplies a nonemptyqueryKey. It previously warned in development and kept its first compilation. An emptyqueryKeynow counts as none, as it already did for aDbClientpreload, so a hook and a preload agree on the query's identity. A dependency array does not replacequeryKey: in that mode the hook checks identity and claims source Collection IDs each time it binds a live query, including one thatuseLiveSuspenseQuerytakes from its cache. A reused source Collection ID now throwsSourceCollectionIdReuseError. (#2235)A rejected render now releases every sync start it deferred for a
DbClientdescriptor, so a later hook orstartSyncImmediate()can start that source. A render that never commits, because a sibling threw or it suspended, releases them when its live query is reclaimed.Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Production builds no longer include the development warnings of
useLiveQuery. A typical app's bundle is about 1.6 kB smaller before compression and 0.66 kB smaller after gzip. (#2227)Start the required Collection sync run when an ordinary subscriber follows an abandoned suspended render. Deferred acquisition still starts no idle source sync run or acquisition attempt. (#2229)
Ordinary subscription admission and deferred acquisition resumption throw during cleanup, including automatic GC. Effects created then return disposed handles. Failed setup releases partial ownership, and throwing callbacks cannot prevent healthy observers receiving cleanup status. Subscribers surviving cleanup retain demand for an explicit restart.
SSR captures each reader's rows and Collection status. Hydration preserves that view through browser preloads, runtime errors, sibling commits, and delayed streamed records. Missing records reject when transport ends. Known pending results survive normal record-stream close. A new stream after client cleanup starts independently of prior failures.
Empty loading SSR needs no preload. Rendering rows or readiness requires matching query preparation or explicit source Collection preparation. Streaming Suspense prepares its result. Unsupported preparation throws with guidance. Prepared non-streaming Suspense remains supported. The DbClient query hash includes an infinite query's initial limit and offset.
Apps without
DbClientexclude its SSR implementation. Its API stays unchanged.Svelte roots initialized with
hydrate()must sethydratingonDbProvider. Nested providers inherit it. Each provider clears initial hydration after mount so new children read live rows.Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Minor Changes
Breaking (1.0): a
useLiveQuerybacked by aDbClientmatches queries by identity hash, so it now throwsUnhashableQueryIRErrorfor a query without a stable IR identity unless it supplies a nonemptyqueryKey. It previously compiled the query without a hydration key. While such a hook is mounted, a different source Collection under a Collection ID it already read throwsSourceCollectionIdReuseError, and every result property then throws instead of returning the previous query's state. Queries without aDbClientare unchanged. (#2235)A rejected client-backed query now releases every sync start it deferred, so
startSyncImmediate()or another hook can still start that source. A setup that throws after the hook returns releases them when its live query is reclaimed.useLiveInfiniteQuerynow uses the shared window binding from@tanstack/db.Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Start the required Collection sync run when an ordinary subscriber follows an abandoned suspended render. Deferred acquisition still starts no idle source sync run or acquisition attempt. (#2229)
Ordinary subscription admission and deferred acquisition resumption throw during cleanup, including automatic GC. Effects created then return disposed handles. Failed setup releases partial ownership, and throwing callbacks cannot prevent healthy observers receiving cleanup status. Subscribers surviving cleanup retain demand for an explicit restart.
SSR captures each reader's rows and Collection status. Hydration preserves that view through browser preloads, runtime errors, sibling commits, and delayed streamed records. Missing records reject when transport ends. Known pending results survive normal record-stream close. A new stream after client cleanup starts independently of prior failures.
Empty loading SSR needs no preload. Rendering rows or readiness requires matching query preparation or explicit source Collection preparation. Streaming Suspense prepares its result. Unsupported preparation throws with guidance. Prepared non-streaming Suspense remains supported. The DbClient query hash includes an infinite query's initial limit and offset.
Apps without
DbClientexclude its SSR implementation. Its API stays unchanged.Svelte roots initialized with
hydrate()must sethydratingonDbProvider. Nested providers inherit it. Each provider clears initial hydration after mount so new children read live rows.Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
Add
SQLiteConnectionClosedError. A browser OPFS connection now rejects requests made after close starts with this error instead ofInvalidPersistedCollectionConfigError. (#2213)Reject pending OPFS requests when closing the SQLite connection, including when the worker reports a close error. Close now stops accepting requests when it starts, and concurrent
close()calls share one outcome. The OPFS worker handles one request at a time, so close waits for earlier queries instead of failing while one waits for the OPFS access handle. (#2213)Updated dependencies [
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
Release the shape stream's visibility listener when a sync run is cleaned up. The Electric client registers a
visibilitychangelistener for eachShapeStream(anAppStatesubscription on React Native, from@electric-sql/client1.5.23) and removes it only inunsubscribeAll(), so aborting the stream left the listener behind, and the listener kept the stream reachable. An app that cleans up and recreates collections, or whose on-demand cache rotates its provider session, gained one retained stream each time. (#2257)Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
Reloaded persisted collections now read their rows before they write a leader election term. A collection still takes its leader lock when it subscribes, but it reserves its durable term only after the database work already queued on the shared scheduler has settled, or as soon as something needs a leader during that election: a local write, a follower request, a sync commit during startup, or
ensureLeadership. A need that an earlier leader already served does not let a later takeover skip the wait. A tab that takes over treats the departed leader's route as gone, so a sync commit queued behind one of its reads goes to the new leader and settles without waiting out an RPC timeout. The Electron renderer applies the same rule to its own hydrations. The renderer now has a hydration scope, so its startup runs as one hydration, as a Browser tab's does, and a restart keeps its metadata and row reads in one scope, so a term cannot run between them. (#2219)ensureLeadershipnow resolves when this node becomes leader, keeps its place in the Web Locks queue instead of replacing its lock request, and rejects if the coordinator is disposed.Migration for custom persistence adapters:
runInRegularScopeis now aRegularScope, which must also provideafterQueuedWork(). It resolves once every operation queued or running on the adapter's scheduler at the call has settled. An adapter without a scheduler can return a promise that settles with its running hydrations. A coordinator now rejects an adapter whoserunInRegularScopelacksafterQueuedWorkwithInvalidPersistenceAdapterError.Updated dependencies [
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
Start the required Collection sync run when an ordinary subscriber follows an abandoned suspended render. Deferred acquisition still starts no idle source sync run or acquisition attempt. (#2229)
Ordinary subscription admission and deferred acquisition resumption throw during cleanup, including automatic GC. Effects created then return disposed handles. Failed setup releases partial ownership, and throwing callbacks cannot prevent healthy observers receiving cleanup status. Subscribers surviving cleanup retain demand for an explicit restart.
SSR captures each reader's rows and Collection status. Hydration preserves that view through browser preloads, runtime errors, sibling commits, and delayed streamed records. Missing records reject when transport ends. Known pending results survive normal record-stream close. A new stream after client cleanup starts independently of prior failures.
Empty loading SSR needs no preload. Rendering rows or readiness requires matching query preparation or explicit source Collection preparation. Streaming Suspense prepares its result. Unsupported preparation throws with guidance. Prepared non-streaming Suspense remains supported. The DbClient query hash includes an infinite query's initial limit and offset.
Apps without
DbClientexclude its SSR implementation. Its API stays unchanged.Svelte roots initialized with
hydrate()must sethydratingonDbProvider. Nested providers inherit it. Each provider clears initial hydration after mount so new children read live rows.@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
45c3329,205ab71,37b8fc2,205ab71,b052e91]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
Breaking: grouping, includes, and pooling are now opt-in. An app bundles an operator's code only when it imports the value for that operator. Joins do not change. A typical app is about 8 kB smaller after gzip. This app has a query collection, a filtered live query, and React
useLiveQuery. (#2232)include(),toArray(), ormaterialize(). Changeissues: q.from(...)inselect()toissues: include(q.from(...)). A subquery inselect()without one of these throwsIncludeOperatorRequiredError.count()need no change. AgroupBywith no aggregate takesgroupKeys():.groupBy(groupKeys(({ todo }) => todo.status)). Without it, the query throwsGroupingOperatorRequiredError.pool: pooledLiveQueriesin the hook's query config:useLiveQuery({ query, pool: pooledLiveQueries }). Results do not change. Angular's{ params, query }form takespoolthe same way. Any otherpoolvalue, such as the old boolean, throwsInvalidPoolOptionError, also for a disabled query. For adapter authors: thepooloption ofresolveLiveQueryValueis nowpooledLiveQueriesorfalse, not a boolean. An adapter that readspoolfrom its own options checks it withconfigPoolfirst.IR.AggregatetakesgroupingCompileras its third argument.IR.IncludesSubquerytakesincludesRuntimeas its fifth argument, beforeparentFilters. Import both from@tanstack/db. IR without them throwsGroupingOperatorRequiredErrororIncludeOperatorRequiredErrorwhen it compiles, unless another aggregate orgroupKeys()in the query supplies the grouping compiler. Queries that the query builder builds need no change.groupKeys()now throwsGroupingOperatorRequiredError. Before, React and Preact kept the grouped query.useLiveQueryno longer shows the rows of the previous query.useLiveInfiniteQuerynow uses the shared window binding from@tanstack/db. A window collection it creates starts syncing when the query compiles, as in the other adapters, and an update that changes nothing keeps the current controller. (#2235)Updated dependencies [
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:[email protected]
Patch Changes
205ab71,6c1ca8f,3920346,5649a07,1640de8]:[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,3920346,5649a07,1640de8]:[email protected]
Patch Changes
5649a07,b8d8ee0,7538afd,6c1ca8f,30175be,37b8fc2,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
6c1ca8f,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
6c1ca8f,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
b8d8ee0,6c1ca8f,3920346,5649a07,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]:@tanstack/[email protected]
Patch Changes
5649a07,7538afd,6c1ca8f,30175be,37b8fc2,1640de8]: