EveryState.js
Observable state management with dot-path addressing.
Works with React, Vue, Angular, Solid, or no framework at all.
get, set, subscribe - that's the whole API. ~6 KB, zero dependencies.
Why EveryState?
One Primitive
get, set, subscribe. No actions, reducers, selectors, or slices. State in, state out.
Path-Based
Nested state via dot paths: user.profile.name. Wildcard subscriptions: user.* fires on any child change.
Framework-Agnostic
Works with React, Vue, Angular, vanilla JS, or server-side Node. The same store, same logic, any view layer.
Async Built-In
setAsync manages loading/success/error lifecycle automatically. Auto-aborts in-flight requests.
Zero Dependencies
~6 KB total. Pure JavaScript. No build step required. Works in a <script type="module"> tag.
Testable by Design
Business logic lives in subscribers, not components. Test everything without mounting a single component.
The Ecosystem
Every package is MIT-licensed, independently versioned, and has zero third-party dependencies.
@everystate/core
Reactive store with path-based get/set/subscribe, wildcard listeners, async operations, batch updates, and query client.
@everystate/angular
Angular 17+ adapter. usePath, useIntent, useWildcard, useAsync bridged to Angular signals.
@everystate/react
React 18 adapter. usePath, useIntent, useWildcard, useAsync hooks + EventStateProvider.
@everystate/solid
Solid adapter. usePath, useIntent, useWildcard, useAsync bridged to Solid signals.
@everystate/vue
Vue 3 adapter. provideStore, usePath, useIntent, useWildcard, useAsync composables.
@everystate/css
State-driven CSSOM engine. Reactive design tokens, typed validation, WCAG contrast enforcement - all via dot paths.
@everystate/view
DOM structure as first-class state. DOMless resolve + surgical DOM projector. View tree is state.
@everystate/renderer
Direct-binding reactive renderer: bind-*, set, each attributes. Zero build step.
@everystate/router
SPA routing as state. Routes, params, query strings live in your store at ui.route.*.
@everystate/test
Event-sequence testing. Trigger state changes and assert values, types, and event firings.
| Package | Description | Type |
|---|---|---|
| @everystate/core | Path-based state management with wildcard subscriptions and async support | core |
| @everystate/css | Reactive CSSOM engine: design tokens, typed validation, WCAG enforcement | core |
| @everystate/angular | Angular 17+ signals adapter: usePath, useIntent, useAsync |
adapter |
| @everystate/react | React 18 hooks adapter: usePath, useIntent, useAsync |
adapter |
| @everystate/solid | Solid signals adapter: usePath, useIntent, useAsync |
adapter |
| @everystate/vue | Vue 3 composables adapter: provideStore, usePath, useIntent |
adapter |
| @everystate/view | State-driven view: DOMless resolve + surgical DOM projector | core |
| @everystate/renderer | Direct-binding reactive renderer. Zero build step | tool |
| @everystate/router | SPA routing as state | tool |
| @everystate/perf | Performance monitoring overlay | tool |
| @everystate/test | Event-sequence testing for stores | tool |
| @everystate/aliases | Ergonomic single-character DOM aliases for vanilla JS | util |
| @everystate/types | Typed dot-path autocomplete for TypeScript | util |
| @everystate/examples | Example applications and patterns | util |
How It Compares
| Feature | EveryState | Redux | Zustand | Pinia |
|---|---|---|---|---|
| Framework-agnostic | ✓ | - | - | - |
| Dot-path addressing | ✓ | - | - | - |
| Wildcard subscriptions | ✓ | - | - | - |
| Built-in async lifecycle | ✓ | - | - | - |
| State-driven CSS | ✓ | - | - | - |
| Zero dependencies | ✓ | - | ✓ | - |
| No build step needed | ✓ | - | - | - |
| Test without framework | ✓ | ✓ | ✓ | - |
Three Lines to Reactive State
import { createEveryState } from '@everystate/core';
const store = createEveryState({ count: 0, user: { name: 'Alice' } });
store.subscribe('count', (value) => console.log('Count:', value));
store.set('count', 1); // logs "Count: 1"
store.get('count'); // 1