RORK LABJP
APPLE — Apple's event is September 9, with the iOS 27 release candidate landing the same day. General release is September 14, preorders September 12, and retail September 18TESTING — That leaves five working days between the RC and the public release. For React Native and Expo apps, it is the last clean window to run everything against Xcode 27 and the iOS 27 SDKSIRI — iOS 27 rebuilds Siri from the ground up, which puts anything using Siri Intents or voice input at the top of the list to verifyPLAY — Google Play's target API level 36 requirement took effect on August 31. If you did not make it, an extension request through November 1 is still available in Play ConsoleEXPO — expo@57.0.17 moves React Native to 0.86.3 and clears the Hermes V1 memory regression that hit apps importing react-native-worklets or reanimatedRORK — The two Rork products build different things: the original generates React Native via Expo, while Rork Max generates Swift and compiles it on a cloud Mac fleetAPPLE — Apple's event is September 9, with the iOS 27 release candidate landing the same day. General release is September 14, preorders September 12, and retail September 18TESTING — That leaves five working days between the RC and the public release. For React Native and Expo apps, it is the last clean window to run everything against Xcode 27 and the iOS 27 SDKSIRI — iOS 27 rebuilds Siri from the ground up, which puts anything using Siri Intents or voice input at the top of the list to verifyPLAY — Google Play's target API level 36 requirement took effect on August 31. If you did not make it, an extension request through November 1 is still available in Play ConsoleEXPO — expo@57.0.17 moves React Native to 0.86.3 and clears the Hermes V1 memory regression that hit apps importing react-native-worklets or reanimatedRORK — The two Rork products build different things: the original generates React Native via Expo, while Rork Max generates Swift and compiles it on a cloud Mac fleet
Articles/Dev Tools
Dev Tools/2026-09-02Intermediate

I counted how many versions expo install starts recommending after one patch bump

What expo install recommends is tied to the patch version of expo itself. I measured the ledger diff against the npm registry, how far npm install drifts, and the one check worth adding to a generated project.

Expo195Rork549Dependencies3npm4CI6

Premium Article

I wanted a fast list in a generated project, so I added FlashList. Muscle memory took over: npm install @shopify/flash-list. The build passed. The list scrolled. A few days later npx expo-doctor came back red on exactly that one line.

I had 2.3.2 installed. Expo expected 2.0.2 — three minors apart. That gap produces no error and no warning. It only becomes visible on the day you deliberately run the check.

What stuck with me was the other question: where does Expo get 2.0.2 from? The answer lives inside the expo package itself, and it gets rewritten on every patch release.

Where the ledger expo install reads actually lives

npx expo install <package> does not fetch the npm latest. It reads bundledNativeModules.json, shipped inside the installed expo package, and installs whatever version is written there.

# The ledger is a plain JSON file in node_modules
cat node_modules/expo/bundledNativeModules.json | head -20

As of 2026-09-02, expo@57.0.19 ships a ledger with 123 entries: 87 Expo-owned modules (expo-* and @expo/*) and 36 third-party packages.

That third-party list is not an afterthought. Sentry, Stripe, FlashList, Skia, Lottie, react-native-maps, react-native-webview, AsyncStorage — the packages you reach for in the first week of a real project. So expo install is not merely resolving Expo's own modules. It carries a statement of the form "for this SDK, we verified this version" for the community libraries too.

npm install never looks at that statement. It installs the registry's latest. That is the fork in the road.

Two patch releases, four days, 30 entries moved

If the ledger were pinned per SDK, this would be a short article. It is not. The contents change with each patch of expo.

I pulled several patch tarballs from the npm registry, extracted just the ledger, and wrote a small script to count the diff.

// drift.mjs — diff the ledgers of two expo patch releases
import { readFileSync } from "node:fs";
 
const read = (v) =>
  JSON.parse(readFileSync(`x${v}/package/bundledNativeModules.json`, "utf8"));
 
const [from, to] = process.argv.slice(2);
const a = read(from), b = read(to);
 
const moved = Object.keys(a).filter((k) => k in b && a[k] !== b[k]);
const pinned = Object.entries(b).filter(([, r]) => /^\d/.test(r)); // no ~ and no ^
 
console.log(`ledger entries: ${Object.keys(b).length}`);
console.log(`${from} -> ${to}, entries moved: ${moved.length}`);
console.log(`exact pins (no range): ${pinned.length}`);

The run:

$ node drift.mjs 57.0.17 57.0.19
ledger entries: 123
57.0.17 -> 57.0.19, entries moved: 30
exact pins (no range): 22

57.0.17 was published on 2026-08-26 (UTC) and 57.0.19 on 2026-09-01. Roughly four days apart, 30 of 123 recommendations moved.

Widen the window and it grows. Comparing 57.0.8 (published July 22) with 57.0.17 gives 54 moved entries — all inside the same SDK 57.

Here is the release cadence of the 57 line, for context.

VersionPublished (UTC)
57.0.142026-08-17
57.0.152026-08-20
57.0.162026-08-24
57.0.172026-08-26
57.0.182026-08-28
57.0.192026-09-01

Every three to four days. And since "expo": "~57.0.19" allows any 57.0.x patch, the day you regenerate your lockfile changes the answer expo install gives you.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You will be able to verify for yourself whether dependencies added after generation still sit inside the combination Expo actually tested
You will be able to tell a version-ledger mismatch from a broken lockfile, instead of losing half a day to the wrong suspect
You will be able to decide, backed by the measured 30-entry shift across one patch bump, whether an expo patch upgrade counts as a harmless change in your project
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
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 $15 for lifetime access
View Membership →

Related Articles

Dev Tools2026-07-30
What Renovate may bump in an Expo app, and what it must never touch
Turning on automated dependency updates in a Rork-generated app also hands Renovate the 123 packages Expo SDK 57 pins. Measured on 2026-07-30, six of them sit a full major version behind npm latest. Here is how to generate the ignore list from the SDK instead of maintaining it by hand.
Dev Tools2026-07-09
Holding Layer Boundaries in a Rork-Generated Expo App with ESLint and dependency-cruiser
Long-lived Rork-generated Expo apps quietly accumulate screens that import the API client directly. Here is how I froze 214 existing violations as a baseline, eliminated 17 circular dependencies, and made CI reject anything new for 38 extra seconds.
Dev Tools2026-06-17
Auditing the Dependencies Rork Generates: A Supply-Chain Hygiene Routine
Even a four-screen Rork app pulls in 900+ transitive dependencies. Before a vulnerability lands and you cannot tell which app is affected, build an audit habit with npm ls, npm audit, overrides, and depcheck — framed for running several apps at once.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →