Stack · Expo
Release testing for Expo apps
EAS Update ships JavaScript changes over the air without a store submission, and EXPO_PUBLIC_ variables are inlined into that bundle. Both are release surfaces the checklist treats as such.
Termsclient bundle (the JavaScript your app sends to the browser or ships inside the mobile app; anyone can read it) · store sandbox (Apple's and Google's test environments where purchases run without real money) · critical flow (a path a user takes that costs money or trust if it breaks: sign-up, checkout, invite, export) · verdict (a one-word release result (pass, pass with findings, fail) with the findings and the checklist version behind it) · CI (the pipeline that builds and tests every change before it can be merged or deployed)
What Expo changes in a codebase
The framework most new React Native apps use, with EAS Build for binaries and EAS Update for over-the-air JavaScript updates that bypass the store submission step.
An OTA update is one command from any machine with the right token. The checklist requires the same verdict before an update publishes as before a store build, and requires that republish (the rollback) has been exercised.
Defaults, from the docs verified 2026-09-21
| Default, from the docs | Why it matters for release testing | Source |
|---|---|---|
| EAS Update enables "an app to update its own non-native pieces (such as JS, styling, and images) over-the-air"; native code changes need a new build. | An OTA update is a release; MB-04 requires the same verdict step before publish. | docs verified 2026-09-21 |
| "your updates need to follow the App Store and Play Store guidelines, including the content of the updates and how you use them. This usually means changes to your app's behavior need to be reviewed." | A behaviour change shipped OTA to avoid review is a store-policy risk as well as a testing gap. | docs verified 2026-09-21 |
| To roll back a problematic update "you can republish a previous, stable version on top of the problematic one." | MB-04's pass criterion includes having exercised republish this month. | docs verified 2026-09-21 |
| "Do not store sensitive info, such as private keys, in EXPO_PUBLIC_ variables"; they "will be visible in plain-text in your compiled application." | SC-03 lists every EXPO_PUBLIC_ variable; SC-01 scans the compiled bundle. | docs verified 2026-09-21 |
Each row was read on the linked page on the date shown. Docs change; the date tells you how current the row is. Expo documentation.
Failure patterns most associated
- criticalIn-app purchase untested in the store sandbox
The purchase code was only run against a mock, so restore, failed payment and receipt validation break on real devices.
- highPrivate value under a public environment prefix
A variable named with the framework's public prefix is inlined into the client, even though its value should have stayed private.
- highUser content rendered as markup
Text a user typed is inserted into the page as HTML, so a script in a name or comment runs in other users' browsers and can take their session.
- highModel output rendered or executed as trusted
Text from the model is inserted as HTML, used as a URL, or run as a command without validation.
- highProduction deploy from a local push
Anyone with the CLI or a hosting token can deploy to production without review.
- highRollback never rehearsed
The team believes it can roll back but has not done it, and finds out the migration or the cache makes it slow or impossible.
- highPermission denial crashes or blanks the screen
The app assumes camera, location or notification permission was granted, and a denial leaves a blank screen or a crash.
- highOnly the latest OS version tested
The release runs on the developer's device and fails on the minimum supported OS version.
How the checklist adapts
- MB-04 reads the update pipeline and requires a recorded verdict before publish and a republish exercised this month.
- SC-03 lists every EXPO_PUBLIC_ variable; SC-01 scans the compiled bundle.
- Store-guideline behaviour changes shipped OTA are flagged in the verdict.
- All React Native items apply; Expo adds the OTA channel and EAS secrets to the configuration review (SC-04).
Release checklist, five of the published items
v1.0 · verified on 2026-09-21Purchase flows verified in sandbox on target OS versions
manual Complete each purchase and restore flow with an Apple sandbox account and a Play license tester on the oldest and newest supported OS versions.
Every purchase, restore and failed-payment path ends in the entitlement state the written rules specify on both OS versions.
Public environment prefix carries only public values
manual List every variable with a client-exposed prefix (NEXT_PUBLIC_, EXPO_PUBLIC_, VITE_, REACT_APP_) and confirm each one is meant to be public.
Every client-prefixed variable is documented as public; no variable holds a key that can write or read beyond the anonymous role.
User-supplied content renders inert
automated Submit script, event-handler and URL payloads through every free-text field and view every screen that displays them.
No payload executes on any screen; content displays as text.
Model output is treated as untrusted before rendering or execution
automated Force outputs containing HTML, script, markdown links and shell-like strings through every render and execution path.
Output renders inert; nothing from the output is executed, evaluated or used as a URL without validation.
Production deploys are triggered only from the reviewed branch in CI
manual Read the deployment configuration and the last 10 production deploy records.
Every production deploy in the sample originates from CI on the protected branch; no local push or agent session deployed to production.
Which plan fits
Growth $5,900/mo
Growth for one platform; Scale for both.
For 8-15 engineers, daily releases, web plus API or one mobile platform. Limits, cadence and what is not included.
Questions
Expo app store release checklist
Mobile app release gate checklist
Get a risk list for your codebase
5 business days, $1,200, credited to the first month.