For reactive state engines, the strongest matches are statelyai/xstate (XState is a robust state machine and statechart library), pmndrs/zustand (Zustand is a lightweight reactive state management library focused) and mobxjs/mobx-state-tree (MobX State Tree provides a structured, tree-based state management). reduxjs/redux-toolkit and effector/effector round out the shortlist. Each is ranked by relevance to your query, popularity and recent activity.
Compare the top reactive state engines on GitHub, ranked by stars and activity. Find the right library and pick the best fit.
XState is a statechart logic library and finite state machine framework used to model complex application behavior. It provides a system for defining states, events, and transitions to govern how a system responds to inputs through a formal schema. The project includes a visual state machine editor that allows for the design of state machine diagrams which automatically generate the corresponding logic and code. It implements an actor model to manage independent concurrent entities that communicate via asynchronous events to coordinate behavioral flows. The framework covers event-driven stat
XState is a robust state machine and statechart library that implements an actor model, event-driven architecture, and type-safe reactive state management to handle complex application logic.
Zustand is a state management library that provides a centralized store for managing shared application data. It functions as a reactive container that connects application state to components, allowing them to subscribe to specific slices of data and trigger updates automatically. By utilizing selector-based data access and immutable state updates, the library ensures that components only re-render when their observed data changes, maintaining a predictable and efficient data flow. The library distinguishes itself through a pluggable, middleware-based architecture that allows for the extensi
Zustand is a lightweight reactive state management library focused on centralized stores and selector-based updates, making it a strong tool for application state even though it lacks built-in finite state machine or actor model capabilities.
MobX State Tree is a structured, tree-based state management library for JavaScript applications that combines typed model definitions with reactive snapshots and patch-based change tracking. It provides a reactive state container with runtime and compile-time type safety, where application state is defined as a tree of typed models with collocated actions, computed views, and lifecycle hooks for predictable state mutations. The library is built around an action-centric mutation model that encapsulates all state changes within named functions that directly modify the tree, supported by genera
MobX State Tree provides a structured, tree-based state management library with reactive snapshots, type safety, and patch-based change tracking, making it a strong fit for handling complex application state logic.
Redux Toolkit is a state management toolkit and store configurator designed to simplify the development of Redux applications by reducing boilerplate code. It functions as an immutable state manager and a centralized store configuration system that provides a streamlined workflow for managing global application state. The project distinguishes itself through an automated async action orchestrator that manages the lifecycle of promises by automatically dispatching pending, fulfilled, and rejected actions. It also acts as a normalized state organizer, providing tools to structure complex relati
Redux Toolkit is a reactive state management library that provides immutable state handling and centralized store configuration, though it focuses on a centralized store architecture rather than formal finite state machines or an actor model.
Effector is a reactive state management library designed for building complex, event-driven applications. It functions as a data flow engine that models application logic as a directed acyclic graph, ensuring that state updates propagate automatically through interconnected nodes. By utilizing atomic state updates and declarative unit composition, the library maintains data consistency and provides a predictable execution model for managing application state. The project distinguishes itself through its framework-agnostic architecture, which decouples business logic from user interface implem
Effector is a reactive state management library built specifically for complex event-driven applications, featuring type safety, declarative unit composition, and a predictable execution model.
The Reactive Extensions for JavaScript
RxJS is a foundational reactive programming library for JavaScript that handles asynchronous data streams and event-driven architectures, though it lacks built-in finite state machines or actor models.
Bacon.js is a JavaScript functional reactive programming library used for coordinating complex asynchronous data flows. It functions as an observable event stream framework and an asynchronous data flow orchestrator, allowing developers to model events as declarative streams and properties. The library distinguishes itself through its ability to manage reactive state and synchronize timing across multiple sources. It provides specialized mechanisms for atomic state synchronization to prevent glitches in derived properties and offers advanced coordination strategies such as asynchronous stream
Bacon.js is a functional reactive programming library for managing asynchronous data flows and reactive state, making it a fitting tool for event-driven applications despite lacking a built-in finite state machine.
ReactiveCocoa is a functional reactive programming framework and Cocoa UI binding layer. It provides a library for composing asynchronous data streams and managing application state through signals and functional operators. The framework functions as an Objective-C data binding library that links object properties and method calls to reactive streams using runtime dynamism and swizzling. It includes a utility to convert traditional key-value observation notifications into composable streams for synchronized state tracking. The project covers reactive UI programming by connecting interface el
ReactiveCocoa is a functional reactive programming framework that handles asynchronous data streams and state management, though it focuses heavily on Cocoa UI binding and stream composition rather than finite state machines or actor models.
Jotai is a state management library for React applications that utilizes an atomic model to handle data. It organizes application state into small, independent units called atoms, which automatically track dependencies and trigger granular updates to components. By building state through these composable primitives, the library ensures that only the necessary parts of an application re-render when data changes. The library distinguishes itself through its flexible approach to state composition and asynchronous data handling. It integrates promises directly into the state model, allowing devel
Jotai is a lightweight atomic state management library for React that handles reactive updates and immutability, though it focuses on atomic composition rather than formal finite state machines.
re-frame is a functional framework for building single-page applications in ClojureScript. It provides a centralized, immutable database that serves as the single source of truth for the entire application state, enforcing a strict unidirectional data flow where events trigger state transitions and subsequent view updates. The framework distinguishes itself through a reactive signal graph and an interceptor-based middleware pipeline. By treating application logic as a sequence of data-driven events and declarative side effects, it decouples business logic from the view layer. This architectur
re-frame is a functional state management framework for ClojureScript that uses an immutable central database and an event-driven, unidirectional data flow, though it lacks built-in support for formal finite state machines or an actor model.
Effector is a reactive state management library and data flow orchestrator designed for building complex, event-driven applications. It models application logic as a directed acyclic graph, where state updates and asynchronous side effects propagate automatically through declarative pipelines. By decoupling business logic from user interface layers, it allows developers to maintain state in independent containers that communicate via standard interfaces, ensuring the system remains framework-agnostic. The library distinguishes itself through its robust support for isolated execution scopes, w
Effector is a framework-agnostic reactive state management library built for complex event-driven data flow, though it focuses on declarative pipelines and stores rather than strict finite state machines or actor models.
Redux is a predictable state container designed to manage global application data through a centralized store. It operates on a unidirectional data flow architecture where state transitions are triggered by dispatching action objects, which are then processed by pure reducer functions to produce a new, immutable state tree. This approach ensures that application data remains consistent and traceable across the entire component hierarchy. The library distinguishes itself through a functional pattern that relies on pure functions for state logic and a middleware-based extension system. This mid
Redux is a well-known state management library that provides immutable state patterns and centralized stores, though it lacks built-in support for formal finite state machines or the actor model.
R3 is a reactive extensions library and asynchronous data pipeline framework. It provides a system for composing asynchronous data streams, managing reactive state, and coordinating event sequences using observable patterns. The project distinguishes itself with a deterministic testing toolkit that mocks time and frame updates to ensure reproducible unit tests for asynchronous logic. It also includes observability tools for tracking active subscriptions and generating stack traces to identify memory leaks, alongside centralized exception routing for pipeline recovery. The framework covers a
R3 is a reactive extensions library and asynchronous data pipeline framework written in C#, but it focuses on observable streams and data pipelines rather than explicit finite state machines or actor models.
Solid is a declarative JavaScript framework for building user interfaces through fine-grained reactivity. By utilizing a compile-time template transformation process, it converts JSX into direct DOM manipulation instructions, eliminating the need for a virtual tree. This architecture allows the framework to track dependencies at the individual element level, ensuring that state changes trigger surgical updates to the interface. The framework distinguishes itself through its isomorphic rendering pipeline, which shares reactive logic across server and client environments to support both initial
Solid is a reactive UI framework centered on fine-grained reactivity and reactive primitives, though it is primarily a component framework rather than a dedicated state machine or actor-model library.
MobX is a reactive state management library and fine-grained reactivity engine. It provides an observable data store that automatically triggers updates in the user interface when data structures change, functioning as a transparent functional reactive store to maintain a consistent source of truth. The system utilizes a dependency-graph mapping and proxy-based object observation to track data dependencies. This ensures that only the specific components dependent on changed data are updated, which reduces unnecessary re-renders and optimizes frontend performance. The library supports decoupl
MobX is a reactive state management library offering fine-grained reactivity and observable data stores, but it focuses on transparent dependency tracking rather than explicit finite state machines or actor models.
Flux is an application architecture framework and client-side state orchestrator. It implements a unidirectional state management pattern to ensure data flows in one direction, preventing unpredictable state changes and maintaining consistency across the user interface. The system functions as an action-driven state architecture where changes are triggered by plain object actions. A centralized dispatcher routes these actions to multiple data stores, which partition the application state and notify views of changes via a publisher-subscriber synchronization pattern. This approach provides a
Flux is a client-side state orchestrator implementing a unidirectional data flow pattern, making it a relevant event-driven state architecture despite lacking formal state machine or actor model features.
This project is a state management framework for Angular applications that provides a predictable state container. It implements a Redux-style architecture using a centralized store, managing global and local application data through an observable-based data flow of actions and reducers. The framework includes a specialized entity management tool for organizing and synchronizing server-side data collections within client-side stores. It also provides a reactive store system that integrates state updates with Angular signals for change detection and includes debugging mechanisms for time-trave
This repository provides a reactive state management framework tailored for Angular applications using a Redux-style architecture and observable data flow, fitting the search for state management despite lacking built-in finite state machine or actor model capabilities.
Nano Stores is a framework-agnostic state management library that uses a system of small, independent atomic stores to synchronize data across different JavaScript UI frameworks. It provides a reactive state container designed to minimize unnecessary component re-renders by decoupling application state into independent stores. The library features specialized synchronizers for real-time distributed state using WebSockets with conflict-free replicated data types, as well as a browser storage persistor for maintaining state across multiple open tabs. It utilizes adapter-based integration to map
Nano Stores is a lightweight reactive state management library that provides atomic stores for cross-framework state handling, though it focuses on simple stores rather than formal finite state machines or the actor model.
Signals is a reactive state management library and fine-grained reactivity engine. It functions as a dependency-tracking state manager that maps relationships between values to ensure derived data and user interface elements remain synchronized. The library distinguishes itself through direct-to-node DOM binding, which allows state to update specific text nodes in the browser without triggering a full component render cycle. It employs a runtime dependency graph and atomic batching to group multiple state modifications into single notification cycles, reducing redundant executions. The syste
This project is a reactive state management library offering fine-grained reactivity and dependency tracking, though it focuses on signal-based state rather than finite state machines or the actor model.
Robot is a functional and immutable finite state machine library for managing declarative application states and transitions. It utilizes an immutable state transition engine where next states and side effects are computed through pure functions operating on immutable data structures without any side-effect mutations. States and allowed transitions are mapped in a declarative state table definition, making the overall state machine logic readable and inspectable. The library connects finite state machines directly to component rendering engines through component reactive bindings, ensuring th
Robot is a functional and immutable finite state machine library that handles event-driven state logic in JavaScript, though it does not explicitly feature the actor model.
Zag is a headless UI state machine library that provides unstyled component logic to ensure consistent behavior across different rendering engines. It functions as a toolkit for modeling complex user interface interactions using statecharts, decoupling the underlying logic and accessibility attributes from visual styling. The library is framework-agnostic, utilizing specialized adapters to bridge its state machine logic with various JavaScript libraries such as React, Solid, Vue, and Svelte. This approach allows developers to maintain a single interaction model while applying any CSS or styli
Zag provides framework-agnostic state machine logic tailored specifically for headless UI component behavior rather than general application-wide state management.
use-immer is a React state management utility that provides a custom hook for updating immutable state. It allows for the modification of a temporary draft version of data to calculate the next state transition. The tool simplifies the management of complex state by enabling direct mutations on a draft, which removes the need to manually copy nested objects or arrays using spread operators. This approach ensures the generation of a new immutable snapshot for predictable state changes. The library covers capabilities for updating deeply nested state and supports processing state changes throu
use-immer is a React state management library that provides immutable state updates via draft proxies, making it a fitting tool for managing state reactivity though it lacks native finite state machine or actor model features.
This is a Dart state management library and architectural framework that decouples business logic from the user interface by transforming a stream of events into a stream of states. It implements a business logic component pattern to ensure that state transitions are predictable and testable. The project distinguishes itself through advanced event stream processing, providing concurrency strategies to drop, restart, or queue incoming events. It includes a dedicated state persistence layer for saving and restoring application state to maintain session continuity, as well as tools for state his
This Dart library uses a stream-based event-driven approach to decouple UI from business logic, making it a solid fit for reactive state management even though it lacks explicit finite state machine primitives.
Legend-State is a reactive state management library for JavaScript applications that provides a centralized container for application data. It utilizes a fine-grained reactivity engine to track state access automatically, allowing developers to update and retrieve data without the need for boilerplate patterns like reducers, actions, or dispatchers. The library distinguishes itself through its hierarchical, path-based state addressing and proxy-based dependency tracking. By isolating state dependencies, it ensures that user interface updates are triggered only for the specific components that
Legend-State is a reactive state management library focused on fine-grained reactivity and performance optimization, making it a strong tool for application state even though it does not explicitly provide finite state machines or an actor model.
Declarative, incremental state management library
State-Adapt is a declarative state management library in TypeScript that handles state logic incrementally, though it focuses more on declarative state derivation rather than implementing a full actor model or state machine by default.
GetX is a comprehensive state management framework for Flutter that provides a toolkit for managing application state, dependency injection, and routing without requiring build context. It serves as a core architectural system for reactive state management, navigation, service location, and multi-language theme support. The project is distinguished by its ability to handle context-free navigation and the use of observable variables that automatically trigger user interface updates. It features a dependency injection container with lazy loading and automated memory management, alongside a rout
GetX is a comprehensive state management and architectural framework for Flutter that provides reactive state capabilities and dependency management, though it focuses heavily on mobile UI development rather than general-purpose state machines or actor models.
☢ Make Your React App Truly Reactive!
This library provides reactive state management hooks for React applications, making it a fitting choice for state handling even though it lacks explicit finite state machine or actor model features.
Redux-Observable is a functional middleware for Redux that treats action streams as observables to manage complex asynchronous side effects and timing. It acts as an asynchronous action orchestrator, transforming streams of Redux actions into new actions through pipelines of observable-based side effects to coordinate application state changes. The project allows for the dynamic loading, injection, and replacement of side-effect streams at runtime. This enables the addition of asynchronous task handlers without requiring a full application restart, supporting code splitting and lazy loading o
Redux-Observable is a reactive state management middleware built on RxJS that handles asynchronous action streams and complex side effects, matching the requested stream-based approach while lacking finite state machines or an actor model.
| 仓库 | Star 数 | 语言 | 许可证 | 最后推送 |
|---|---|---|---|---|
| statelyai/xstate | 29.7K | TypeScript | MIT | |
| pmndrs/zustand | 58.4K | TypeScript | MIT | |
| mobxjs/mobx-state-tree | 7.1K | TypeScript | MIT | |
| reduxjs/redux-toolkit | 11.2K | TypeScript | MIT | |
| effector/effector | 4.8K | TypeScript | MIT | |
| reactive-extensions/rxjs | 19.4K | JavaScript | NOASSERTION | |
| baconjs/bacon.js | 6.5K | TypeScript | MIT | |
| reactivecocoa/reactivecocoa | 19.8K | Swift | MIT | |
| pmndrs/jotai | 21.2K | TypeScript | MIT | |
| day8/re-frame | 5.5K | Clojure | MIT |