Originally published on and
Expo UI now includes universal components that work across Android, iOS, and web. Unlike the Android and iOS APIs, the web APIs are still experimental and likely to change.
The universal components are backed by [@expo/ui/jetpack-compose](https://docs.expo.dev/versions/v56.0.0/sdk/ui/jetpack-compose/) on Android, [@expo/ui/swift-ui](https://docs.expo.dev/versions/v56.0.0/sdk/ui/swift-ui/) on iOS, and react-dom or react-native-web on web. You can now build more cross-platform UI with Expo UI without splitting files into .android.tsx and .ios.tsx.
Universal components include layout primitives, text, inputs, controls, and sheets such as Host, Row, Column, ScrollView, Text, TextInput, Button, Switch, Slider, Checkbox, and BottomSheet. and and for the full list.
Drop-in replacements for community components
Expo UI is focused on native primitives, and some of those primitives overlap with popular community libraries. To make migration easier and reduce library fragmentation, SDK 56 introduces drop-in replacements for several common community components.
For example, you can migrate from:
import DateTimePicker from '@react-native-community/datetimepicker';
to:
import DateTimePicker from '@expo/ui/community/datetime-picker';
Drop-in replacements are available for @react-native-segmented-control/segmented-control, @react-native-picker/picker, @react-native-community/datetimepicker, @react-native-masked-view/masked-view, and @gorhom/bottom-sheet APIs. Most migrations only require changing the import, though some props may differ because Expo UI is backed by SwiftUI and Jetpack Compose rather than UIKit and Android Views. for our most complex Expo modules on iOS, to speed up your iOS builds. In our measurements, this cuts median clean iOS build times by around 1 minute (~16%) — both locally and on EAS Build. This is enabled by default both locally and on EAS Build — no configuration required. To opt out, set the EXPO_USE_PRECOMPILED_MODULES environment variable to 0 (for local builds), and also as an
Enable it in app.json:
// app.json
{
"plugins": [
["expo-build-properties", { "android": { "usePrecompiledHeaders": true } }]
]
}
This feature is experimental in SDK 56 while we gather feedback, and we're working on upstreaming it to React Native so every app benefits from faster Android builds. and the [expo-type-information](https://docs.expo.dev/modules/type-generation-reference/).
Revamped create-expo-module
In SDK 56, [create-expo-module](https://docs.expo.dev/more/create-expo-module/) has been revamped for improved stability and a richer feature-set.
New **`create-expo-module*`* skill**: helps agents create Expo modules — , we're seeing roughly 40% faster cold starts and 33% faster first render, with no app-side changes required. By collecting module metadata at compile time rather than runtime, we eliminate the reflection-based function-type-to-converter mapping that has historically been a major speed bump for Expo Modules on Android. Results will vary by project, but this is only the beginning — this compiler-driven approach lets us optimize function invocation directly, starting with a noticeable speed boost for Record conversion in SDK 56.
and for
expo-updatesand[expo-updates](https://docs.expo.dev/versions/v56.0.0/sdk/updates/).
Widgets for iOS promoted to stable
After introducing an alpha version of ) for AI agents**: install in Claude Code with
/plugin marketplace add expo/skillsfollowed by/plugin install expo. For Codex, Cursor, or any other agent, runnpx skills add expo/skills. See the docs for per-tool setup details.
Convex integration
EAS now provisions and links
SDK 56 ships the first wave of performance improvements across the whole bundling and run pipeline, with more landing in future releases.
Faster CLI: Various performance metrics of the Expo CLI have been improved in SDK 56
On-demand Filesystem: eliminates
watchFoldersas a load-bearing configuration option. Enabled by default; disable it by addingexperiment.onDemandFilesystem: falseto your app.json. resolution to support TS 6 and prepare for , ).Hermes v1 transforms: fewer bundler transforms are enabled for Hermes, which reduces bundling times overall ().
With the On-demand Filesystem, you can also now try Expo with
Additionally, config plugins are now loaded with the same module loader that configs themselves use. This means you'll now also be able to reference local .ts files in your plugins list, or write config plugins with .mjs or .cjs extensions.
Expo Router
Expo goes way back with React Navigation: and , to the standard navigation library in the React Native ecosystem (now one of the standards, alongside Expo Router).
Today, React Navigation is in and have different takes on the developer experience, with Expo Router preferring file system-based routing. We expect that each library will continue to push the other forward in the future, and that the best ideas will continue to flow between them.
Now that expo-router no longer depends on react-navigation, most code imported directly from @react-navigation/* packages will no longer work out of the box alongside expo-router.
Run the codemod to handle most of the migration automatically (replace [your-source-directory] with your source folder, e.g. src or app):
See the (Stack v5), including initial support for Material-style headers and predictive back gesture.
For Expo on the Web, we now support streaming SSR when using the unstable_useServerRendering flag. As part of this change, we've also introduced a new [generateMetadata](https://docs.expo.dev/router/web/server-rendering/#metadata) function for retrieving and setting metadata on initial page load. The existing <Head> component can still be used for updating metadata after hydration. Let us know how it works for you!
We've also added two new helpers for data loaders: [createStaticLoader](https://docs.expo.dev/versions/v56.0.0/sdk/server/#createstaticloaderfn) and [createServerLoader](https://docs.expo.dev/versions/v56.0.0/sdk/server/#createserverloaderfn), which narrow the callback signature for each rendering mode. createStaticLoader receives only route params (no request), while createServerLoader always passes a request and throws an actionable error if mistakenly used during static generation.
We've also added the ability to [_layout](https://docs.expo.dev/router/error-handling/#loading-states-with-suspense-fallback)
Prebuilt artifacts for major community libraries
Building on the precompiled Expo packages work in SDK 56, EAS Build now precompiles some of the most commonly used community libraries in the React Native ecosystem too — like react-native-reanimated and react-native-screens. In our measurements, this cuts median iOS clean build times on EAS Build by another ~1 minute (~20%) on top of the Expo-modules precompile, with bigger savings for apps that use more of these libraries.
Coming soon: EAS Observe
We're working on shared a deeper preview at ). Live-stream improvements: isLiveStream lock-screen option on iOS (), and isLive / currentOffsetFromLive / error fields on AudioStatus ().
[**expo-asset**](https://docs.expo.dev/versions/v56.0.0/sdk/asset/): GLB model assets for 3D / AR work ( / ), and session changesets (), NDS service discovery on Android, Android edge-to-edge (), skipOnboarding, and showMenuAtLaunch ().
[**expo/fetch**](https://docs.expo.dev/versions/v56.0.0/sdk/expo/#expofetch-api): brotli, gzip, and zstd response decompression on Android ().
Deprecations
**@expo/vector-icons**** will be replaced by `@react-native-vector-icons/**: the new [scoped packages](https://github.com/oblador/react-native-vector-icons) (one per icon set, e.g.@react-native-vector-icons/material-design-icons) are distinct from the older umbrellareact-native-vector-iconspackage that@expo/vector-iconsoriginally replaced.@expo/vector-iconswas created for Expo Go compatibility; recent upstream work has made that wrapper unnecessary, so consolidating onto@react-native-vector-icons/reduces duplication and gives you the latest icons and fixes directly. Migrate today by runningnpx @react-native-vector-icons/codemod` — .Async **`copy()` and `move()` in `expo-file-system**
: these methods onFileandDirectoryare now asynchronous and return a Promise. UsecopySync()andmoveSync()` for synchronous behavior.**@expo/dom-webview**** as the default WebView for DOM components**: you no longer need thereact-native-webviewdependency to use DOM components. You can still opt out and continue usingreact-native-webviewif needed. — included in new project templates and pulled in for existing projects vianpx expo install --fix. To opt out, addtypescriptto the[expo.install.exclude](https://docs.expo.dev/versions/v56.0.0/config/package-json/#installexclude)field in your package.json.
Expo Go
Reminder: The Expo Go app is our tool for getting started quickly, it's an educational tool to help you learn to build on mobile. If you are past that stage and want to build and ship an app, we encourage you to migrate your project to using a or the
eas gocommand to create an Expo Go build for SDK 56 and upload it to your own TestFlight team.
Upgrading your app
Try using our ) with Claude Code, or a similar tool of your choice, to upgrade your app.
Here's how to upgrade your app to Expo SDK 56 from 55:
Upgrade all dependencies to match SDK 56:
Check for any possible known issues with Expo Doctor:
Refer to the ["Deprecations"**](#deprecations) and ["Notable breaking changes"](#notable-breaking-changes) sections** above for breaking changes that are most likely to impact your app.
Make sure to check the [changelog**](:
- Delete the android and ios directories if you generated them for a previous SDK version in your local project directory. They'll be re-generated next time you run a build, either with
npx expo run:ios,npx expo prebuild, or with EAS Build.
If you **don't** use [Continuous Native Generation**](.
- Optionally, you could consider : Create a new development build after upgrading.
If you use Expo Go: consider migrating to .
Having trouble? Refer to the .
Thanks to everyone who contributed to the release!
Thanks to , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .
Beta testers: , , , , , , , , , and Sven.
↗ Original-Artikel auf dev.to lesenVollständiger Original-BerichtAusführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
SOCIAL SHARE CARD GENERATOR