What to migrate after React Native 0.87 and the Expo SDK 58 beta

What to migrate after React Native 0.87 and the Expo SDK 58 beta

React Native 0.87 makes Strict TypeScript the default and adds AGP 9 support. The Expo SDK 58 beta generates SceneDelegate for iOS 27. What to do first.

React NativeExpoTypeScriptMetro

React Native 0.87 shipped on August 11, 2026, Expo Go for iOS started requiring login on September 3, and the Expo SDK 58 beta arrived on September 15. Together they bring Strict TypeScript as the default, the first support for Android Gradle Plugin 9, experimental Swift Package Manager on iOS and a generated SceneDelegate for the iOS 27 SDK. If you maintain a React Native or Expo app, the TypeScript change and the scene lifecycle are the two items you cannot postpone for long.

What shipped

React Native 0.87

The release contains 265 commits from 74 contributors, and with it the 0.84.x line is no longer supported. The main changes:

  • Strict TypeScript API by default. Deep imports into react-native/Libraries/* are now type errors. A temporary opt-out exists and works only through 0.88.
  • Metro 0.87. Metro moves from 0.84 to 0.87. Source map generation is 2x faster and uses half the memory, and TypeScript and ESM config files are now stably supported.
  • Swift Package Manager on iOS. Support is experimental and opt-in. CocoaPods stays the default.
  • Android Gradle Plugin 9. 0.87 is the first React Native release that supports it.
  • Node.js 22.13.0 or later is required.
  • Removals and deprecations. InteractionManager is removed in favor of requestIdleCallback, several StatusBar props are removed, and ImageBackground is deprecated.

Expo Go now requires login on iOS

From September 3, 2026, the latest Expo Go for iOS requires you to be logged in, both in the Expo CLI and in the app, to run projects. Simulators and development builds are exempt. Android will follow.

Expo SDK 58 beta

The SDK 58 beta was published on September 15, 2026, built on the React Native 0.88 release candidate. Expo is clear about timing: "We will move to the stable release when React Native 0.88 ships." Neither had a stable release by the end of September.

The most important change for iOS is that npx expo prebuild now generates SceneDelegate.swift, because the iOS 27 SDK requires the UIScene lifecycle. Expo Modules 2.0 is in beta, and SDK 58 requires Node 22.13+, 24.3+ or 26+.

Two more items from the period. EAS Observe became generally available on August 20, 2026. For reference, the latest stable SDK at the end of September, SDK 57, shipped on June 30 with React Native 0.86 and React 19.2.

What it means for your app

Strict TypeScript surfaces old shortcuts

Deep imports into react-native/Libraries/* always reached into internals. With 0.87 they fail type checking, in your code and in any library or shim that does the same. The opt-out works only through 0.88, so treat it as a migration window. Run the type checker after upgrading, list every deep import it reports, and decide for each one whether to replace it, patch the library or wait for an upstream release.

Removed APIs need code changes

Code that still uses InteractionManager has to move to requestIdleCallback. Check your StatusBar usage against the release notes for the removed props, and plan a replacement for ImageBackground while it is only deprecated.

The scene lifecycle reaches React Native

React Native apps run inside a UIKit host on iOS, so the UIScene requirement of the iOS 27 SDK applies to them. Bare and prebuild apps must regenerate their native projects for the scene lifecycle before building with Xcode 27. With SDK 58, prebuild handles it by generating SceneDelegate.swift. If you maintain the iOS project by hand, the migration is yours to do, and Apple's guide is TN3187.

Toolchain floors move

Node.js 22.13.0 is the new minimum for React Native 0.87, and SDK 58 accepts Node 22.13+, 24.3+ or 26+. CI images pinned to older Node releases will need an update before anything else works. On Android, 0.87 is the first release that supports AGP 9, which helps if other projects in your repository have already moved, for example a Flutter 3.47 app verified against AGP 9.1.0.

Expo Go login changes onboarding

The login requirement affects onboarding docs, CI preview flows and workshops, anywhere someone used to open a project in Expo Go without an account. Development builds avoid the requirement, and so do simulators.

A practical checklist

  1. Upgrade Node.js on developer machines and CI to 22.13.0 or later, or to 24.3+ or 26+ if you plan to test SDK 58.
  2. Upgrade to React Native 0.87 on a branch and run the type checker. Fix deep imports into react-native/Libraries/* in your own code first.
  3. List the libraries that still fail Strict TypeScript, follow or open upstream issues, and use the opt-out only as a temporary bridge through 0.88.
  4. Replace InteractionManager with requestIdleCallback, update removed StatusBar props and plan the move away from ImageBackground.
  5. If you are still on 0.84.x, schedule the upgrade now, since that line is unsupported.
  6. For Expo apps, try the SDK 58 beta on a branch, run npx expo prebuild, confirm that SceneDelegate.swift is generated, and build with Xcode 27.
  7. For bare React Native apps without prebuild, migrate the iOS project to the scene lifecycle following TN3187.
  8. Update onboarding and workshop material for the Expo Go login, and move CI previews to development builds.

My take

Strict TypeScript by default is overdue. Deep imports have always been fragile, and making them type errors pushes the ecosystem onto public APIs. The cost lands on library maintainers first, so expect some patching and pinned versions before everything type-checks cleanly.

The UIScene change is where Expo's prebuild model pays off. Prebuild turns most of a manual migration into a regeneration step, while teams that hand-maintain their iOS project carry the work themselves.

I would not ship the SDK 58 beta to production. Expo has tied the stable release to React Native 0.88, so do the migration work on a branch now and switch when both are stable. The Expo Go login is the change that will annoy people most. Development builds were already the better default for teams, and this gives you a reason to move.


Sources