Expo SDK 56 is here and 3 things actually matter


Hey Reader, 👋

Expo SDK 56 beta dropped last week, bundling React Native 0.85.2 and React 19.2.3.

There’s a lot of exciting things in this release. In this email, I will cover actually matters for indie devs shipping apps.

  • Expo UI going production-ready (and the 5 libraries you can finally delete)
  • Performance wins that don’t require any code changes (40% faster cold starts)
  • Expo Router cutting ties with React Navigation
  • The breaking changes that are actually opportunities

First, a quick word from this week’s sponsor, then we get into it.

Build AR/VR Apps in React Native - No Unity Required

​ReactVision Studio is a visual scene editor for React Native developers. Design AR/VR scenes with drag-and-drop, generate 3D assets from text prompts, and ship to phones and Meta Quest from one codebase. No game engine, no new language - just the React Native stack you already know.

Open source, MIT-licensed, 100k+ npm installs, Expo-compatible. Try now for free.​


Expo UI is now stable

After 3 SDK cycles of iteration (53, 54, 55), Expo UI is officially production-ready. The SwiftUI and Jetpack Compose APIs are stable, it’s in the default create-expo-app template, and it works in Expo Go out of the box.

That’s the headline. But here’s what makes it actually useful:

Universal components. You no longer have to split files into .ios.tsx and .android.tsx anymore. One import, native on both platforms: Host, Row, Column, Text, TextInput, Button, Switch, Slider, Checkbox, BottomSheet.

Web is supported too, but still experimental.

Drop-in replacements. Expo UI now replaces some of the most installed libraries in our ecosystem:

  • @react-native-segmented-control/segmented-control
  • @react-native-picker/picker
  • @react-native-community/datetimepicker
  • @react-native-masked-view/masked-view
  • @gorhom/bottom-sheet

Most migrations are just an import swap. That’s it. Fewer dependencies, fewer libraries to track on upgrade day.

Performance: Faster everywhere

This is the most under-hyped part of the release. Real numbers below.

expo-modules-core on Android. A new Kotlin compiler plugin replaces reflection with build-time code generation. Benchmarks show ~40% faster cold starts and ~33% faster first render. Activity.onCreate dropped from 93ms to 55ms. Zero app-side changes required.

Precompiled Expo packages. SDK 56 ships prebuilt XCFrameworks for the heaviest Expo modules on iOS. Enabled by default locally and on EAS Build. No config. Just faster iOS builds.

New JSI layer for iOS native modules. Calling into a native module from JS used to mean crossing 3 language boundaries: Swift → Objective-C++ → C++. SDK 56 removes the Objective-C++ middle layer entirely using Swift/C++ interop. Fewer hops, less overhead, faster native module calls.

Hermes V1 as default. Comes from React Native 0.84. Faster startup, better runtime performance, less memory. No migration needed. If you’re on Hermes already (the default since RN 0.70), you’ll get V1 automatically on upgrade.

Expo Router forks React Navigation

This is a big one. Expo Router no longer depends on react-navigation.

The Expo team forked the parts of React Navigation they build on, and went their own way. Both projects still build on react-native-screens, and you can still use React Navigation directly if you prefer. But going forward, the two libraries are independent.

For most of us, this means a migration. Most code imported directly from @react-navigation/* packages won’t work alongside expo-router anymore. Luckily, there’s a codemod that handles most of it:

npx expo-codemod sdk-56-expo-router-react-navigation-replace [your-source-dir]

A few new things landed too:

Android Toolbar. Experimental support for Stack.Toolbar on Android, matching the iOS API.

Streaming SSR for Web. With the unstable_useServerRendering flag, you get streaming server-side rendering plus a new generateMetadata function for initial page load. Pair with the existing for post-hydration updates.

Other mentions worth bookmarking

A quick dump of everything else that caught my eye:

  • Inline Expo Modules: Write Swift or Kotlin files directly inside your project. The CLI auto-generates the TypeScript interface. No more create-expo-module ceremony for small native tweaks.
  • New Animation Backend (RN 0.85): Animate layout props (width, height, position) with useNativeDriver: true. Built with Software Mansion.
  • Metro supports HTTPS via TLS configuration. Useful for testing APIs that require secure origins locally.
  • expo-file-system: Progress callbacks, AbortSignal, resumable downloads, multi-file picking, experimental file watching.
  • Calendar, Contacts, MediaLibrary APIs are stable. Class-based, builder-pattern queries, granular fetching.
  • iOS Widgets are stable. Full React context access, no pre-rendering needed.
  • TypeScript 6 support
  • @expo/vector-icons is deprecated. Migrate to @react-native-vector-icons/* scoped packages with npx @react-native-vector-icons/codemod.
  • AI-first scaffolding. New projects ship with AGENTS.md, CLAUDE.md, and .claude/settings.json. Plus official Expo Skills for Claude Code (/plugin install expo).

Upgrade and test it now

This is a beta (for a couple of weeks), but it’s worth upgrading at least one app to test.

There are a lot of breaking changes (expo-file-system async APIs, Expo Router migration, deprecated icon package, iOS deployment target bumped to 16.4). But every breaking change is also an opportunity to drop a dependency, simplify a file, delete legacy code.

The Expo team built an expo/skills upgrade skill for Claude Code that handles most of the migration automatically. Install it once, point it at your project, and let it do the heavy lifting.

I’m going to go upgrade one of the apps in my portfolio right after I send this email.

Cheers,
Vadim

PS. Hit reply and let me know what are you most excited about in the new Expo SDK 56 release
​
​PPS. In case you missed, here are the last 2 tutorials on our channel:

notJust.dev Newsletter

Stay up-to-date with the latest React and React Native news and become a better Mobile Developer

Read more from notJust.dev Newsletter

My wife showed me her phone a few weeks ago. Every other ad was a vertical drama app. I did what I always do: checked their revenue. The top app is doing $22M a month. Not a year. A month. That number sent me down a rabbit hole that ended with me on stage at Shipaton talking about monetization, and with a completely different pricing model in the app I’m building. Here’s what I found, and how to set it up yourself. But first, a quick word from this week’s sponsor. It’s another hackathon, and...

Hey Reader 👋 At the beginning of the year I sat down to review my business expenses. Not the fun kind of work, but something I do at least once a year. I opened the software subscriptions category, scrolled to the bottom, and saw the total. 26,218 USD Just for tools. Not ads, not contractors, not equipment. Just monthly subscriptions to software. I’m not gonna lie, I sat there for a good minute. Because no single tool on that list felt expensive. $20 here. $99 there. Each one is nothing....

Hey Reader, I’ve been arguing with myself about which model to use for mobile dev, so I did the boring thing and actually measured it. Three flagship models. One prompt. No revisions. Fable 5 GPT-5.6 Sol Kimi K3 The task: build a complete calorie tracking app in Expo. Onboarding, auth, a paywall, camera-based meal scanning with AI calorie estimation, charts, history, notifications, Apple Health sync, Live Activities, and home screen widgets. → Watch now the Raw Results The setup Each model...