mrkeyoor.com_
Sat 12 Sept 06:27 UTC
Webevaluationupdated 12 Sept 2026

react-navigation review

React Navigation supplies the routing, screen transitions, tabs, drawers, and URL handling used in React Native apps. It gives mobile and web projects one navigation model while still letting developers choose native screen transitions or a more customizable JavaScript stack.

Verdict

Our React Navigation checkout installed 1,247 packages and used 758 MB, then built in 35 seconds and passed all 1,303 tests in 27 seconds, so the contributor path was healthy and substantial on our box. Use the stable 7.x packages for most React Native apps that need flexible stacks, tabs, deep links, and web support. Choose Expo Router for file-based Expo routing, or React Native Navigation when native controllers must own the application structure; avoid copying the version 8 alpha from main into a stable app by accident.

We ran it

Lab card: what happened when we ran react-navigationScreenshot of react-navigation (reactnavigation.org)
Install✓ · 28s1247 packages · 758 MB
Build✓ · 35s
Tests✓ · 27s1303 passed · 0 failed of 1303 (jest)
Repo918 files~149,145 lines of source · 49 MB · 12 CI workflows

Answers from our run

Does react-navigation build from source?

Dependencies installed in 28 seconds (1247 packages), and the build succeeded in 35 seconds. We cloned commit b0352b5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do react-navigation's tests pass?

Yes: 1303 of 1303 passed when we ran the project's own test command (jest). Some failures need services or credentials a bare container does not have.

Who should not use react-navigation?

Teams that require the default branch to be stable: the README says main contains the upcoming version 8, while 7.x is the latest stable branch.

What are the alternatives to react-navigation?

Expo Router, React Native Navigation. Our React Navigation checkout installed 1,247 packages and used 758 MB, then built in 35 seconds and passed all 1,303 tests in 27 seconds, so the contributor path was healthy and substantial on our box.

Setup3/5Core install is clear; native setup and navigator peers add work
Docs5/5Versioned guides cover native setup, web behavior, types, and testing
Community5/524,500 stars, a same-day push, and active issues and releases
Maturity4/5Stable 7.x is established while main carries version 8 alpha code

Who it’s for

React Native teams that need stacks, tabs, drawers, deep links, and typed route parameters.
Expo developers who want a documented setup and a ready-made starter template.
Cross-platform teams willing to adapt gestures, URLs, and layouts for native and web behavior.
Apps that benefit from choosing native-stack performance or JavaScript-stack customization per flow.

Who it’s NOT for

Teams that require the default branch to be stable: the README says main contains the upcoming version 8, while 7.x is the latest stable branch.
Android apps that must keep predictive back enabled today: the 7.x setup guide says it is unsupported and tells developers to opt out in the manifest.
Web products that require native-style gestures or simple server rendering: the web guide says gestures are unavailable in its navigators and server rendering support is limited.
Teams that need to install a patched fork straight from its GitHub URL: the README says the monorepo cannot be installed that way and documents a gitpkg publishing workflow instead.

Setup reality

Our sandbox installed 1,247 packages in 28 seconds and used 758 MB on disk. Commit b0352b5 then built in 35 seconds, and Jest passed all 1,303 tests in 27 seconds. The 49 MB checkout held 918 files and about 149,145 lines of source.

A consumer needs no account or credential. Stable 7.x requires React Native 0.72 or newer, plus react-native-screens and react-native-safe-area-context; iOS needs pods, and Android needs a MainActivity change. Individual navigators add their own packages.

The measured monorepo pins pnpm 11.13.1 and declares Node 24.13 or newer, although our supplied Node 22 image completed all three steps. Main contains version 8 alpha code, so app developers should choose the 7.x branch or stable packages deliberately. Fork installation also requires the documented gitpkg route.

Version 7 is stable while main contains version 8 alpha

React Navigation v7.3.18 is the latest stable native package release, while the repository README says the default branch contains the upcoming version 8. The measured commit makes that distinction tangible: @react-navigation/native identifies itself as 8.0.0-alpha.44. A developer cloning main to patch a production app is therefore working ahead of the stable line. Stable consumers should install released 7.x packages or work from the 7.x branch instead of assuming main matches npm's default release.

The repository is a collection of related packages rather than one small library. Our measured checkout contained 918 files, about 149,145 source lines, and pnpm workspaces for packages plus an example app. It covers core routing, native and JavaScript stacks, bottom and top tabs, drawers, UI elements, devtools, and lower-level routers. That shared home makes coordinated releases possible, but it also explains why contributing carries much more code than adding one navigator to an application.

Native screens require platform setup after the core package

