NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #857 most downloaded on npm
The framework agnostic core that powers TanStack Query
Last release 2 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Most releases are documented
notes for 46 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
442 releases · first in 2022
One column per quarter.
@tanstack/query-persist-client-core@5.104.1
ec060b6]:
Updated dependencies [ 5279b05 ]:
Patch Changes Updated dependencies []: @tanstack/query-core@5.103.3
@tanstack/query-persist-client-core@5.103.2
8a28904]:
Updated dependencies [ 8330b2f , 3212966 ]:
Updated dependencies [ e57f816 , fdae2ce , a1119e5 , cbf77bf ]:
e57f816 - Export the FocusManager, OnlineManager, and TimeoutManager types so their methods appear in the generated reference docs.Patch Changes Updated dependencies []: @tanstack/query-core@5.102.8
Patch Changes Updated dependencies []: @tanstack/query-core@5.102.7
Patch Changes Updated dependencies []: @tanstack/query-core@5.102.6
Updated dependencies [ 578e5c2 ]:
578e5c2]:
### Patch Changes - #11293 `a05df6a` - Avoid scheduling stale timeouts for disabled query observers.
Patch Changes Updated dependencies []: @tanstack/query-core@5.102.3
### Patch Changes - #11263 `80fbf73` - Export MutationCacheConfig and QueryCacheConfig.
### Patch Changes - #11260 `134890d` - Type hydration input as a partial dehydrated state so omitted mutation and query collections are supported.
### Minor Changes - #10658 `c6fc17c` - add query and infiniteQuery methods, deprecate old imperative methods ### Patch Changes - #11161 `34f7cee` - fi
#11161 34f7cee - fix(query-core): clear a stale select error when the observer switches to a query without data, and reset isPlaceholderData on select-error results to match the declared result types, so a previous query's select error no longer leaks into the new result
#11253 b4368c4 - Improve hydration performance by skipping no-op data transforms and default error-redaction callbacks.
Export dehydrateQuery.
#11214 5bb089d - Reduce observer churn overhead by removing observers in place instead of copying the observer list for every unsubscribe.
#11011 ba4650c - fix(query-core): reset isPlaceholderData when select throws on placeholder data
#11224 294d4e6 - Fix queryOptions and infiniteQueryOptions return types so exported inferred options can be emitted in declaration files without leaking internal data tag symbols.
#11225 1f631b3 - Skip unused result tracking when notifying useQueries listeners without a combine function.
#11215 01a02bf - Avoid repeatedly synchronizing the same tracked property across all observers in useQueries.
#11172 18c1c1e - Reattach MutationObserver to its current mutation when a listener subscribes again, so a useMutation result no longer stays pending after React tears down and re-establishes the subscription mid-mutation.
#11128 5448063 - Ignore a retained pendingThenable settlement callback invoked after the thenable has settled. Holding a reference to resolve/reject and calling it later used to overwrite status and reason even though the underlying promise had already settled, leaving the thenable advertising a state that disagreed with its value.
#8737 2215bb0 - fix: make mutation variables optional when undefined extends TVariables
#11221 1ef4208 - Remove experimental render-time prefetching and the promise property from query results.
#11218 5981771 - Release a mutation's retryer once its execution settles, so the settled promise no longer keeps that mutation's result, variables and context in memory for as long as the mutation cache retains it.
#11163 4a9bef6 - Release a query's retryer once its fetch settles, so the settled promise no longer keeps that fetch's raw result in memory alongside the structurally shared state.data (or after the query is reset or removed).
#11036 bef4bc7 - Resolve suspense when query data is set programmatically via setQueryData or streamedQuery. Previously, fetchOptimistic returned only the fetch promise, which left the Suspense boundary stuck until the queryFn completed — even when data already existed in the cache. The fix uses Promise.race with a cache subscriber to release suspense as soon as data becomes available.
#11234 9656dc4 - Notify every query observer when another observer unsubscribes synchronously during the same query update.
#11211 326aaf1 - fix: resetQueries now preserves the queries matched before query.reset() changes their state.
#11065 3e83601 - Memoize falsy combine results when the function and query results are unchanged.
### Patch Changes - Updated dependencies \[]: - @tanstack/query-core@5.101.4
Updated dependencies \[`7e3c822`]:
7e3c822]:
7e3c822]:
### Patch Changes - Updated dependencies \[]: - @tanstack/query-core@5.101.2
#10813 f5bf180 - fix(query-devtools/PiPContext): reset 'pip_open' in 'localStore' from 'closePipWindow' so the auto-open createEffect does not reopen the window after a programmatic close
#10812 25cdd97 - fix(query-devtools/utils): make 'last updated' sort return 0 for queries with equal 'dataUpdatedAt' to follow the standard comparator contract
#10815 ecd89c8 - fix(query-devtools/utils): scope the 'setupStyleSheet' dedup check to the target so a 'shadowDOMTarget' still receives its own '#_goober' style tag when 'document.head' already has one
#10811 01c7634 - fix(query-devtools/Devtools): correct the Theme sub-trigger className from 'position' to 'theme'
#10736 49012db - setupStyleSheet now sets window.__nonce__ when a styleNonce is provided.
The devtools use goober for CSS-in-JS, which reads window.__nonce__ every time it creates or accesses its style element. Without this, goober overwrote the nonce with undefined, causing CSP violations even when styleNonce was correctly passed to <ReactQueryDevtools>.
Updated dependencies \[`9eff92e`]:
9eff92e]:
9eff92e]:
### Patch Changes - #10826 `1348095` - Replace deprecated isServer with environmentManager.isServer() - Updated dependencies \[]: - @tanstack/query-co
### Patch Changes - Updated dependencies \[]: - @tanstack/query-core@5.100.14
fix(react-query): do not go into optimistic fetching state when not subscribed (#10759)
Updated dependencies []:
ed20b6d]:
ed20b6d]:
ed20b6d]:
fix(query-core): drop the custom NoInfer re-export and rely on TypeScript's built-in NoInfer (TS ≥ 5.4) so NoInfer stays assignable to X[K] in generic
d423168]:
d423168]:
### Patch Changes - Updated dependencies \[]: - @tanstack/query-core@5.100.12
fix(vue-query): allow reactive and getter values as queryKey property in queryOptions
fix(vue-query): allow reactive and getter values as queryKey property in queryOptions (#10530)
This fixes a regression introduced in #10452 where queryOptions only accepted plain arrays for the queryKey property, but not computed refs, Ref values, or getter functions. The related fix in #10465 only covered the enabled property.
Now the queryKey property in queryOptions accepts the same reactive forms as enabled:
QueryKey arraysRef<QueryKey>ComputedRef<QueryKey>() => QueryKey (getter)Updated dependencies []:
Nothing published for this version
Updated dependencies \[`fcee7bd`]:
fcee7bd]:
3d21cac]:
3d21cac]:
fcee7bd]:
setOnClose callback type to return void. (#10607)persister's TQueryKey in NoInfer so that the persister slot no longer contributes to TQueryKey inference. Follow-up to #10510, which removed NoInfer on all three persister generics. Preserving NoInfer<TQueryKey> keeps that fix's benefit for TQueryFnData while preventing TQueryKey from widening to the augmented constraint when Register.queryKey is narrowed — which made DataTag-branded wrapper returns un-assignable in contravariant slots. (#10601)3d21cac]:
@tanstack/query-persist-client-core@5.100.8
refactor(preact-query-devtools): replace deprecated 'JSX.CSSProperties' with 'CSSProperties' from Preact namespace (#10622)
Updated dependencies []:
### Patch Changes - Updated dependencies \[]: - @tanstack/query-core@5.100.7
Nothing published for this version
fix(core): propagate AbortSignal reason in infinite queries (`a53ef97`)
a53ef97)Nothing published for this version
fix(suspense): skip calling combine when queries would suspend
fix(query-core): allow persister to contribute to TQueryFnData inference so a queryFn that declares a parameter no longer produces a spurious overload
fix(query-core): allow persister to contribute to TQueryFnData inference so a queryFn that declares a parameter no longer produces a spurious overload mismatch against a typed persister (#7842). (#10510)
fix: preserve infinite query behavior during SSR hydration (#8825) (#10074)
ref(core): remove leftover setStateOptions (#10574)
Fix bugs where hydrating queries with promises that had already resolved could cause queries to briefly and incorrectly show as pending/fetching
feat(query-core): accept callback function for retryOnMount
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
fix(query-core): use explicit undefined check for timer IDs so that custom TimeoutProviders returning 0 as a valid timer ID are properly cleared
undefined check for timer IDs so that custom TimeoutProviders returning 0 as a valid timer ID are properly cleared (#10401)Nothing published for this version
Nothing published for this version
Nothing published for this version
fix(timeoutManager): make sure NodeJs.Timout doesn't leak
fix(timeoutManager): make sure NodeJs.Timout doesn't leak
Nothing published for this version
fix(\*): resolve issue about excluded build directory
### Patch Changes - chore: fixed version
fix(streamedQuery): maintain error state on reset refetch with initialData defined
### Minor Changes - feat: environmentManager
Fix: onMutate callback now runs synchronously when mutationCache.config.onMutate is not defined
fix stable combine reference not updating when queries change dynamically
Align experimental_prefetchInRender promise rejection with Suspense behavior by only throwing when no data is available.
fix(query-core): replaceEqualDeep max depth
fix useQueries race condition on queries length change
Fix: Always treat existing data as stale when query goes into error state.
Fix streamedQuery reducer being called twice
Made context.signal consume aware with streamedQuery
### Patch Changes - fix: update react and nextJs
Prevent infinite render loops when useSuspenseQueries has duplicate queryKeys
Your coding agent can read these notes before it upgrades. Set up the MCP server →