Expo SDK compatibility: React Native, React and Node versions

Each Expo SDK targets exactly one React Native version. This table shows what every recent SDK ships with, taken from Expo's own data, so you know what changes before you bump expo.

Have a package.json? The React Native Upgrade Checker compares every dependency with the SDK you pick and lists what needs to change.

Check my package.json

Expo SDK version table

Expo SDK versions with their React Native, React, Node.js, Android and iOS requirements
Expo SDKReact NativeReactMin Node.jsAndroid min / compileSdk / targetSdkiOS min / XcodeBundled modulesStatus
SDK 580.88.119.3.022.13.x7+ / 37 / 3616.4+ / Xcode 26.4+124Supported
SDK 570.86.319.2.322.13.x7+ / 36 / 3616.4+ / Xcode 26.4+123Supported
SDK 560.85.319.2.320.19.x7+ / 36 / 3616.4+ / Xcode 26.4+122Supported
SDK 550.83.1019.2.0———120Not on current docs page
SDK 540.81.519.1.0———119Not on current docs page
SDK 530.79.619.0.0———114Not on current docs page
SDK 520.76.918.3.1———114Not on current docs page
SDK 510.74.518.2.0———105Not on current docs page
SDK 500.73.618.2.0———103Not on current docs page

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

How to read the table

  • React Native and React come from the Expo versions API. Expo pins both exactly, so react-native in your package.json should match the SDK, not a newer patch you picked by hand.
  • Bundled modules is the number of packages in that SDK's bundledNativeModules.json. When you run npx expo install some-package, Expo reads this file and installs the version listed for your SDK.
  • Node.js, Android and iOS columns come from the Expo versions page, which lists only the SDKs Expo currently supports. Older SDKs show a dash.

Check your project against its SDK

Expo's CLI does the authoritative check against the versions actually installed in node_modules:

# list installed packages that don't match the SDK
npx expo install --check

# update them to the versions the SDK expects
npx expo install --fix

# broader health check: config, duplicate native modules, React Native Directory data
npx expo-doctor

A typical mismatch shows up as a list of packages with the version Expo expects next to the one you have. Common causes are a manual npm install some-package@latest, a Dependabot or Renovate bump that ignored the SDK, or copying a snippet from a library's README written for a newer React Native.

Upgrading to a newer SDK

Expo recommends upgrading one SDK version at a time. The official walkthrough is:

npx expo install expo@^58.0.0 --fix
npx expo-doctor

Replace 58 with the SDK you are moving to. If you use Continuous Native Generation, delete the generated android and ios folders so the next build recreates them. If you maintain those folders yourself, run npx pod-install and apply the native changes from the Upgrade Helper diff for the new React Native version.

Common failure scenarios

React Native version doesn't match the SDK

You upgraded react-native past what the SDK targets. Packages in an Expo SDK are intended to support that SDK's React Native version, so native code in them can fail to compile against another one. Put react-native back with npx expo install react-native, or move to the SDK that targets the version you need.

Reanimated or Worklets on the wrong version

Reanimated 4 needs a matching react-native-worklets, and each Reanimated release declares the React Native range it supports. A mismatch tends to show up as a native build error or a crash at startup. Let npx expo install react-native-reanimated react-native-worklets choose both versions.

A package disappeared from the SDK

When an expo-* package is not in the new SDK's bundled list, it has usually been deprecated or replaced. Read the SDK release notes before you keep it pinned.

Native folders out of date

Generated ios and android folders from the previous SDK keep old native code. Builds then fail in ways that look unrelated to the upgrade. Regenerate them or apply the native diff.

FAQ

Can I use a newer React Native than my Expo SDK targets?

Not safely. Expo's documentation says packages in an SDK are intended to support that SDK's React Native version. When a new React Native ships, the latest Expo packages are typically updated for it, but that can take weeks. Expo's suggested routes for an urgent React Native fix are patch-package or a pre-release of the next SDK.

Which Expo SDK should I target?

The newest SDK that your critical libraries support. Expo's versions page lists the SDKs it currently supports; older SDKs stop receiving fixes, and app stores raise their minimum Android API and Xcode requirements over time.

Why does the table show fewer SDKs with Node and OS data?

Those columns come from Expo's versions page, which only lists supported SDKs. Nothing is filled in from memory or older copies of the page.

Sources