CLI tool
reduxjs/react-redux avatar
reduxjs/react-redux

React Redux 9.3: the official React bindings for Redux

Official React bindings for Redux

23,427 stars3,324 forksTypeScriptMIT

At a glance

What is it?
React Redux is the official bridge between a Redux store and a React component tree. This covers what version 9 requires, how Provider and the hooks move store state into components, and where the library stops being the right tool.
Who is it for?
Adopt React Redux when you already have a Redux store and need React components to read from it and dispatch to it, and you are on React 18 or later with Redux 5. Do not adopt it to solve local component state, and do not adopt it if you are still on React 17, because the peer dependency range starts at ^18.0.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What React Redux is for, and who should install it

Redux keeps application state in a single store outside React. React Redux is the piece that lets React components subscribe to that store and dispatch actions into it without every component importing the store directly. The README describes it as the official React bindings for Redux, and the package name is react-redux on npm.

The intended user is a team that has already decided on Redux, usually through Redux Toolkit, and now needs the React side wired up. It is not a state manager on its own. Installing react-redux without Redux gives you a Provider with nothing to provide, which is why the README says you will also need to install Redux and set up a store.

If your problem is one form's open/closed flag or a modal's visibility, this library is the wrong size. It exists for state that multiple distant components read and write, where passing props down the tree has stopped being workable.

How Provider and the hooks move store state into components

The mechanism is a React context. Provider receives your store as a prop and places it on that context. Any component below it can then reach the store through the context rather than through an import, which is what makes the store swappable in tests.

The hooks read from that context. useSelector takes a selector function, runs it against the current state, and subscribes the component to the store so it re-renders when the selected value changes. useDispatch returns the store's dispatch function. The package.json in the repository shows the library ships in several formats: a CommonJS build at dist/cjs/index.js, an ESM build at dist/react-redux.mjs, a React Native build, and a separate dist/rsc.mjs behind the react-server export condition.

That last entry point matters. React Server Components cannot use hooks or context, so the react-server condition resolves to a different module rather than the same one. If your bundler does not understand that condition, you get the client build in a server context, and the failure appears at render time rather than at install time.

Installing react-redux and rendering a first connected component

The README gives two starting points. For a new app it points at the official Redux+TS template for Vite, or at Next.js's with-redux example, both of which already have Redux Toolkit and React Redux configured. For an existing React app, you install the package as a dependency, and the README gives this command for npm.

bash
npm install react-redux

The README also gives the Yarn form of the same step.

bash
yarn add react-redux

The README notes that React Redux 9.0 requires React 18 or later, and the package.json peer dependencies confirm the ranges: react ^18.0 || ^19, @types/react ^18.2.25 || ^19, and redux ^5.0.0. A React 17 project will get a peer dependency warning and should not expect the library to work.

Once installed, the store goes into Provider at the top of the tree, and components below it use the hooks. The README does not include a component example, so what you should expect is this: a component calling useSelector renders the selected value, and a component calling useDispatch can dispatch an action into the store. If the value never updates, the usual cause is a store that was not passed to Provider, or a Provider placed below the component that needs it.

The connect API is still shipped, and that is a cost

React Redux still exports connect, a higher-order component that wraps a component and injects state and dispatch as props. It predates hooks and remains in the package for code that has not migrated. Both connect and the hooks resolve the same context, so a codebase can mix them.

The cost is conceptual rather than technical. Two ways to read the store means two sets of rules about when a component re-renders, and reviewers have to know both. The hooks are the shorter path: useSelector and useDispatch are a few lines where connect needs a mapStateToProps, a mapDispatchToProps, and a wrapper component. New code has little reason to reach for connect, and the README's own documentation points to the website rather than explaining connect inline.

Where React Redux is the wrong choice

The library assumes a Redux store exists. If your team has not committed to Redux, installing React Redux first is backwards, because the store setup, reducers, and middleware all live in Redux and Redux Toolkit, not here. The README's installation section sends you to Redux's own configuration guide for exactly that reason.

The second boundary is server rendering. The react-server export condition exists, but a server component cannot call useSelector, because there is no store subscription during a server render. Data has to be read before it reaches the component tree. Teams that expect React Redux to work unchanged inside React Server Components will find the constraint in the module resolution, not in the API surface.

The third boundary is React version. The peer dependency on react ^18.0 || ^19 is explicit. On React 17, the library is out of scope, and the README states the 9.0 requirement without offering a compatibility path.

The alternative: local state and context, or a different store library

The nearest real alternative is React's own useState, useReducer, and useContext. The difference is where the state lives. Context keeps state in a React component near the top of the tree and passes it down; Redux keeps it in a store outside React and lets any component subscribe by selector. Context re-renders every consumer when the value changes, while useSelector only re-renders the component whose selected slice changed. That distinction is the whole reason React Redux exists as a separate package.

If your state is small and read by a handful of components, context is fewer moving parts and no extra dependency. If your state is large, written from many places, and inspected during debugging, the store model pays for itself. The decision is about the shape of the state, not about which library is newer.

Maintenance, releases and the MIT licence

The repository is not archived, and the last push was on 2026-09-19. Recent releases listed are v9.3.0 on 2026-05-15, v9.2.0 on 2024-12-10, and v9.1.2 on 2024-05-02, so the gap between v9.2.0 and v9.3.0 was roughly seventeen months. That spacing matters for planning: this is a stable library whose releases cluster around React changes rather than a fast-moving one.

Upgrade cost is dominated by peer dependencies rather than by the library's own internals. The jump to 9.0 required React 18, and the current peer range tops out at React 19 and Redux 5. If you are on Redux 4, moving to react-redux 9.3.0 means moving Redux as well.

The licence is MIT, stated in the README and in the license field of package.json. MIT permits commercial use and modification; it also means the project offers no warranty. That is a statement about the licence text, not legal advice, and anything unusual about your distribution model belongs with your own counsel.

Editorial conclusion

Adopt React Redux when you already have a Redux store and need React components to read from it and dispatch to it, and you are on React 18 or later with Redux 5. Do not adopt it to solve local component state, and do not adopt it if you are still on React 17, because the peer dependency range starts at ^18.0. Before wiring it into an existing app, check three things: your installed React version, whether your bundler resolves the react-server condition (the RSC build is a separate export path, not a fallback), and whether you actually need connect or can use the hooks. The repository's last push was on 2026-09-19, so the project is still receiving changes.

Frequently asked questions

What is React Redux used for?

It connects a Redux store to a React component tree. Provider puts the store on a React context, and hooks such as useSelector and useDispatch let components read state and dispatch actions without importing the store directly.

Is React Redux obsolete?

The repository is not archived and the last push was on 2026-09-19, with v9.3.0 released on 2026-05-15. The library still ships connect alongside the hooks, and its peer range covers React 18 and 19.

Are React and Redux the same?

No. React is the rendering library, and Redux is the store that holds application state outside React. React Redux is the separate package that binds the two together, which is why the README tells you to install Redux as well.

How do I install react-redux with npm?

Run npm install react-redux, or yarn add react-redux with Yarn. You also need to install Redux and set up a store, and React Redux 9.0 requires React 18 or later according to the README.

What is the react-redux Provider?

Provider is the component that takes your store as a prop and places it on a React context so components below it can reach the store. The hooks read from that same context, so a component outside the Provider cannot use useSelector.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. reduxjs/react-redux on GitHub
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/reduxjs-react-redux.svg)](https://hysenlabs.com/projects/reduxjs-react-redux)