
Redux Box
A modular, batteries-included container for Redux + Redux-Saga applications.
Modular by design
Organize your store as a collection of independent modules — each bundling its own state, mutations, sagas, and selectors. Drop them into any Redux app and they just work.
Less boilerplate
No more juggling action types, action creators, and reducers across files. Define a module once, in one place, and you're done.
Mutate without mutating
Powered by Immer, write reducers as if you were directly mutating state — and get true immutability under the hood.
Sagas, built in
Redux-Saga is wired up for you. Just declare your effects inside a module and let redux-box handle the rest.
Works everywhere
One container, any frontend — drop redux-box into React, React Native, or any JS app that speaks Redux.
Familiar Redux
No new bizarre terms or magic. Underneath it's still plain Redux, so your devtools, middleware, and ecosystem all keep working.
Quick start
Install redux-box:
yarn add redux-box
Wire up your store from a few independent modules:
import { createStore } from 'redux-box';
import { module as userModule } from './user';
import { module as postModule } from './post';
export default createStore([userModule, postModule]);
Head over to the Getting Started guide for a full walkthrough.
See it in real apps
Two end-to-end TypeScript apps that ship as part of this repo and deploy on every release:
- CRUD over REST — posts CRUD against JSONPlaceholder with optimistic updates, normalised state, and React Testing Library coverage. Source
- Trello board over GraphQL — drag-and-drop kanban backed by GraphQL Zero, with optimistic mutations and a mocked GraphQL transport in tests. Source
The Production-shaped apps page walks through what each one demonstrates and how the folder structure is laid out.