1 hours ago
virtual

@tanstack/angular-virtual@6.1.9

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/marko-virtual@3.16.9

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/react-virtual@3.14.23

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/vue-virtual@3.13.49

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/virtual-core@3.19.8

Patch Changes

  • #1340 2343004 - fix(virtual-core): account for scrollMargin when deciding the viewport is at the end
1 hours ago
virtual

@tanstack/svelte-virtual@3.13.49

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/solid-virtual@3.13.50

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
1 hours ago
virtual

@tanstack/lit-virtual@3.15.0

Minor Changes

  • #1334 91c2931 - Add setOptions to VirtualizerController and WindowVirtualizerController so virtualizer options can be updated after construction.

    Previously the controller only accepted options once, in its constructor, so options derived from reactive Lit properties (count, estimateSize, horizontal, …) could never be re-applied. getVirtualizer().setOptions(...) is not a substitute: it replaces options wholesale and drops the controller's onChange wrapper, which is what asks the host to re-render.

    setOptions takes a partial set of options, merges them over the options the controller already holds (skipping undefined, so an omitted value does not wipe a stored one), re-applies the host requestUpdate wrapper around onChange, and flushes the change:

    willUpdate(changed: PropertyValues<this>) {
      if (changed.has('count')) {
        this.virtualizerController.setOptions({ count: this.count })
      }
    }

Patch Changes

  • Updated dependencies [2343004]:
    • @tanstack/virtual-core@3.19.8
4 hours ago
rollup

v4.65.1

4.65.1

2026-10-26

