## What's Updux? So, I'm a fan of [Redux](https://redux.js.org). As I was looking into tools to help cut on its boilerplate, I came across [rematch](https://rematch.github.io/rematch). It has some pretty darn good ideas. But it also enforces a flat hierarchy of reducers -- where is the fun in that? I'm also having a strong love for [Updeep](https://github.com/substantial/updeep), so I wanted a framework where I could use it to define reducer state updates. Hence: `Updux`. Heavily inspired by `rematch`, but twisted to work with `updeep` and to fit my peculiar needs. It offers features such as * Mimic the way VueX has mutations (per-action reducer logic) and effects (middleware reacting to actions that can be asynchronous and/or have side-effects), so all things pertaining to a store are defined in the space place. * Automatically gather all actions used by the updux's effects and mutations, and makes then accessible as attributes to the `dispatch` object of the store. * Mutations have a signature that is friendly to Updux and Immer. * Mutations auto-unwrapping the payload of actions for you. * TypeScript support. **Fair warning**: this package is still very new, likely to go through big changes before I find the perfect balance between ease of use and sanity. Caveat Emptor. # Synopsis ```js import { Updux } from 'updux'; import u from 'updeep'; import add from 'lodash/fp/add.js'; import otherDux from './otherUpdux'; const dux = new Updux({ initial: { counter: 0, }, actions: { inc: null }, subduxes: { otherDux, } }); dux.setMutation('inc', (increment) => u({ counter: add(increment) })); dux.addEffect( '*', api => next => action => { console.log( "hey, look, an action zoomed by!", action ); next(action); } ); const store = dux.createStore(); store.dispatch.inc(1); console.log( store.getState().counter ); // prints 1 ```