How to check which React Native version you use

package.json shows a range. Your app runs one exact version. Here is how to find the installed React Native, React and Expo SDK versions, and what each React Native release expects.

Range in package.json vs installed version

"react-native": "^0.81.0" allows any 0.81.x. The version you build with is the one your lockfile resolved. Check the installed version with your package manager:

# npm
npm ls react-native react expo

# yarn
yarn why react-native

# pnpm
pnpm why react-native

For an overview of the environment as well as the versions, the React Native CLI prints both:

npx @react-native-community/cli info

Which Expo SDK am I on?

The major version of the expo package is the SDK number: expo@54.0.12 is SDK 54. Run npm ls expo to see the installed version. Then compare it with the Expo SDK compatibility table to see which React Native and React that SDK expects.

Check the version at runtime

React Native exposes its version through Platform.constants. Useful for a debug screen or for sending with crash reports:

import { Platform } from 'react-native';

const { major, minor, patch } = Platform.constants.reactNativeVersion;
console.log(`React Native ${major}.${minor}.${patch}`);

Check all versions against a target

Knowing your version is step one. The React Native Upgrade Checker takes your package.json and a target (an Expo SDK or a React Native release) and lists the dependencies that conflict with it, with the official source for each result.

Paste package.json, pick a target, get a report. Runs in your browser.

Open the upgrade checker

React Native releases: React and Node.js requirements

What each React Native minor version declares on npm, and the React version its official app template uses. Keep react on the template version unless a release note says otherwise.

React Native releases with React and Node.js requirements
React NativeLatest patchReact (template)React peer rangeNode.js engineArchitecture
0.880.88.119.3.0^19.3.0^22.13.0 || ^24.3.0 || >= 26.0.0New Architecture only
0.870.87.119.2.3^19.2.3^22.13.0 || ^24.3.0 || >= 26.0.0New Architecture only
0.860.86.319.2.3^19.2.3^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0New Architecture only
0.850.85.319.2.3^19.2.3^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0New Architecture only
0.840.84.119.2.3^19.2.3>= 20.19.4New Architecture only
0.830.83.1019.2.0^19.2.0>= 20.19.4New Architecture only
0.820.82.119.1.1^19.1.1>= 20.19.4New Architecture only
0.810.81.619.1.4^19.1.4>= 20.19.4—
0.800.80.319.1.0^19.1.0>=18—
0.790.79.719.0.0^19.0.0>=18—
0.780.78.319.0.0^19.0.0>=18—
0.770.77.318.3.1^18.2.0>=18—
0.760.76.918.3.1^18.2.0>=18—
0.750.75.518.3.1^18.2.0>=18—
0.740.74.718.2.018.2.0>=18—
0.730.73.1118.2.018.2.0>=18—
0.720.72.1718.2.018.2.0>=16—

Data verified from the Expo versions API, each SDK's bundledNativeModules.json, the Expo versions page and the npm registry.

Fixing a React Native version mismatch error

The red screen "React Native version mismatch" appears when the JavaScript bundle and the native app were built from different React Native versions. It lists a "JavaScript version" and a "Native version", and they differ.

Common causes

  • Another project's Metro bundler is still running on port 8081 and serves the wrong bundle to your app.
  • A stale Metro cache holds a bundle from before you changed the React Native version.
  • The app binary on your device or simulator was built with an older React Native than the one now in node_modules.
  • Several copies of react-native are installed, for example through a dependency or a monorepo.
  • Expo Go runs a different SDK than your project uses.

Fixes

  1. Stop every running Metro server, then start the right one with a clean cache: npx react-native start --reset-cache or npx expo start -c.
  2. Rebuild the native app so the binary matches your installed version (npx react-native run-android, npx react-native run-ios or npx expo run:android).
  3. Check for duplicates with npm ls react-native and remove extra copies.
  4. In an Expo project, run npx expo install --fix so dependencies match the SDK, and use an Expo Go version that supports it. If not, use a development build.

Still stuck after a clean rebuild? See React Native not detecting changes for Metro cache and watcher problems.

Version problems that look like other bugs

package.json says one thing, the build uses another

A caret range plus a stale or regenerated lockfile can move you to a different patch than your teammates or CI. Commit the lockfile and install with npm ci (or yarn install --frozen-lockfile) in CI.

Two React versions installed

"Invalid hook call" errors after an install often mean two copies of React. npm ls react shows every copy and which package pulled it in.

Node.js too old for the React Native version

Each release declares a Node engine range (see the table). Builds and Metro can fail in confusing ways on an older Node. Match your local machine and CI.

FAQ

Does npx expo --version show my SDK?

No. It prints the version of the Expo CLI. Use the major version of the installed expo package instead.

Which React version should I use with my React Native version?

The one in the official template for that release, shown in the table above. For Expo projects, the one the SDK pins; npx expo install react installs it.

Sources