◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 33 days left. If your app calls it, check the migration target●SDK 58 ISSUE — Early reports include Android widgets not refreshing on a schedule and Stripe linking statically●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 33 days left. If your app calls it, check the migration target●SDK 58 ISSUE — Early reports include Android widgets not refreshing on a schedule and Stripe linking statically●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/App Dev
◇ App Dev/2026-10-28Beginner

"Project is incompatible with this version of Expo Go": Three Places to Check Before Blaming Your Project

When Expo Go says your project needs a newer Expo Go, there are three things to compare before you delete node_modules: the project's SDK, the SDK the app supports, and, on Android, a real mix-up in Expo Go 56.0.1. Here is the order I check them in.

Expo Go7Expo231SDK3Troubleshooting52Device Testing9Rork606

I scanned the QR code and two lines of English appeared in Expo Go: "Project is incompatible with this version of Expo Go," followed by "This project requires a newer version of Expo Go."

I had just installed the app. So I assumed my project was the broken part. I deleted node_modules, reinstalled, cleared the cache, restarted, and got the same screen again. Only then did I stop typing.

What I realized later is that the message never says anything is broken. It says two things didn't match, and it doesn't tell you which one is wrong. So before I touch anything now, I split the question into three comparisons.

The message is the result of comparing three numbers

Expo Go compares the SDK version the project claims against the SDK versions it supports itself. If they don't match, you get that screen and nothing loads.

That means the project isn't the only suspect. The Expo Go build on your phone can be the one that's off.

OrderWhat to checkWhat a mismatch looks like
1The SDK your project usesIt disagrees with Expo Go, so every project shows the same screen
2The SDK Expo Go supportsAn old build, or a build for a different SDK, is installed
3The Android Expo Go build itselfThe SDK matches, yet one specific build rejects it

The first two you can verify by reading a number. The third is rare, but it really happened in summer 2026, so I'll cover it below.

Check one: turn the project's SDK into a number

Start by finding out what your project claims to be. This works the same for a project exported from Rork and one you created by hand.

# Run from the project root
grep -E '"(expo|react-native)"' package.json
 
# List dependencies that don't match what this SDK expects
npx expo install --check

The first line shows the expo version (for example, ~56.0.11 means SDK 56) and the react-native version. The second lists packages that don't fit the SDK. If red lines pile up there, fix the project first and leave Expo Go alone.

I'd write the number down in one line, because you'll set it next to the Expo Go side in the next step.

// check-sdk.js — a small note-to-self script
// Usage: node check-sdk.js
const pkg = require('./package.json');
const dep = { ...pkg.dependencies, ...pkg.devDependencies };
 
const expo = dep.expo || '(expo not found)';
const major = String(expo).match(/(\d+)\./)?.[1] ?? '?';
 
console.log(`expo        : ${expo}`);
console.log(`SDK (guess) : ${major}`);
console.log(`react-native: ${dep['react-native'] ?? '(not set)'}`);
// Compare this SDK number with the "Supported SDK"
// shown in Expo Go's settings screen.

Why a script for something this small? Because three numbers in a row keep my hands moving, while reopening package.json and rereading an English error screen does not.

Check two: which SDK does your Expo Go accept?

Next, find out what your installed Expo Go supports. The app's settings screen shows the supported SDK. In one thread, someone reported that the build from the Play Store showed "Supported SDK 54," so SDK 55 and 56 projects would not open.

A store build can lag behind the newest SDK. When that happens, open Expo's official page (expo.dev/go), pick the SDK version and your device type, and follow the install instructions it gives for that SDK.

The other option is to move the project to the SDK your Expo Go supports. But lowering an SDK ripples through your dependencies. I try reinstalling Expo Go before I downgrade the project. Easy-to-undo steps first, hard-to-undo steps last. I keep to that even when I'm in a hurry, maybe especially then.

Check three: the SDK matches, and it still fails

Sometimes checks one and two both pass and you still see the same screen. In June 2026, exactly this was reported in the expo/expo repository on GitHub.

According to the report, Expo Go 56.0.1 for Android rejected every SDK 56 project, including a fresh empty template. It failed whether the project loaded from the dev server or from an EAS Update.

The reporter isolated the cause carefully. The project declared SDK 56.0.0, and the server's version table said a 56.0.1 client should accept it. When they rewrote only that manifest value to 56.0.1 through a local proxy, the project opened. Installing the previous release, Expo Go 56.0.0, opened the same project with no rewrite at all.

Their reading was that the 56.0.1 client compared the project's SDK string against its own app version string. That would mean it wasn't asking "is this SDK 56?" at all. I only read the report; I did not reproduce this, and the root cause is the reporter's inference.

Per the comments, two things helped:

FixWhat it involvesCaveat
Install the previous buildDownload the Expo Go 56.0.0 APK from the official releases page and install it over the existing appThis was the workaround at the time. Check the official page first today
Follow the official pageChoose SDK 56 and Android on expo.dev/go and reinstallA maintainer pointed people to this route

The issue was closed on October 26, 2026. The maintainers noted that a working Expo Go for SDK 56 is available on the official page and that no new reports had come in since June. If you meet this screen today, reinstalling from that page comes first.

The counterintuitive part: newest wasn't safest

I had always assumed the latest app build was the safest one. This case went the other way. Within the same SDK 56, a single patch number decided which projects opened and which didn't.

That doesn't mean you should always install an older build. The lesson I took is narrower: when updating doesn't fix it, keep "try the previous release" on your list of options.

When it still won't open

If all three checks pass and nothing changes, consider switching from Expo Go to a development build, which installs as your own app. Expo Go is a sandbox for learning and prototyping, and it isn't built for testing setups close to production.

If you only want to try the app on a real iPhone, going through Rork Companion can be shorter. For connection trouble, see when the preview doesn't appear on the same Wi-Fi. If the QR code scans but nothing opens, the check order for a QR that scans but won't open covers a different failure.

And if you're wondering how far you can go on real devices without paying, Companion's free tier and when to pay Apple's $99 is a useful companion read.

My first three minutes next time

As an indie developer, I tend to skip steps in the week an app update is due. When I meet this screen now, I run the grep for the SDK number, open Expo Go's settings, and open the official install page, in that order. Deleting node_modules comes after.

For today, write the expo version from your package.json on a single line somewhere you'll find it. With that line in hand, the next time this screen appears, you'll spend noticeably less time guessing.

Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

◇ App Dev2026-10-27
You Changed the Environment Variable and Rebuilt for Android, but the App Still Points at the Old Server. Look at the Line That Says UP-TO-DATE
Change only an EXPO_PUBLIC_ value and rebuild a release for Android, and the bundle task can be skipped as UP-TO-DATE, leaving the old value inside. I reproduce the same behavior in a minimal Gradle project and cover how to spot it and what to do until it is fixed.
◇ App Dev2026-10-26
Linking.canOpenURL Keeps Returning false on iOS Only — Declaring LSApplicationQueriesSchemes, and the 25-Entry Cap Coming With iOS 27
When Linking.canOpenURL returns false on iOS no matter what is installed, the cause is usually a missing Info.plist declaration. Here is how to fix it in Expo's app.json, what Android needs instead, and how to prepare for the 25-entry limit for apps linked on iOS 27.
◇ App Dev2026-10-22
Expo SDK 58 With Stripe: pod install Stops, and Whether to Turn Off Precompiled Modules or Wait
useFrameworks is already dynamic, yet pod install says Stripe is static and the SDK 58 iOS build stops. The reported conditions, three ways out, and a small script to check your own project first.