Expo SDK 58 was released on October 15, 2026, and it's a big one. It ships React Native 0.88, is built for iOS 27, and makes several Expo Router features that were experimental for a long time stable: native tabs, data loaders, SSR, and middleware. If you skipped the deliberately small SDK 57, this is the release where you'll notice the difference.
Here's what's new, what breaks, and how to upgrade safely.
The highlights at a glance
- React Native 0.88 (includes 0.87): Swift Package Manager tooling,
fontVariationSettingsonText,ArrayBufferin TurboModules, DevTools improvements. - Built for iOS 27: scene-based app life cycle, resizable iPhone apps, and iPhone Duo (foldable) layouts.
- Expo Router: native tabs, toolbars, data loaders, SSR, and middleware are stable.
- App Intents (alpha): expose app actions to Siri, Shortcuts, Spotlight, and Apple Intelligence.
- Expo UI: recycling lists, native iOS navigation components, new Jetpack Compose components.
- Android home screen widgets via
expo-widgets. - Faster builds: prebuilt
expo-modules-coreon Android, a smarter fingerprint default, and an experimental Rust-based transformer for about 2× faster cold bundling.
Built for iOS 27 and iPhone Duo
iOS 27 requires the UIKit scene-based life cycle, and it makes iPhone apps resizable. SDK 58 adopts both. Prebuild now generates a SceneDelegate.swift, so if you customized AppDelegate.swift (deep links, push handling, or a third-party SDK's init code), read the scene life cycle migration guide before you upgrade.
Apps built with SDK 58 are also ready for iPhone Duo, where system bars move into a side rail. The safest path is to rely on Expo Router's Stack and NativeTabs (they adapt automatically) and to keep react-native-safe-area-context up to date. Hard-coded top or bottom padding is the thing most likely to look broken.
Expo Router: native tabs and data loaders are stable
This is the headline for most app developers. Native tabs, which render the real system tab bar (Liquid Glass on iOS, Material on Android), move to a stable import path:
// app/(tabs)/_layout.tsx
import { NativeTabs } from "expo-router/native-tabs"
export default function TabLayout() {
return (
<NativeTabs>
<NativeTabs.Trigger name="index">
<NativeTabs.Trigger.Label>Home</NativeTabs.Trigger.Label>
<NativeTabs.Trigger.Icon sf="house.fill" md="home" />
</NativeTabs.Trigger>
<NativeTabs.Trigger name="settings">
<NativeTabs.Trigger.Label>Settings</NativeTabs.Trigger.Label>
<NativeTabs.Trigger.Icon sf="gear" md="settings" />
</NativeTabs.Trigger>
</NativeTabs>
)
}
If you used expo-router/unstable-native-tabs on SDK 55–57, update the import. We cover the full API (badges, search tabs, minimize-on-scroll) in our Expo Router native tabs guide.
Data loaders, server-side rendering, and middleware no longer need experimental flags either, and server output is now the default for web. The navigation core was also reworked. withLayoutContext is deprecated in favor of integrateWithRouter, so if you wrap a custom navigator, plan that migration.
App Intents: Siri, Shortcuts, and Apple Intelligence
The new expo-app-intents package (alpha) exposes your app's actions and content to Siri, Shortcuts, Spotlight, and Apple Intelligence. You set it up with:
npx expo-app-intents init
Think "Siri, mark my workout as done" or a Shortcut that opens a specific screen. It's alpha, so don't build a core feature on it yet, but it's worth prototyping if your app has obvious one-tap actions.
Expo UI: recycling lists and native navigation
Expo UI, which lets you render real SwiftUI and Jetpack Compose components from React, gets a meaningful upgrade:
List,LazyVStack,LazyHStack,LazyColumn, andLazyRownow virtualize and recycle rows, so large data sets are practical.- New iOS navigation components:
NavigationStack,Toolbar,NavigationLink, andNavigationDestination. - New Compose components and SwiftUI modifiers, plus a screenshot for every component in the docs.
Android widgets, faster builds, and agent tooling
expo-widgetsnow supports Android. Widgets run their own JavaScript bundle on a dedicated Hermes runtime.- Prebuilt
expo-modules-coreon Android roughly halved a clean debug build in Expo's own testing. - Expo Modules 2.0 beta lets you write plain Swift or Kotlin classes annotated for JavaScript access instead of using the DSL.
- Fingerprint default is now
balanced, so version bumps inapp.jsonno longer force a native rebuild. - Experimental Rust transformer (
experiments.noxcturnalTransformWorker) gives roughly 2× faster cold bundling. @expo/agent-cli(experimental) gives AI coding agents machine-readable access to Expo CLI, EAS CLI, andexpo-doctor.
Breaking changes to check before upgrading
These are the changes most likely to break an existing app:
- Strict React Native TypeScript API: deep imports from
react-native/Libraries/*are now type errors, and ref types changed. - React Native removals:
InteractionManageris gone (userequestIdleCallback), along with theTouchableroot export and someStatusBarandModalprops. - iOS scene-based life cycle: app delegate callbacks are delivered differently.
expo-file-system:File.write()is now async, so addawait.expo-sqlite: libSQL support was removed.expo-notifications: foreground notifications now show by default.- Android: R8 is enabled by default in release builds. Test release builds, not just dev builds.
@expo/ui:Hosttop-aligns content on iOS, and stackspacingdefaults changed.- macOS isn't supported in SDK 58 yet.
How to upgrade to Expo SDK 58
- Make sure you're on Node.js 22.13+ (or 24.3+, or 26+).
- Upgrade the SDK and align every Expo package:
npx expo install expo@^58.0.0 --fix
- Run the doctor and fix anything it flags:
npx expo-doctor@latest
- Search your code for
InteractionManager,react-native/Libraries/,unstable-native-tabs, andFile.write(. - Rebuild your development builds (
eas build --profile development). Old dev clients won't load SDK 58 bundles. - Test a release build on Android because of the R8 default.
Starting fresh? Create an SDK 58 project with:
npx create-expo-app@latest --template default@sdk-58
Should you upgrade now?
If you're on SDK 57, yes. The jump is manageable, and stable native tabs plus iOS 27 readiness are worth it before Apple's next review cycle. If you're on SDK 55 or older, upgrade one SDK at a time and read each changelog.
Want a head start? Our Expo templates and free components target current SDKs with the New Architecture, TypeScript, and NativeWind, so you start from code that already follows SDK 58 conventions. For the libraries that pair best with this release, see our best React Native libraries for 2026 roundup.