Packages

@reduxjs/toolkit

2.13.0 · 29 Sep 2026MIT45.8M / weekRepositoryHomepagenpmAtom feed

Your version

2.13.0

latest29 Sep 2026Where it was published

In short

1 new15 fixed17 changed4 internal

Release note

This feature release updates our build tooling to TSDown and PNPM, adds official TypeScript 7 support, and includes a long list of bugfixes across RTK Query, createAsyncThunk, createEntityAdapter, and combineSlices.

Changelog

Build Tooling Updates

We've fully modernizing modernized our build tooling across all of the Redux repos. That included switching from Yarn to PNPM, ESLint to Oxlint, Prettier to Oxfmt, and TSUp to TSDown.

The part that matters for users is that we now build the package with TSDown instead of tsup. The package layout, exports definitions, and exported APIs are all unchanged from 2.12. We've checked the new build with attw, and verified that CJS and ESM entry points load in both dev and prod builds, and that the legacy-esm artifacts still target ES2017. The contents of the bundles do look a bit different (smaller CJS artifacts, slightly different helper output in the legacy-esm files). If you see any behavior differences that look build-related, please file an issue!

This is also our first release published via the updated PNPM-based workflow, still using NPM Trusted Publishing. We've also added pkg.pr.new previews for every commit, so you can try out a PR build before it's released.

Docs Updates

We've shipped a new combined Redux libraries docs site! The core docs site at redux.js.org now contains the docs for all of our libraries: Redux core and usage guides, Redux Toolkit, React Redux, and Reselect. The prior standalone docs sites for RTK, R-R, and Reselect now redirect to their respective sections of the combined docs. We've also done a major cleanup pass on the docs, deduplicating pages that had similarities (like the Next.js or RTK2 migration pages that lived in both the core and RTK docs), and updating outdated content (modernizing example code snippets, deleting dead links, and making RTK and hooks the default patterns shown). The RTK content now lives at redux.js.org/toolkit/ .

TypeScript 7 Support

TS 7.0 (the native Go port) is now out! We fixed the remaining type errors in RTK when checked by TS 7.0 and 7.1, and TS 7.0 is now part of our CI test matrix.

Per our TS support policy of matching DefinitelyTyped's support window, we've also updated our support matrix to TS 5.6+. As always, RTK may still work with earlier versions, but we no longer test against them.

RTK Query Fixes

useQueryState (and thus useQuery) was passing a new inline selector to useSelector on every render, and also reading the store directly during render. The selector is now memoized, and the direct store read is gone. This also fixes a bug where isSuccess could flip from false to true on an unrelated re-render while a query was refetching after an error. isSuccess now correctly stays false in that case.

data now reflects cache updates made via updateQueryData while a refetch is in flight, instead of showing the previous result.

Polling now reads the current cache state when each poll fires, rather than the state at the time the poll was scheduled. This means skipPollingIfUnfocused respects focus loss that happens after scheduling, and polls stop if their cache entry was removed.

We fixed a race where a duplicate query request rejected by the thunk condition could cause queued tag invalidations to run too early and be lost, leaving stale data in the cache.

Tags with falsy ids like 0 now invalidate and clean up correctly.

Lazy query hooks now re-subscribe correctly when effects restart while the hook state is preserved, such as with Fast Refresh or <Activity>.

Infinite queries no longer trigger onQueryStarted when fetching past the end of the list, and the infinite query hook result type now includes the page error flags.

fetchBaseQuery only treats a URL as absolute if it starts with a scheme.

We also fixed an error when rehydrating state for an endpoint name that has no definition.

Other Fixes

createAsyncThunk no longer swallows aborts that happen before the pending action is dispatched, and now correctly sets rejectedWithValue when rejectWithValue is called with a falsy payload.

createEntityAdapter's setAll now keeps the last item when given duplicate IDs, matching setMany. The sorted adapter's updateMany now merges multiple updates for the same ID before applying them.

combineSlices now keeps its internal state proxy cache per instance, so multiple combined reducers no longer interfere with each other.

The immutability check middleware now handles circular references in state.

The dynamic middleware now caches its composed middleware chains when the list of middleware hasn't changed.

What's Changed

  • Additional publishing hardening

  • codegen: Migrate to oazapfts v7

  • combineSlices: Scope stateProxyMap per instance to prevent cross-instance proxy collisions

  • entityAdapter: pre-merge same-ID updates in sorted adapter's updateMany

  • entityAdapter: setAll with duplicate IDs keeps last occurrence (consistent with setMany)

  • query: Reflect cache updates in hook data

  • Don't swallow createAsyncThunk aborts that happen before pending

  • Simplify useRef<T | undefined>(undefined) usages in RTK Query hooks

  • query: Prevent onQueryStarted from triggering at end-of-list

  • types: Fix tsgo (TS 7.0) type errors and re-enable the native-preview CI job

  • Modernize CI examples

  • rtk-query: Only treat a url as absolute when it starts with a scheme

  • Modern Tooling, Part 1: Oxlint

  • Modern Tooling, Part 2: Oxfmt

  • Modern Tooling, Part 3: TSDown and TS6

  • Modern Tooling, Part 4: Vitest type assertions

  • Modern Tooling, Part 5: PNPM

  • Modern Tooling, Part 6: TS7

  • Modern Tooling, Part 7: vendor remark-typescript-tools and update to TS7

  • Modern Tooling, Part 8: Vitest 5

  • Remove redundant RTK Query example projects

  • Type the reducer builder implementation explicitly for TS 7.1

  • toolkit: Flag rejectedWithValue for falsy rejectWithValue payloads

  • Cache unchanged dynamic middleware chains

  • Preserve delayed invalidations after duplicate query rejection

  • Read current query state when scheduled polls fire

  • toolkit: Prevent undefined endpoint reference

  • toolkit: Tag with a falsy id invalidation and cleanup

  • rtk-query: Add infinite query page error flags to hook result type

  • Reinstate lazy queries after preserved effects restart

  • toolkit: Handle circular references in immutableStateInvariantMiddleware

  • Fix TS7 errors and update TS matrix

  • Fix unstable selector reference inside of useQueryState and isSuccess during refetch-after-error