A state machine library for RxSwift that combines state transitions with side effects, inspired by Redux and Elm.
RxAutomaton is a state machine library for RxSwift that helps iOS and macOS developers manage application state and side effects in a structured way. It allows you to define state transitions declaratively and associate them with asynchronous effects, solving the complexity of handling state changes and side effects in reactive applications.
iOS and macOS developers using RxSwift who need a predictable way to manage application state, especially those building complex UIs or workflows with multiple asynchronous operations.
Developers choose RxAutomaton because it combines the power of RxSwift with a clear state machine pattern, making it easier to reason about state transitions and side effects while benefiting from cancellation strategies and observability.
🤖 RxSwift + State Machine, inspired by Redux and Elm.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses a clear mapping syntax to define state changes, as shown in the README example where inputs like .login map from .loggedOut to .loggingIn, making state logic explicit and readable.
Associates asynchronous effects directly with state transitions via RxSwift Observables, such as loginOKProducer for API calls, ensuring side effects are controlled and predictable.
Supports strategies like .latest to cancel previous running effects when new inputs arrive, which is useful for handling overlapping operations like login/logout sequences.
Provides state and reply Observables for monitoring changes and transition outcomes, enabling easy debugging and testing of state flows in reactive applications.
The repository is explicitly marked as discontinued in favor of Actomaton, meaning no future updates, bug fixes, or community support, making it risky for production use.
Heavily relies on RxSwift, so it's incompatible with other reactive frameworks like Combine or non-reactive Swift codebases, limiting adoption in modern SwiftUI projects.
Requires manual definition of enums for states and inputs, complex mappings, and setup of input pipes, which adds boilerplate and complexity for straightforward use cases.