// the take
Observable Store is a minimal RxJS-based state container (setState/getState/stateChanged) that works identically in Angular, React, Vue, or vanilla JS. It's aimed at teams who want pub/sub state sharing without adopting Redux/NgRx's actions-reducers-selectors machinery.
The API surface is genuinely tiny — setState, getState, stateChanged, done — and the same store class works unmodified across Angular, React, and vanilla JS, with real sample apps for each rather than just claims. Immutability is handled for you via deep cloning on get/set, removing a common footgun, with an explicit opt-out (deepCloneState: false) for hot paths that need a direct reference. Built-in stateHistory tracking plus a bundled Redux DevTools extension gives you time-travel debugging without pulling in Redux itself.
Deep-cloning the entire state slice on every getState/setState call is simple but gets expensive fast with large or deeply nested objects; the only remedy is manually turning cloning off and taking on mutation-safety yourself. The global store is built on static class properties (globalSettings, allStoreServices) rather than per-instance state, which is awkward for SSR or any scenario running multiple app instances in one process. There's no middleware or plugin model beyond the one bundled DevTools extension — no async action pattern, no memoized selectors, no persistence — so anything past plain get/set is on you. RxJS is a hard peer dependency, which is a real addition for React/Vue projects that don't already carry it, and the Angular version split (v3 for 17+, a separately maintained v2.2.15 for 14-16) means older-Angular users are frozen on an old release line.
We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →