Why look beyond Expo Router
Expo Router provides a streamlined, file-system-based routing solution specifically designed for universal React Native applications, allowing a single codebase to target native mobile and web platforms. Its deep integration with the Expo ecosystem simplifies many aspects of development, including project setup, asset management, and over-the-air updates. However, developers might explore alternatives for several reasons. Projects that do not use Expo or React Native may require a different routing paradigm, such as those built with Flutter, Swift, or Kotlin. For web-first projects that incorporate React Native Web, solutions like Next.js or Remix offer comprehensive full-stack frameworks with integrated routing, server-side rendering, and API capabilities that go beyond Expo Router's primary focus on navigation. Furthermore, teams needing highly customized native navigation patterns or a more granular control over the underlying native navigators might find React Navigation provides a more flexible, albeit more verbose, approach.
While Expo Router is effective for its target use case, its opinionated nature and reliance on the Expo managed workflow might not suit all project requirements. Teams with existing native module dependencies not easily integrated into Expo's managed workflow, or those seeking to eject from Expo for greater control over the native build process, might find the transition to other routing solutions necessary. Similarly, for applications primarily targeting a single platform (e.g., iOS or Android), platform-specific UI frameworks like SwiftUI or Jetpack Compose offer integrated navigation solutions that are optimized for their respective ecosystems and provide direct access to platform features.
Top alternatives ranked
-
1. React Navigation โ The foundational navigator for React Native apps
React Navigation is a standalone routing library for React Native applications, offering a comprehensive set of navigators including stack, tab, drawer, and modal. Unlike Expo Router, which is built on top of React Navigation, this alternative provides direct control over the navigation primitives and lifecycle. It is highly customizable, allowing developers to implement complex navigation patterns and integrate with native modules more directly, making it suitable for projects that require fine-grained control or operate outside the Expo managed workflow. React Navigation supports both JavaScript and TypeScript, and its modular structure enables developers to import only the navigators they need, potentially reducing bundle size compared to more opinionated frameworks. It is widely adopted within the React Native community and has a robust ecosystem of extensions and integrations. Developers often choose React Navigation for its flexibility and power when building large-scale, enterprise-grade React Native applications that prioritize deep customization and performance.
Best for: Custom React Native navigation, complex app structures, projects outside Expo.
- React Navigation Profile
- React Navigation Official Site
-
2. Next.js โ A full-stack React framework for web and universal apps
Next.js is a React framework that supports server-side rendering (SSR), static site generation (SSG), and client-side rendering, making it a versatile choice for web applications and universal projects using React Native Web. Its file-system-based router, similar in concept to Expo Router, simplifies page creation and navigation. Next.js offers built-in API routes, image optimization, and data fetching utilities, providing a comprehensive solution for full-stack development. While Expo Router focuses on the mobile-first universal paradigm, Next.js excels in web performance and SEO, making it an ideal choice for applications where web presence is critical. For teams building a web application with the potential to share code with a React Native mobile app (via React Native Web), Next.js provides a robust foundation for the web counterpart. Its extensive feature set and large community support contribute to a strong developer experience, especially for those already familiar with React.
Best for: Web-first applications, universal React apps (with React Native Web), SEO-optimized sites, full-stack development.
- Next.js Profile
- Next.js Official Site
-
3. Remix โ A full-stack web framework with nested routing and web standards
Remix is a full-stack web framework that prioritizes web standards and offers a powerful nested routing system. Similar to Expo Router's file-system approach, Remix organizes routes based on file structure, but extends this with nested layouts and data loading capabilities specific to each route segment. Remix focuses on performance by leveraging browser features like HTTP caching and form submissions, aiming to deliver a fast and resilient user experience. While Expo Router targets universal React Native applications, Remix is primarily a web framework that can also be used for web portions of universal apps, especially when combined with React Native Web. Its emphasis on progressive enhancement and direct use of web APIs can lead to more robust and performant web applications. Developers choosing Remix often value its approach to data mutations, error handling, and component-based data loading, which streamline complex web application development.
Best for: Web applications, progressive enhancement, nested routing, web standards adherence, performance-critical web apps.
- Remix Profile
- Remix Official Site
-
4. Flutter โ Google's UI toolkit for natively compiled applications
Flutter is a UI toolkit developed by Google for building natively compiled applications for mobile, web, and desktop from a single codebase. While Expo Router provides navigation for React Native, Flutter offers its own robust routing and navigation system (Navigator 1.0 and Navigator 2.0/Router API) as part of its comprehensive framework. Flutter's declarative UI paradigm, based on Dart, allows for highly customizable and performant user interfaces. Developers new to the mobile ecosystem or those seeking a unified development experience across multiple platforms beyond just mobile and web often consider Flutter. Its extensive widget catalog and hot-reload feature enable rapid UI development and iteration. When evaluating alternatives, Flutter stands out for its ability to produce native-looking and feeling applications on iOS and Android with a single codebase, without relying on JavaScript bridges or web technologies for rendering. The framework's architecture provides deep control over rendering and animation, suitable for graphically intensive applications.
Best for: Cross-platform native app development, high-performance UIs, unified codebase for mobile, web, and desktop, Dart ecosystem.
-
5. SwiftUI โ Apple's declarative UI framework for all Apple platforms
SwiftUI is Apple's declarative UI framework for building applications across all Apple platforms, including iOS, iPadOS, macOS, watchOS, and tvOS. As an alternative to Expo Router, SwiftUI offers its own integrated navigation components like
NavigationView(now deprecated in favor ofNavigationStackandNavigationSplitView) and programmatic navigation using state bindings. It leverages the Swift language and is deeply integrated with the Apple ecosystem, providing direct access to platform-specific features and APIs. For developers exclusively targeting Apple platforms and prioritizing native look-and-feel, performance, and tight integration with Apple's development tools, SwiftUI represents a powerful alternative. While Expo Router focuses on JavaScript/TypeScript and universal codebases, SwiftUI provides an opinionated, Swift-native approach to UI and navigation, benefiting from compile-time safety and a modern declarative syntax. This choice is particularly strong for projects that either do not require Android or web support, or for teams that prefer to build separate, platform-optimized native applications.Best for: Native iOS/macOS/watchOS/tvOS development, declarative Apple UI, Swift language users, deep Apple ecosystem integration.
-
6. Jetpack Compose โ Android's modern toolkit for building native UI
Jetpack Compose is Google's modern, declarative UI toolkit for building native Android applications, leveraging the Kotlin language. Similar to SwiftUI, Compose features a built-in navigation component (Hilt Navigation Compose or the core Navigation component) that allows developers to define navigation graphs and handle screen transitions within a Compose-based UI. As an alternative to Expo Router, Jetpack Compose is specifically for Android-native development, providing a highly optimized and idiomatic approach to building UIs on the Android platform. It offers a declarative syntax that streamlines UI development, reduces boilerplate code, and integrates seamlessly with other Jetpack libraries. For projects that are solely focused on the Android platform and prioritize a native Kotlin-first development experience, Jetpack Compose provides a robust and modern solution. It allows developers to create highly interactive and performant Android applications with direct access to all Android APIs, without the overhead of cross-platform abstractions.
Best for: Native Android app development, Kotlin-first projects, declarative Android UI, deep Android ecosystem integration.
-
7. React Native โ The underlying framework for native mobile apps with React
React Native is an open-source framework for building native mobile applications using JavaScript and React. While Expo Router is a navigation library built for applications developed with React Native (and Expo), React Native itself can be considered an alternative in the sense that it provides the foundation upon which various routing solutions, including React Navigation, are built. Developers choosing raw React Native often do so to gain maximum control over the native modules and build process, or to integrate with existing native codebases. This approach offers the flexibility to choose any navigation library, including custom implementations, without the constraints of a managed workflow like Expo's. While it requires more manual setup and configuration for aspects like bridging native modules, it provides unparalleled freedom for highly specialized or performance-critical applications. For teams that need to integrate deeply with platform-specific APIs or require custom native components, working directly with React Native offers the necessary flexibility, allowing them to then integrate a routing solution of their choice.
Best for: Maximum control over native modules, custom native integrations, large-scale React Native projects, complex build processes.
Side-by-side
| Feature / Alternative | Expo Router | React Navigation | Next.js | Remix | Flutter | SwiftUI | Jetpack Compose | React Native |
|---|---|---|---|---|---|---|---|---|
| Primary Focus | Universal React Native Navigation | React Native Navigation Library | Full-stack React Web Framework | Full-stack Web Framework (React) | Cross-platform UI Toolkit | Apple Declarative UI Framework | Android Declarative UI Toolkit | Native Mobile App Framework |
| Core Technology | React Native, Expo | React Native | React, Node.js | React, Node.js | Dart | Swift | Kotlin | JavaScript, React |
| Routing Style | File-system based | Component-based, programmatic | File-system based | File-system based, Nested | Declarative Router API | Declarative (NavigationStack) | Declarative (Navigation Compose) | Flexible (via libraries) |
| Platform Support | iOS, Android, Web | iOS, Android, Web (React Native Web) | Web (SSR, SSG, CSR) | Web (SSR, CSR) | iOS, Android, Web, Desktop | iOS, iPadOS, macOS, watchOS, tvOS | Android | iOS, Android, Web (React Native Web) |
| Codebase | Universal (JS/TS) | Universal (JS/TS) | Web-focused (JS/TS) | Web-focused (JS/TS) | Universal (Dart) | Apple-specific (Swift) | Android-specific (Kotlin) | Universal (JS/TS) |
| Backend Integration | Requires external | Requires external | Built-in API Routes | Built-in API Endpoints | Requires external | Requires external | Requires external | Requires external |
| Key Advantage | Simplified universal setup | Deep customization, flexibility | Web performance, SEO, full-stack | Web standards, nested routing, resilience | Native performance, single codebase for multiple platforms | Deep Apple ecosystem integration, native look and feel | Idiomatic Android development, declarative UI | Maximum native control, large community |
How to pick
Choosing the right routing solution depends heavily on your project's specific requirements, target platforms, and existing technology stack. Here's a decision-tree approach to guide your selection:
-
Are you building a universal React Native application within the Expo ecosystem?
- If Yes, Expo Router is likely your most straightforward choice, offering a streamlined, file-system-based approach for iOS, Android, and web.
- If No, consider the following questions.
-
Are you primarily building a React Native application but require more control or are outside the Expo managed workflow?
- If Yes, React Navigation provides a highly flexible and powerful component-based routing solution, allowing for deep customization and direct integration with native modules.
- If No, evaluate if your project is web-first or targets specific native platforms.
-
Is your project primarily a web application, especially one that might share code with a React Native mobile app (via React Native Web)?
- If Yes, and you need server-side rendering, static site generation, or built-in API routes, Next.js is an excellent full-stack framework with a file-system router.
- If Yes, and you prioritize web standards, nested routing, and performance through browser features, Remix offers a robust alternative for web development.
- If No, consider purely native or cross-platform options.
-
Are you building a cross-platform application that targets iOS, Android, web, and potentially desktop, using a single codebase, and are open to a new language/ecosystem?
- If Yes, Flutter (with its built-in navigation system) is a strong contender, offering high performance and a rich UI toolkit in Dart.
- If No, proceed to platform-specific considerations.
-
Are you exclusively targeting Apple platforms (iOS, macOS, etc.) and prefer a native Swift-based development experience?
- If Yes, SwiftUI provides Apple's modern declarative UI framework with integrated navigation components, offering deep integration with the Apple ecosystem.
- If No, consider Android-specific or the foundational React Native.
-
Are you exclusively targeting Android and prefer a native Kotlin-based development experience?
- If Yes, Jetpack Compose offers Google's modern declarative UI toolkit for Android, with its own navigation components, optimized for the Android platform.
- If No, and you still need mobile cross-platform using JavaScript, consider the foundational React Native framework.
-
Do you need maximum control over native modules and the build process for a React Native application, potentially integrating with existing native codebases or requiring highly custom native components?
- If Yes, working directly with React Native gives you the most flexibility, allowing you to then choose a navigation library like React Navigation or implement a custom solution.
Each alternative offers distinct advantages tailored to different project scopes and developer preferences. Carefully assessing your team's expertise, performance requirements, and long-term maintenance goals will help in making an informed decision.