Bug Fixes

  • Ensure tree-shaking also respect Symbol.dispose for async disposal (#6556)

Pull Requests

  • #6556: Fix tree-shaking of disposable resources (@TrickyPi, @lukastaegert)
  • #6595: Update dtolnay/rust-toolchain digest to b725eda (@renovate[bot])
  • #6596: Update minor/patch updates (@renovate[bot])
  • #6598: Lock file maintenance (@renovate[bot], @lukastaegert)
5 hours ago
react-query

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 '<script setup>' (#12144) (243148eec) by @sukvvon
  • examples/vue: type the 'isVisited' prop with 'PropType' and the visited posts set with 'Set' (#12143) (c76c0ffe4) by @sukvvon
  • examples/vue: declare the example types with 'type' in 'types.ts' instead of 'types.d.ts' (#12141) (d9e7648b9) by @sukvvon
  • examples/vue/persister: remove the commented-out 'staleTime' from the query client config (#12142) (5aefeb72f) by @sukvvon
  • examples/svelte/playground: edit the 'initialFilter' prop directly in 'TodosList' to remove the 'state_referenced_locally' warning (#12125) (46744e5b0) by @sukvvon
  • examples,docs: use 'TanStack/query' consistently in the GitHub API URLs (#12137) (db22bfc51) by @sukvvon

Chore

  • deps: update '@typescript-eslint/*' to '^8.72.0' in the catalog and examples (#12388) (06d1705a5) by @sukvvon
  • examples/*/eslint.config: use 'flat/recommended-strict' from '@tanstack/eslint-plugin-query' (#12385) (2b5b6417f) by @sukvvon
  • react-query/{useQuery,useInfiniteQuery}: remove the unused '@eslint-react/no-nested-component-definitions' disable and explain the remaining false positive (#12344) (d7c0418f8) by @sukvvon
  • react-query/{HydrationBoundary,utils}: explain why 'react-hooks-js/refs' and 'react-hooks-js/set-state-in-effect' are disabled (#12342) (aa3e26b4f) by @sukvvon
  • *: explain why 'vitest-js/valid-expect' is disabled for the 'expectTypeOf(ctx.queryKey)' checks in the 'useQueries' type tests (#12332) (1eed9d9ef) by @sukvvon
  • query-core/query: explain why 'typescript/no-unnecessary-condition' is disabled for the 'state' check in 'setOptions' (#12326) (a155bb8c7) by @sukvvon
  • eslint-plugin-query/detect-react-query-imports: explain why 'typescript/no-unnecessary-condition' is disabled for the 'importKind' check (#12327) (0c5ec0695) by @sukvvon
  • lit-query/{QueryClientProvider,BaseController}: explain why 'typescript/no-unnecessary-condition' is disabled for the 'client' checks (#12328) (016b83ecc) by @sukvvon
  • angular-query-experimental/createBaseQuery: explain why 'typescript/no-unnecessary-type-assertion' is disabled for the 'refetch' wrapper (#12329) (42ae5caee) by @sukvvon
  • deps: upgrade vitest to v5 (#12317) (4a7386a47) by @DogPawHat
  • vue-query-devtools/package.json: restore the 'test:lib' script removed in the Vite 8 update (#12307) (7a10cda3e) by @sukvvon
  • oxlint.config: add 'netinfo' to the cspell words (#12299) (65801313d) by @sukvvon
  • preact-query/utils: disable 'react/exhaustive-deps' for the stable '_instance' to keep the upstream 'useSyncExternalStore' (#12289) (2de1d1e15) by @sukvvon
  • scripts/create-github-release: use the 'node:' protocol for 'fs' and sort the imported members (#12285) (4071cd526) by @sukvvon
  • oxlint.config: remove the 'vitest/no-standalone-expect' override left over from the removed 'itIf' helper (#12284) (75e64b5a1) by @sukvvon
  • {react-query,preact-query,query-broadcast-client-experimental}/vite.config: remove the CI-only 'retry' (#12279) (84332ded7) by @sukvvon
  • svelte-query-persist-client/vite.config: enable 'coverage' in CI like the other packages (#12275) (b2246c2bb) by @sukvvon
  • oxlint.config: enable 'no-debugging-utils', 'no-dom-import', 'no-manual-cleanup' and 'no-render-in-lifecycle' from 'eslint-plugin-testing-library' (#12273) (b923947be) by @sukvvon
  • oxlint.config: add 'eslint-plugin-testing-library' with its DOM rules and query present elements with 'getBy' (#12269) (bb41f83ca) by @sukvvon
  • oxlint.config: add 'eslint-plugin-jest-dom' with its recommended rules and assert DOM presence with 'toBeInTheDocument' (#12268) (670fc2817) by @sukvvon
  • oxlint.config: enable 'vitest/consistent-each-for' to keep parameterized tests on '.each' (#12267) (496c4ac54) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-lowercase-title' for test titles (#12266) (883d35eb2) by @sukvvon
  • oxlint.config: enable 'vitest/require-top-level-describe' and move top-level tests and hooks into a 'describe' (#12265) (f5fc7ac96) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-after-all-blocks' (#12263) (90b5acbe0) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-describe-blocks' and separate describe blocks with a blank line (#12262) (6aaa0cb12) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-after-each-blocks' and separate 'afterEach' with a blank line (#12261) (62592ae99) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-before-each-blocks' and separate 'beforeEach' with a blank line (#12260) (28a854017) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-before-all-blocks' and separate 'beforeAll' with a blank line (#12259) (4a6264e8a) by @sukvvon
  • oxlint.config: enable 'vitest-js/padding-around-test-blocks' and separate test blocks with a blank line (#12258) (7cafffdbb) by @sukvvon
  • oxlint.config: enable 'vitest-js/no-conditional-in-test' outside type tests (#12256) (914eef777) by @sukvvon
  • oxlint.config: enable 'vitest-js/prefer-vi-mocked' (#12255) (d8fbf7ee4) by @sukvvon
  • oxlint.config: enable 'vitest/consistent-test-filename' (#12253) (06d260788) by @sukvvon
  • oxlint.config: enable 'vitest/require-mock-type-parameters' and type the mock functions (#12251) (07bdb6bbe) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-strict-equal' and assert with 'toStrictEqual' (#12250) (5c7b9dbbc) by @sukvvon
  • oxlint.config: enable 'vitest/require-hook' and move setup code into hooks or tests (#12249) (1616702eb) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-mock-return-shorthand' and use 'mockReturnValue' or 'vi.fn(implementation)' (#12248) (ada9a5eff) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-to-be' and assert primitive values with 'toBe', 'toBeNull', 'toBeUndefined' and 'toBeDefined' (#12247) (5ba86a672) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-to-have-length' and assert lengths with 'toHaveLength' (#12246) (4dc1af982) by @sukvvon
  • oxlint.config: enable the vitest style rules that already pass without violations (#12245) (cdb344b07) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-import-in-mock' and type the module mocks against the real modules (#12243) (c1dc50c36) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-expect-resolves' and assert resolved values with 'resolves' (#12244) (03b3f9029) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-mock-promise-shorthand' and use 'mockResolvedValue' and 'mockRejectedValue' (#12242) (5393cdc26) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-spy-on' and spy on 'query.fetch' instead of overwriting it (#12241) (3afe75293) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-called-times' and replace 'toHaveBeenCalledOnce' with 'toHaveBeenCalledTimes(1)' (#12240) (9648f0e3d) by @sukvvon
  • oxlint.config: enable 'vitest/no-alias-methods' and replace 'toBeCalledWith' with 'toHaveBeenCalledWith' (#12239) (52ebbb3c7) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-called-with' and assert the call arguments with 'toHaveBeenCalledWith' (#12237) (22d9966fb) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-expect-type-of' and assert the 'staleTime' type with 'toBeTypeOf' (#12236) (25ed6ae41) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-to-contain' and assert array membership with 'toContain' (#12235) (c51b85195) by @sukvvon
  • oxlint.config: enable 'vitest/prefer-equality-matcher' and compare the value directly with 'toBe' (#12234) (af28a1b46) by @sukvvon
  • oxlint.config: enable 'vitest/require-to-throw-message' and assert the expected error messages in 'toThrow' (#12233) (7e7a1c915) by @sukvvon
  • oxlint.config: enable vitest rules that already pass without violations (#12232) (1667b2461) by @sukvvon
  • examples/vue/persister/package.json: remove the unused '@tanstack/query-core' and '@tanstack/query-sync-storage-persister' dependencies (#12146) (3c540d375) by @sukvvon
  • examples/vue/{2.6-basic,2.7-basic}: add a flat config and run 'test:eslint' (#12136) (f7c89b64b) by @sukvvon

Packages

  • @tanstack/angular-query-experimental@5.105.0
  • @tanstack/eslint-plugin-query@5.105.0
  • @tanstack/lit-query@0.2.31
  • @tanstack/preact-query@5.105.0
  • @tanstack/preact-query-devtools@5.105.0
  • @tanstack/preact-query-persist-client@5.105.0
  • @tanstack/query-async-storage-persister@5.105.0
  • @tanstack/query-broadcast-client-experimental@5.105.0
  • @tanstack/query-core@5.105.0
  • @tanstack/query-devtools@5.105.0
  • @tanstack/query-persist-client-core@5.105.0
  • @tanstack/query-sync-storage-persister@5.105.0
  • @tanstack/react-query@5.105.0
  • @tanstack/react-query-devtools@5.105.0
  • @tanstack/react-query-next-experimental@5.105.0
  • @tanstack/react-query-persist-client@5.105.0
  • @tanstack/solid-query@5.105.0
  • @tanstack/solid-query-devtools@5.105.0
  • @tanstack/solid-query-persist-client@5.105.0
  • @tanstack/svelte-query@6.3.6
  • @tanstack/svelte-query-devtools@6.3.6
  • @tanstack/svelte-query-persist-client@6.3.6
  • @tanstack/vue-query@5.105.0
  • @tanstack/vue-query-devtools@6.3.6