usm is a module design that wants to bridge together the differences of using Redux, Mobx, and Vuex in conjunction with different view layers such as React, Vue and Angular. It is designed to help you build libraries that will work with any front-end architecture.
I see MST as a mature solution for managing state which combines the goodness of immutability, the ease of use of mutable structures, the convenience of type checking, the separation of concerns of dedicated state stores, and the natural performance of observable structures. It is to state what React is to UI (paraphrasing Daniel Earwicker). It is the best developer experience (DX) I’ve had managing state. 🔥
In the end, we chose Immer for Workday Prism Analytics’ immutability use case. We set out at the start to find a framework, or lack thereof, that guaranteed an immutable store, while integrating seamlessly with TypeScript’s strongly-typed syntax. Despite its downsides, Immer not only fulfills both of these requirements, but is also lightweight, simple, and generally performant. Thus far, developers enjoy using Immer; it has been extremely non-intrusive and easy to uptake with little-to-no learning curve.
We quickly settled on Electron as a platform to build the app. The combination of ES7, Electron, React, and MobX quickly became an incredibly productive (and fun!) set of technologies to use. As for the actual audio player, we wanted to do things which weren’t easy or even possible with Web…
…ed TypeScript for the React app as well. The advantages of type checking in TypeScript are obvious. And now, as better handling of imports, async/await and rest spread have finally arrived in TypeScript 2, it leaves Babel/ES7/Flow in the dust.