A reactive and unidirectional Swift application architecture framework combining Flux and Reactive Programming.
ReactorKit is a reactive and unidirectional Swift application architecture framework that combines Flux and Reactive Programming principles. It separates business logic from views to improve testability and maintainability, allowing developers to adopt it incrementally in existing projects.
Swift developers building iOS, macOS, tvOS, or watchOS applications who want a structured, testable architecture with reactive data flow. It's particularly suited for teams prioritizing clean separation of concerns and incremental adoption in legacy codebases.
Developers choose ReactorKit for its emphasis on testability and minimal boilerplate, offering built-in testing support and a unidirectional data flow that ensures predictable state management. Its incremental adoption capability allows integration into specific views without requiring a full app rewrite.
A library for reactive and unidirectional Swift applications
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Built-in stubs for reactors allow easy unit testing of views and state changes without dependencies, as detailed in the Testing section.
Can be integrated into specific views of an existing app without a full rewrite, aligning with the 'Start Small' design goal.
Reduces typing with simple protocols and streams, keeping code concise as emphasized in the 'Less Typing' philosophy.
Ensures clear separation of actions, mutations, and states for reliable state management, preventing side effects in views.
Tracks state mutations even when values remain the same, useful for events like alerts, as shown in the Pulse examples.
Requires RxSwift 5.0+, making it incompatible with projects using Combine or other frameworks without major changes.
Testing reactors with multiple state transitions often requires RxTest, adding overhead beyond basic unit tests, as noted in advanced testing.
Leaves global state management to developers, requiring manual implementation with streams or other methods, unlike integrated solutions.
Not officially supported with Carthage, needing workarounds like manual xcodeproj generation, which can be error-prone.