Release 2026-10-26 09:32
Release 2026-10-26 09:32
Changes
Features
- angular-query-experimental/injectDevtoolsPanel: add the 'theme' and 'hideDisabledQueries' options (#12316) (8f9dfcb30) by @sukvvon
Fix
- angular-query-experimental/withDevtools: forward an unset 'theme' to the devtools so removing it falls back to the theme selected in the devtools Settings menu (#12315) (9e4253766) by @sukvvon
- solid-query-devtools: stop defaulting the 'theme' prop to 'system' so the theme chosen in the devtools settings applies when the prop is omitted (#12310) (f232b75e3) by @sukvvon
- vue-query-devtools: stop defaulting the 'theme' prop to 'system' so the theme chosen in the devtools settings applies when the prop is omitted (#12312) (a282bf807) by @sukvvon
- svelte-query-devtools: stop defaulting the 'theme' prop to 'system' so the theme chosen in the devtools settings applies when the prop is omitted (#12313) (aff30e36b) by @sukvvon
- vue-query/queryClient: infer the data and error types of 'getQueryState' from a tagged query key (#11921) (c5de051d6) by @sukvvon
- examples/lit/pagination: show the error message instead of the stringified error (#12187) (81e6a935a) by @sukvvon
- examples/lit/basic: show the error message instead of the stringified error (#12186) (1ed8158eb) by @sukvvon
- examples/angular/optimistic-updates: throw an 'HttpErrorResponse' from the mock so the failing mutation rolls back in 'onError' (#12173) (35d21b2d1) by @sukvvon
- examples/angular/infinite-query-with-max-pages: disable the previous page button while fetching the previous page instead of the next page (#12167) (c87c0eafb) by @sukvvon
- examples/vue/basic: share the post queries with 'queryOptions' in 'src/api.ts' and mark visited posts from the query cache (#12161) (71fb7632d) by @sukvvon
- examples/vue/dependent-queries: share the post and author queries with 'queryOptions' in 'src/api.ts' and mark visited posts from the query cache (#12162) (ca7af3373) by @sukvvon
- examples/vue/2.7-basic: share the post queries with 'queryOptions' in 'src/api.ts' and mark visited posts from the query cache (#12165) (c83595d0b) by @sukvvon
- examples/vue/2.6-basic: share the post queries with 'queryOptions' in 'src/api.ts' and mark visited posts from the query cache (#12164) (09cc250b5) by @sukvvon
- examples/vue/persister: share the post queries and persisters with 'queryOptions' in 'src/api.ts' and mark visited posts from the query cache (#12163) (582419393) by @sukvvon
- examples/vue: show 'Background Updating...' in the posts list and remove the unused 'refetch' (#12139) (5d67aa2ef) by @sukvvon
- examples/vue/persister: rename the heading from 'Vue Query - Basic' to 'Vue Query - Persister' (#12138) (c00eaa37b) by @sukvvon
- examples/vue/simple: remove the stray quote before the error message (#12134) (a4414a7f5) by @sukvvon
- examples/vue: throw on non-ok 'fetch' responses in the query functions (#12133) (b904739b0) by @sukvvon
Refactor
- examples/react/nextjs-suspense-streaming: move the data layer into 'services/wait' with a query factory (#12384) (772bd1144) by @sukvvon
- examples/{react,solid}/offline: inline 'useMovie' into the 'Detail' component (#12379) (f69600ae6) by @sukvvon
- examples/solid/{basic,basic-graphql-request}: inline 'createPosts' and 'createPost' that only wrap 'useQuery' (#12378) (c007aaf45) by @sukvvon
- examples/react/{basic,basic-graphql-request,eslint-legacy,nextjs,nextjs-suspense-streaming}: inline custom hooks that only wrap 'useQuery' or 'useSuspenseQuery' (#12377) (a52f4e977) by @sukvvon
- examples/angular/{rxjs,devtools-panel}: move the data layer into 'services/{domain}' with a query factory (#12374) (7f86e2389) by @sukvvon
- examples/angular/{pagination,infinite-query-with-max-pages}: move the data layer into 'services/projects' with a query factory (#12373) (6b3d0914b) by @sukvvon
- examples/angular/{auto-refetching,optimistic-updates}: move the data layer into 'services/tasks' with query and mutation factories (#12372) (801ec31b7) by @sukvvon
- examples/angular/query-options-from-a-service: move the data layer into 'services/posts' with a query factory (#12371) (69ea57ba8) by @sukvvon
- examples/angular/{basic,basic-persister,router}: move the data layer into 'services/posts' with a query factory (#12370) (7151c20f6) by @sukvvon
- examples/lit/ssr: move the data layer into 'services/data' with a query factory (#12369) (7ef377534) by @sukvvon
- examples/lit/pagination: move the data layer into 'services/projects' with query and mutation factories (#12368) (15cecf644) by @sukvvon
- examples/lit/basic: move the data layer into 'services/todos' with query and mutation factories (#12367) (55ed71165) by @sukvvon
- examples/svelte/playground: move the data layer into 'services/todos' with query and mutation factories (#12366) (a39a5dc2f) by @sukvvon
- examples/svelte/{auto-refetching,optimistic-updates}: move the data layer into 'services/todos' with query and mutation factories (#12365) (80fdbd469) by @sukvvon
- examples/svelte/ssr: move the data layer into 'services/posts' with a query factory (#12364) (fb2e4c55a) by @sukvvon
- examples/svelte/{basic,load-more-infinite-scroll,star-wars}: move the data layer into 'services/{domain}' with a query factory (#12363) (7d9b15ae7) by @sukvvon
- examples/vue/persister: move the data layer into 'services/posts' with a query factory (#12361) (ff7c51039) by @sukvvon
- examples/vue/nuxt3: move the data layer into 'services/posts' with a query factory (#12362) (f4de8a679) by @sukvvon
- examples/vue/{basic,2.6-basic,2.7-basic,dependent-queries,simple}: move the data layer into 'services/{domain}' with a query factory (#12360) (795ded81e) by @sukvvon
- examples/solid/{astro,solid-start-streaming}: move the data layer into 'services/{domain}' with a query factory (#12359) (1d958595f) by @sukvvon
- examples/solid/offline: move the data layer into 'services/movies' with a query factory (#12358) (cb3c3d5ba) by @sukvvon
- examples/solid/{basic,basic-graphql-request}: move the data layer into 'services/posts' with a query factory (#12357) (239caf964) by @sukvvon
- examples/react/{nextjs-app-optimistic-updates,nextjs-app-prefetching}: move the data layer into 'services/{domain}' with a query factory (#12356) (516b870c9) by @sukvvon
- examples/react/{offline,react-router}: move the data layer into 'services/{domain}' with a query factory (#12355) (db886cee9) by @sukvvon
- examples/react/{auto-refetching,playground}: move the data layer into 'services/todos' with query and mutation factories (#12354) (dce049887) by @sukvvon
- examples/react/{batching,chat,react-native}: move the data layer into 'services/{domain}' with a query factory (#12353) (f99c6e3e4) by @sukvvon
- examples/react/{rick-morty,star-wars}: move the data layer into one 'services/{domain}' folder per resource with a query factory (#12352) (88018e578) by @sukvvon
- examples/react: move the data layer of the pagination and infinite query examples into 'services/{domain}' with a query factory (#12351) (1028a2977) by @sukvvon
- examples/react: move the data layer of the single-domain examples into 'services/{domain}' with a query factory (#12350) (9aafaa9bf) by @sukvvon
- examples/react/basic: move the data layer into 'services/posts' with 'api.ts', 'queries.ts', and 'types.ts' and a query factory (#12349) (a777b6b22) by @sukvvon
- vue-query/utils: type 'isPlainObject' as 'Record<PropertyKey, unknown>' instead of the 'Object' wrapper type, like 'query-core' (#12343) (4f3dba578) by @sukvvon
- angular-query-experimental/injectQueries: remove the unnecessary 'QueryObserverOptions' assertion and its 'oxlint-disable' comment (#12324) (faa41e9c4) by @sukvvon
- lit-query/createQueriesController: rename the per-result 'observer' in 'trackResult' to 'resultObserver' to avoid shadowing (#12291) (1117bdd2d) by @sukvvon
- query-persist-client-core/createPersister: rename the 'filters' option to 'persistFilters' internally to avoid shadowing (#12290) (51e627fb7) by @sukvvon
- examples/lit/pagination: rename the 'onError' 'context' parameter to 'onMutateResult' (#12195) (64d3b15cc) by @sukvvon
- examples/lit/pagination: infer the controller types instead of passing generics that repeat the field types (#12185) (8aea733e1) by @sukvvon
- examples/lit/basic: infer the controller types from the query and mutation functions instead of passing generics (#12184) (45e8a5eef) by @sukvvon
- examples/angular: type the mock interceptor events and bodies as 'unknown' instead of 'any' (#12177) (55fa9595e) by @sukvvon
- examples/angular/{devtools-panel,rxjs,simple}: rename the 'Response' interfaces so they do not shadow the global 'Response' type (#12176) (5106c1b80) by @sukvvon
- examples/angular/infinite-query-with-max-pages: type 'nextId' and 'previousId' as 'number | null' to match the mock response (#12175) (c41eb8d82) by @sukvvon
- examples/angular/basic-persister: use 'output()' instead of '@Output()', remove the unused 'QueryClient', and align the components with the basic example (#12172) (683c86926) by @sukvvon
- examples/angular/optimistic-updates: rename the 'onError' 'context' parameter to 'onMutateResult' and prefix the unused ones (#12174) (48b599fa6) by @sukvvon
- examples/angular/query-options-from-a-service: read the cached post with the service's 'queryKey' instead of an inline key (#12169) (5490375a3) by @sukvvon
- examples/angular/optimistic-updates: remove the unused 'clearMutation' that created a second add mutation (#12168) (4c9c4cf30) by @sukvvon
- examples/angular/basic-persister: make the 'postId' input required and remove the always-true 'enabled' in 'PostComponent' (#12171) (542a134e0) by @sukvvon
- examples/vue/{basic,dependent-queries,persister,simple}: migrate the components to '