NewsJavaScriptDeveloper Tools

Expo SDK 56 Beta: What React Native Developers Need to Know

Expo SDK 56 beta release featuring React Native 0.85.2 and Hermes v1 performance improvements
Expo SDK 56 beta brings 40% faster Android cold starts and universal native components

Expo SDK 56 beta is live, and it ships React Native 0.85.2, Hermes v1 as the default JavaScript engine, and the kind of performance numbers that will make your Android users notice the difference. Android cold starts are 40% faster. iOS builds are 50%+ faster. GC pause time drops 73%. But the upgrade is not a one-liner — it breaks navigation imports for Expo Router projects, kills the vector icons transitive dependency, and raises the iOS minimum to 16.4. If you’re still on SDK 53, what you’re actually facing is three separate migrations, not one. Here’s what changed and what you need to do about it.

What SDK 55 Built (and Why It Matters Now)

SDK 56 doesn’t exist in a vacuum. SDK 55, released earlier this year, made one consequential decision: the New Architecture is mandatory. No opt-out. The newArchEnabled: false flag is gone, and SDK 54 was the final version to support the legacy architecture at all. That shift forced a lot of teams to deal with library compatibility issues and migration pain earlier this year.

SDK 56 is the performance payoff on that investment. With the New Architecture fully in place, Hermes v1 as the default engine, and React Native 0.85.2 underneath, you’re getting a meaningfully faster runtime than what shipped in SDK 54 — without having to do anything beyond upgrading.

Hermes v1: The Real Numbers

Hermes v1 ships with a rewritten compiler, a new bytecode format, and concurrent garbage collection (Hades). The measured improvements over JSC are significant: 29% faster app startup, 38% lower memory usage, 25% smaller bundle size, and a 73% reduction in GC pause time. Combined with the New Architecture’s direct JSI bridge, Android cold starts hit 40% faster in testing.

These aren’t aspirational figures from a benchmark crafted to look good. They reflect what the engine does with the modern JavaScript patterns React 19.2 actually uses. If your app felt sluggish on older devices, this is where that gets fixed — not in your code, but in the runtime your code runs on.

Three Breaking Changes That Matter

1. Expo Router Breaks @react-navigation Imports

This one will catch teams off guard. Expo Router now maintains its own fork of the React Navigation dependencies it relies on. As a result, expo-router no longer lists react-navigation as a direct dependency — and any direct imports from @react-navigation/* in an Expo Router project will break.

The fix is a codemod, and you should run it before anything else:

npx expo-codemod sdk-56-expo-router-react-navigation-replace [src]

What this looks like in practice:

// Before — breaks in SDK 56 with Expo Router
import { useNavigation } from '@react-navigation/native';

// After
import { useNavigation } from 'expo-router';

Run the codemod, review the diff, commit. Don’t skip this step.

2. iOS Minimum Raised to 16.4

SDK 56 drops support for iOS 15.x. Devices that fall off the list: iPhone 6s, iPhone 7, iPhone SE (first generation), iPad mini 4, and iPad Air 2. The last time the minimum changed was August 2024. If you maintain custom Expo modules, update your podspec deployment target.

Before you upgrade, check your analytics. If a meaningful portion of your users are on iOS 15.x, you need to weigh that before shipping SDK 56. This isn’t a theoretical concern for B2B enterprise apps or apps with older user demographics.

3. @expo/vector-icons Is Now On You

The expo package no longer pulls in @expo/vector-icons as a transitive dependency. If your project used it without explicitly declaring it in package.json, it will break. You have two paths: explicitly add @expo/vector-icons to your dependencies to keep things working, or migrate to the scoped @react-native-vector-icons/* packages (one per icon set). A codemod is available for the migration.

Universal Components: Finally Stable

The Jetpack Compose (Android) and SwiftUI (iOS) APIs in Expo UI are now stable and included in the create-expo-app default template. The stable component set covers the fundamentals: Host, Row, Column, ScrollView, Text, TextInput, Button, Switch, Slider, Checkbox, and BottomSheet.

The architecture is clean: one API, native rendering per platform. On Android, it delegates to @expo/ui/jetpack-compose. On iOS, to @expo/ui/swift-ui. On web, JS implementations via react-dom. The new useNativeState hook lets JavaScript directly control native state — useful for animations and form controls that need synchronous, flicker-free updates. This is a genuine win for teams that have been building cross-platform component sets manually.

Build Speed and What You Get Automatically

On iOS, Expo now ships prebuilt XCFrameworks for heavy modules. You’re no longer compiling those from source on every build — which accounts for most of the 50%+ build time reduction. On Android, a new Kotlin compiler plugin eliminates reflection-based module introspection with build-time metadata generation. Metro also now supports HTTPS and TLS configuration, which matters for teams in secure network environments.

Should You Upgrade Now?

SDK 56 is in beta, so the honest answer depends on where you are. For a greenfield project or a development environment, there’s no reason to wait — the beta is stable enough to work in, and the performance gains are real. For a production app on SDK 55, watch the beta cycle and plan to upgrade when stable lands (typically 4-6 weeks after beta).

The trap to avoid: if you’re on SDK 53 or below, you’re not doing a single upgrade. You’re doing 53 → 54, then 54 → 55, then 55 → 56. Expo’s guidance is explicit about upgrading one version at a time. Jumping from 53 to 56 directly means crossing multiple React Native major versions, a Reanimated v3 to v4 migration, and the full New Architecture mandate — with no clean way to attribute which version broke what.

The codemod-first workflow is the right approach: run npx expo install --fix, run the Router codemod, check your iOS deployment targets, audit vector icon usage, and run your test suite. The migration is more mechanical than painful — provided you don’t skip steps and don’t try to jump multiple versions at once. Check the official New Architecture migration guide for detailed checklists.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:News