Release 2026-10-19 16:59
Changes
Features
- examples/react/react-native: render 'ReactQueryDevtools' on web through a platform-specific 'Devtools' component (#12093) (3c648e4) by @sukvvon
Fix
- query-core: use supplied options for optimistic fetches (#12131) (f608f93) by @TkDodo
- react, preact: recompute mutation state snapshots (#12117) (1f8d134) by @TkDodo
- examples/svelte/load-more-infinite-scroll: show 'Loading more...' only while fetching the next page instead of on any background refetch (#12121) (ff47e18) by @sukvvon
- examples/svelte/{basic,ssr}: remove the '!postId' check that kept 'Loading...' next to the error for non-numeric post ids (#12119) (9423149) by @sukvvon
- examples/svelte/playground: show 'Saved!' only after a successful mutation instead of while idle (#12114) (ae6266d) by @sukvvon
- examples/svelte/star-wars: throw on non-ok 'fetch' responses in the API functions (#12113) (a8fe350) by @sukvvon
- examples/svelte/optimistic-updates: render 'Background Updating...' instead of a leftover JSX ternary (#12107) (69457a9) by @sukvvon
- examples/svelte/optimistic-updates: throw on non-ok responses so a failed create rolls back the optimistic update (#12106) (306fcda) by @sukvvon
- examples/svelte: throw on non-ok 'fetch' responses in the query and mutation functions (#12109) (d0a1dff) by @sukvvon
- examples/solid/offline: throw the response text on non-ok 'fetch' responses and show query errors in 'List' and 'Detail' (#12099) (7592b2f) by @sukvvon
- examples/solid/astro: throw on non-ok 'fetch' responses and show a pokemon load error through an 'ErrorBoundary' (#12103) (aa77cd7) by @sukvvon
- examples/solid/basic-graphql-request: type post ids as strings and pass the id as a GraphQL variable (#12100) (4ae6447) by @sukvvon
- examples/solid: throw on non-ok 'fetch' responses in the query functions (#12098) (c10c1f7) by @sukvvon
- examples/preact/simple: throw on non-ok 'fetch' responses in the query function (#12097) (c1296c1) by @sukvvon
- examples/react/react-native: register 'NetInfo' through 'onlineManager.setEventListener' so connected devices are not treated as offline while reachability is unknown (#12091) (ddff3a7) by @sukvvon
- examples/react/basic-graphql-request: type post ids as strings and pass the id as a GraphQL variable (#12087) (e39f330) by @sukvvon
- examples/react/algolia: show the search error and use a 'button' that is disabled while fetching for loading more (#12086) (988e69e) by @sukvvon
- examples/react/load-more-infinite-scroll: move the projects query into 'infiniteQueryOptions' in 'src/lib' and type 'nextId' and 'previousId' as nullable (#12085) (0fba30f) by @sukvvon
- examples/react/pagination: share the projects query with 'queryOptions' in 'src/lib' so the next page prefetch respects 'staleTime' (#12084) (7328d02) by @sukvvon
- examples/react/playground: show 'Saved!' only after a successful mutation instead of while idle (#12083) (d338489) by @sukvvon
- examples/react/offline: show query errors in 'List' and 'Detail' and remove the 'MovieError' element that 'react-location' never renders (#12082) (f0dcdca) by @sukvvon
- examples/react/nextjs-app-optimistic-updates: stream the prefetched todos with 'useSuspenseQuery' and a 'React.Suspense' boundary (#12081) (3ff2ec1) by @sukvvon
- examples/react/nextjs: set a default 'staleTime' so the statically generated posts are not refetched right after hydration (#12077) (cd9e573) by @sukvvon
- examples/react/prefetching: show the error instead of an empty list or blank details when fetching characters fails (#12075) (daf7444) by @sukvvon
- examples/react/nextjs: show the error in 'PostList' instead of an empty list when fetching posts fails (#12074) (19ad6d7) by @sukvvon
Refactor
- examples/svelte/optimistic-updates: move the fetchers into 'src/lib/api.ts' and share the todos query with 'queryOptions' (#12124) (959f65e) by @sukvvon
- examples/svelte/load-more-infinite-scroll: type the planets response and move the query into 'src/lib/api.ts' with 'infiniteQueryOptions' (#12123) (2653d67) by @sukvvon
- examples/svelte/optimistic-updates: infer the 'onError' parameter types instead of 'any' and rename 'context' to 'onMutateResult' (#12120) (9e6e51c) by @sukvvon
- examples/svelte/star-wars: type the API responses and share the queries with 'queryOptions' (#12116) (adb932e) by @sukvvon
- examples/svelte/ssr: read the cached post with 'postQueryOptions(id).queryKey' instead of a hard-coded key (#12112) (3119e0c) by @sukvvon
- examples/svelte/auto-refetching: move the fetchers into 'src/lib/api.ts' and share the todos query with 'queryOptions' (#12111) (86c0118) by @sukvvon
- examples/svelte/basic: share the post queries with 'queryOptions' in 'src/lib/queries.ts' (#12110) (d8ab863) by @sukvvon
- examples/solid/default-query-function: type the posts with a 'Post' type instead of 'any' (#12105) (2e86aff) by @sukvvon
- examples/solid/basic: remove the always-true 'enabled' and the always-false '!props.postId' check in 'Post' (#12101) (f9d7ec0) by @sukvvon
- examples/solid/astro: type the pokemon responses and move the queries into 'src/lib/api.ts' with 'queryOptions' (#12102) (0e7d125) by @sukvvon
- examples/react/react-native: refetch only active stale queries in 'useRefreshOnFocus' as in the React Native guide (#12092) (85feb09) by @sukvvon
- examples/react/react-native: replace the deprecated 'Paragraph' and 'Title' with 'Text' variants from 'react-native-paper' (#12094) (a8eeff3) by @sukvvon
- examples/react/eslint-plugin-demo: rename the 'useApiClient' stub to 'getApiClient' since it is called outside of hooks (#12089) (af1e580) by @sukvvon
- examples/react/basic: remove the always-true 'enabled' and the always-false '!postId' check in 'Post' (#12088) (c57cf55) by @sukvvon
- examples/react/nextjs-app-prefetching: add 'shouldRedactErrors' to the query client as in the advanced SSR guide (#12076) (9d93dc5) by @sukvvon
- examples/react/shadow-dom: type the dogs response and move the query into 'api.ts' with 'queryOptions' (#12072) (2e7c288) by @sukvvon
- examples/react/nextjs-app-optimistic-updates: share the todos query and fetchers with 'queryOptions' (#12071) (0a37fa6) by @sukvvon
- examples/react/prefetching: type the character query and share it with 'queryOptions' (#12070) (5b7f490) by @sukvvon
- examples/react/star-wars: type the API responses and share the queries with 'queryOptions' (#12069) (090fb4a) by @sukvvon
- examples/react/rick-morty: type the API responses and share the queries with 'queryOptions' (#12068) (256abf4) by @sukvvon
Chore
- examples/react/react-native: replace the removed 'expo eject' script with 'expo prebuild' and drop the deprecated global 'expo-cli' install step (#12096) (de10bb0) by @sukvvon
- examples/react: update '@types/react' and '@types/react-dom' to '^19' in the examples still on '^18' (#12067) (ffb1fbb) by @sukvvon
Packages
- @tanstack/angular-query-experimental@5.104.5
- @tanstack/eslint-plugin-query@5.104.5
- @tanstack/lit-query@0.2.30
- @tanstack/preact-query@5.104.5
- @tanstack/preact-query-devtools@5.104.5
- @tanstack/preact-query-persist-client@5.104.5
- @tanstack/query-async-storage-persister@5.104.5
- @tanstack/query-broadcast-client-experimental@5.104.5
- @tanstack/query-core@5.104.5
- @tanstack/query-devtools@5.104.5
- @tanstack/query-persist-client-core@5.104.5
- @tanstack/query-sync-storage-persister@5.104.5
- @tanstack/react-query@5.104.5
- @tanstack/react-query-devtools@5.104.5
- @tanstack/react-query-next-experimental@5.104.5
- @tanstack/react-query-persist-client@5.104.5
- @tanstack/solid-query@5.104.5
- @tanstack/solid-query-devtools@5.104.5
- @tanstack/solid-query-persist-client@5.104.5
- @tanstack/svelte-query@6.3.5
- @tanstack/svelte-query-devtools@6.3.5
- @tanstack/svelte-query-persist-client@6.3.5
- @tanstack/vue-query@5.104.5
- @tanstack/vue-query-devtools@6.3.5