The v7 getting-started guide requires React Native 0.72 or newer and names Expo 52 as the minimum for Expo Go. Most navigators also need react-native-screens and react-native-safe-area-context. iOS developers run the CocoaPods linking step. Android projects must set the screens fragment factory in MainActivity so view state survives activity restarts, and the guide currently tells Android apps to disable predictive back because React Navigation does not support it yet.

Those steps are manageable, though they are easy to miss when someone sees only npm install @react-navigation/native. The full contributor install pulled 1,247 packages and occupied 758 MB in our sandbox. That is the monorepo development footprint, not a claim about the size added to a consumer app. A real app's dependency set varies by navigator: native stack is lighter conceptually, while drawer and JavaScript stack paths bring gesture and animation libraries that need their own native setup.

What happened when we ran it

Our Node 22 sandbox installed the React Navigation monorepo at commit b0352b5 in 28 seconds. pnpm added 1,247 packages and used 758 MB on disk. The build completed in 35 seconds. We ran inside an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. The checkout itself occupied 49 MB before the dependency installation, so most of the measured disk cost came from the development dependency tree.

Jest finished in 27 seconds with 1,303 passed and 0 failed out of 1,303. The repository had 12 CI workflow files and workspaces, but our scan found no Dockerfile and no dedicated tests directory. The clean suite is strong evidence for the JavaScript and TypeScript paths exercised by those commands. It does not replace device checks for gestures, activity restoration, deep links, accessibility, or transitions across the iOS, Android, and web targets an app supports.

Static configuration cuts v7 type and link boilerplate

React Navigation v7 provides static and dynamic configuration. The static API uses an object-shaped route tree, can infer more TypeScript information, and can generate deep-link paths automatically. Dynamic configuration keeps screen lists and options inside components, which helps when the route tree itself changes at runtime. The TypeScript guide warns that nested dynamic navigators need explicit parameter lists, and manual useNavigation annotations cannot be guaranteed to match the navigator actually above the component.

This is where React Navigation earns its place in a complex app. Route names, nested parameters, linking, headers, and transition options live in one model instead of separate mobile and web routers. Our 35-second build and 1,303 passing tests make that model credible at the measured commit. Application tests still need to cover the routes that matter. Open issue 13231, for example, reports reused nested-parameter object references being ignored on a later navigation, with a fresh outer object as the reported workaround.

Web support omits gestures and keeps server rendering limited

The v7 web guide supports browser history and URLs through React Native for Web, but it asks developers to use links or buttons that render anchors instead of relying on imperative navigation. Native-stack animations and gestures are unavailable on web. JavaScript stack transitions are disabled by default there, and its gestures are also unavailable. Drawer gestures do not carry over either. A shared route model survives, while interaction details and responsive layout still need web-specific decisions.

Server rendering is another boundary. The guide calls support limited and says React Navigation works best with fully client-rendered apps; hosting also needs every application route to serve the SPA entry file. The measured project spans 49 MB and 918 source files because it covers several platforms and navigators, but that scope does not turn it into a web framework. Teams whose primary product depends on server-first routing, loader conventions, or identical gestures across platforms should choose a router centered on those requirements.

A 2026-09-12 push and 847 open items show an active large project

GitHub recorded 24,500 stars and a last push on 2026-09-12. Search results separated the 847 open items into 799 issues and 48 pull requests. The stable native 7.3.18 release arrived on 2026-08-26, alongside continuing version 8 alpha work. New reports were still being filed and discussed in September, including strict peer-dependency behavior for an alternate renderer and nested-navigation parameter reuse. The queue is large, but current source, releases, and issue discussion rule out a simple abandonment reading.

Our 28-second install, 35-second build, and 27-second test run all succeeded, which supports using the stable line while the 8.x work develops. React Navigation is the sensible default when a React Native team wants configurable navigation across native and web. Expo Router reduces route declarations for Expo apps by using files, while Wix's React Native Navigation gives native controllers more authority. Pick based on application architecture, then pin the chosen major version and test the real back, link, restore, and transition flows.

Alternatives

ProjectWhat it isPick it when
Expo Router gh↗Expo's file-based router for Android, iOS, and web applications.pick this instead when an Expo project should derive routes and deep links from the file tree.
React Native NavigationA navigation system that uses native controllers as the application root.pick this instead when fully native navigation structure matters more than React Navigation's JavaScript configuration and wider web story.

What people are saying

  1. [velocity-scout] react-navigation/react-navigation

Sources

  1. React Navigation README
  2. React Navigation repository metadata
  3. React Navigation 7.3.18 release
  4. React Navigation 7.x getting-started guide
  5. Native stack and JavaScript stack comparison
  6. React Navigation web support
  7. React Navigation TypeScript guide
  8. Issue 13231: nested parameter object reuse

More web reviews

30-Days-Of-JavaScript · html5-boilerplate · p5.js · lighthouse · video.js · fluentui · the whole board →