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.jsonExpo SDK version table
| Expo SDK | React Native | React | Min Node.js | Android min / compileSdk / targetSdk | iOS min / Xcode | Bundled modules | Status |
|---|---|---|---|---|---|---|---|
| SDK 58 | 0.88.1 | 19.3.0 | 22.13.x | 7+ / 37 / 36 | 16.4+ / Xcode 26.4+ | 124 | Supported |
| SDK 57 | 0.86.3 | 19.2.3 | 22.13.x | 7+ / 36 / 36 | 16.4+ / Xcode 26.4+ | 123 | Supported |
| SDK 56 | 0.85.3 | 19.2.3 | 20.19.x | 7+ / 36 / 36 | 16.4+ / Xcode 26.4+ | 122 | Supported |
| SDK 55 | 0.83.10 | 19.2.0 | — | — | — | 120 | Not on current docs page |
| SDK 54 | 0.81.5 | 19.1.0 | — | — | — | 119 | Not on current docs page |
| SDK 53 | 0.79.6 | 19.0.0 | — | — | — | 114 | Not on current docs page |
| SDK 52 | 0.76.9 | 18.3.1 | — | — | — | 114 | Not on current docs page |
| SDK 51 | 0.74.5 | 18.2.0 | — | — | — | 105 | Not on current docs page |
| SDK 50 | 0.73.6 | 18.2.0 | — | — | — | 103 | Not 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-nativein 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 runnpx 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.