A lightweight and flexible state management library for TS and JS projects. This library provides a simple way to share and manage state across your application with reducers, subscriptions, actions, middleware, and a reset function.
Recommend using zentropy-react
Unlike verbose state management solutions like Redux, this library is:
- ✅ Lightweight – No unnecessary boilerplate. No dependencies.
- ✅ Easy to use – Simple API with minimal setup.
- ✅ Flexible – Works with reducers, direct updates, and middleware.
- ✅ Performant – Uses direct state updates and subscriptions for efficiency.
You can install the package via npm:
npm install zentropy
or using yarn:
yarn add zentropy
import { makeState } from "zentropy";
const initial: number = 0;
// Type are inferred from initial and reducer's keys
const counterState = makeState({
initial,
reducers: {
increment: (state) => state + 1,
decrement: (state) => state - 1,
add: (state, amount) => state + amount
},
});
// Subscribing returns the unsub function, in case you don't want to use the state.unsubscribe() method
const unsub = counterState.subscribe((value) => {
console.log("Counter updated:", value);
});
// Will remove the listener and no longer be called on state changes
unsub();
counterState.update(10);
const { increment, decrement } = counterState.actions;
increment();
decrement();
counterState.actions.add(5);
counterState.dispatch("increment");
counterState.dispatch("decrement");
counterState.dispatch("add", 10);
Reset the state to its initial value:
counterState.reset();
Middleware functions allow you to intercept state updates, useful for logging, debugging, or persisting state.
// Also returns an unsub callback so you can remove this middleware
const unsub = counterState.use((state, action, payload) => {
console.log(`Action: ${action}, Payload:`, payload, "New State:", state);
});
counterState.dispatch("increment");
// Console: Action: increment, Payload: undefined, New State: 1
Creates a new state instance.
Returns the current state value.
Subscribes a listener to state changes.
Unsubscribes a listener.
Directly updates the state value and notifies subscribers.
Provides an object containing callable actions based on the defined reducers.
Calls a reducer function with the given action and payload.
Resets the state to its initial value.
Adds middleware to intercept and process state changes.
MIT