A powerful iOS navigation library implementing the Coordinator pattern for clean separation of routing logic.
XCoordinator is an iOS navigation library based on the Coordinator pattern that manages view transitions and routing logic in a structured way. It solves the problem of tangled navigation code by encapsulating routing decisions in coordinator objects, making apps easier to maintain and test. The library provides type-safe routes, customizable transitions, and support for deep linking and reactive programming.
iOS developers building medium to large applications who want to implement clean architecture patterns like MVVM-C and need a robust solution for managing navigation flows. It's particularly useful for teams aiming to improve code maintainability and testability.
Developers choose XCoordinator because it offers a battle-tested implementation of the Coordinator pattern with type safety, extensive customization options, and seamless integration with reactive frameworks. Its ability to decouple navigation logic from view controllers and view models reduces coupling and enhances reusability.
🎌 Powerful navigation library for iOS based on the coordinator pattern
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 enum-based routes to define all navigation paths, providing compile-time safety and autocompletion, as demonstrated in the UserListRoute example where routes like .user(String) are explicitly handled.
Supports common transitions like push, present, and dismiss with customizable animations, and offers specialized coordinators for NavigationController, TabBar, etc., detailed in the Custom Transitions section.
Enables chaining of routes across different coordinators for complex navigation scenarios, such as deep linking from login to specific app sections, though it relies on runtime checks as noted.
Provides RxSwift and Combine extensions for seamless integration with reactive patterns, allowing sequences of transitions via router.rx.trigger, as shown in the RxSwift/Combine examples.
Version 2.0 introduced breaking changes like replacing AnyRouter with UnownedRouter or StrongRouter, requiring manual updates to existing codebases, as warned in the README's migration note.
Deep linking uses assertion failures at runtime instead of compile-time validation, meaning incorrect route chaining may crash in development, a limitation acknowledged in the Deep Linking section.
Requires programmatic window setup and removal of storyboard references, which adds overhead for projects transitioning from traditional UIKit storyboard navigation, as outlined in the App Launch instructions.
The various router abstractions (StrongRouter, WeakRouter, UnownedRouter) and coordinator types can introduce complexity that might be unnecessary for small teams or simple apps, noted in the 'When to use which Router abstraction' section.