effector

The state manager

Explainer video
Explainer article
import {createStore, createEvent} from 'effector'
const add = createEvent()
const sub = createEvent()
const reset = createEvent()
const counter = createStore(0)
.on(add, (count, n) => count + n)
.on(sub, (count, n) => count - n)
.reset(reset)
counter.watch(n => console.log('counter:', n))
// counter: 0
add.watch(n => console.log('add', n))
sub.watch(n => console.log('subtract', n))
reset.watch(() => console.log('reset counter'))
add(5)
// add 5
// counter: 5
sub(1)
// subtract 1
// counter: 4
reset()
// reset counter
// counter: 0

Type safe

TypeScript and Flow support out of box.

Framework agnostic

Can work with any UI or server framework.

Developer-friendly

Simple API surface and helpful community.

Maximum performance

Static initialization provides boost in performance for runtime.

Tiny bundle size

Effector uses Rollup and Terser to provide small builds.

Plain javascript

No decorators, no proxies, no classes required. Only you and your data.