Expo SDK 55 Beta is now available
Jan 22, 2026 by
Alan Hughes
Brent Vatne

The SDK 55 beta period begins today and will last approximately two weeks. The beta is an opportunity for developers to test out the SDK and ensure that the new release does not introduce any regressions for their particular systems and app configurations. We will be continuously releasing fixes and improvements during the beta period — some of these may include breaking changes.
SDK 55 beta includes React Native 0.83.1 and React 19.2.0. The full release notes for SDK 55 won't be available until the stable release, but you can browse the changelogs in the expo/expo repository to learn more about the scope of the release and any breaking changes. We'll merge all changelogs into the root CHANGELOG.md when the beta is complete.
We're also hosting office hours on Discord for those of you interested in helping test the release!
Dropped support for the Legacy Architecture
As explained in the SDK 54 release notes - “SDK 54 is the final release to include Legacy Architecture support”. In other words, you will not be able to use the Legacy Architecture in SDK 55 projects and later. Accordingly, the newArchEnabled config option has been removed from app.json. Learn more in the “React Native’s New Architecture” guide.
Revamped default project template
The default template has been redesigned with a focus on native platform conventions and an improved project folder structure:
- Uses the Native Tabs API for a platform-native tab experience on iOS and Android, with a responsive web-optimized layout for browsers.
- Refreshed design for a better out-of-the-box experience.
- New /src folder structure, so application code now lives in /src/app instead of /app, better separating your code from project configuration files.
Hermes v1 is now available for opt-in
Hermes v1 includes represents a huge step forward for the engine, showing early signs of meaningful performance improvements across various scenarios, and shipping better support for modern JavaScript features (ES6 classes, const/let syntax, async/await). You can try it out in your app with the useHermesV1 field in expo-build-properties. It’s important to note that using Hermes v1 in Expo SDK 55 / React Native 0.83 requires building React Native from source, which significantly increases native build times. This tradeoff might be worth it for your app, give it a try, find out, and let us know!
{"expo": {"plugins": [["expo-build-properties",{"buildReactNativeFromSource": true,"useHermesV1": true}]]}}
Hermes bytecode diffing is now available
The Hermes bytecode diffing feature in expo-updates and EAS Update is an optimization that significantly reduces update download sizes for Hermes-compiled JavaScript bundles. Instead of downloading complete Hermes bytecode files for each update, the expo-updates client can request and apply binary patches (diffs) to the previously installed bytecode files.
This means your updates will be downloaded more quickly by end-users, and that each update will use less bandwidth. That all translates to faster update adoption rates and more updates available within the bandwidth of your EAS plan. It’s estimated that diffs will be about 25% of the size of the full bundle.
{"expo": {"updates": {"url": "<https://u.expo.dev/><id>","enableBsdiffPatchSupport": true}}}
This feature is opt-in for SDK 55, and we’ll turn it on by default in SDK 56. To enable it in your project today, refer to the enableBsdiffPatchSupport property documentation for information the app.json config or iOS/Android native config options. We’re currently working on updating the update details screen on expo.dev to include information about the diffs that have been generated, their sizes, and download counts — we intend to ship this during the beta period.
If you’d like to try it with your own custom updates server, refer to this branch on expo/custom-expo-updates-server. Note that we’re prioritizing polishing up the experience with EAS Update, and we will improve the custom updates server reference at a later date.
Expansion of AI tooling for Expo developers
MCP server - support for CLI actions
An Expo Module can expose plugins and commands to the Expo CLI which will be made available in the [SHIFT] + M menu - these actions can now be automatically installed in the Expo MCP Server.
Agent skills
The expo/skills repository is the an official collection of AI agent skills from the Expo team for building, deploying, and debugging robust Expo apps. We primarily use Claude Code at Expo and skills are fine-tuned for Opus models. But you can use these skills with any AI agent.
We have found these skills to be a great complement to the MCP, and they help Claude Code work with Expo apps better than ever before. Try them yourself and give us feedback on how we can make them even better! We also welcome pull requests!
Be sure to check out the upgrade skills, which we recommend later on in this post to help you with upgrading to SDK 55.
Note: there are a lot of “expo/skills” being created by the community, which is great! The only skills that we currently officially endorse and plan to maintain/update are the skills you find in our expo/skills repo.
More native features in Expo Router
- New Colors API: add dynamic Material 3 styles to your Android app and adaptive colors on iOS.
Notice that the colors in the app adapt to the operating system in these screenshots.
- New Apple Zoom transition: we’ve added support for interactive shared element transitions on iOS using the native zoom transition and gestures. This is currently an Apple-only feature, and it is enabled by default. Learn more.
- New
Stack.ToolbarAPI:UIToolbarAPI for iOS apps that provides access to APIs for building menus and actions. It’s currently iOS-only, and we plan to add support for similar Android APIs in the future. Learn more.
This UI pattern is a useful alternative to tabs when you want buttons at the bottom of the screen that need to perform actions or open menus rather than navigate between entire screens.
- Experimental SplitView support. This has been something we have wanted for ages, and much needed in React Native. Learn more about SplitView.
- Experimental support for footers in form sheets on Apple platforms. Learn more in the API reference.
- Default safe area handling in native-tabs layouts on both iOS and Android. Learn more about safe area handling.
- Screen's synchronous layout updates activated by default. Learn more in expo/expo#42154.
react-native-screensupgraded to 4.20.0.- … and more! We’ll dedicate a blog post when it’s released.
“Brownfield” (adding Expo to existing native apps)
SDK 55 improves support for adding Expo to existing native apps ("brownfield") and introduces the new expo-brownfield package, which enables an isolated approach to brownfield integration. With this approach, you develop your React Native code separately and package it as a native library (AAR for Android, XCFramework for iOS) that native developers can consume without setting up Node.js or React Native build dependencies. The package includes a config plugin for native targets, a CLI for building artifacts, and APIs for bi-directional messaging and navigation between your native app and the embedded Expo app. The primary difference between this package and the existing react-native-brownfield package is that it is built from the ground up to be integrated into Expo modules and other tooling, without having to consider scenarios where those are not available.
You can also continue using the traditional integrated approach where React Native code lives inside your existing native project. The approach that works best for you depends entirely on the context of your app and your team.
We’ve also improved expo-dev-menu so you can now use it to your brownfield apps without also including expo-dev-launcher .
A complete set of documentation and a full blog post will be ready for the full release!
An aside — look, we don’t like the name “brownfield” either, but it is what it is. If you can come up with an alternative name that is so good we have no choice but to use it then we will gift you either free Production plan access for a year or a mystery gift (it could be anything, even Production plan for a year!).
Expo UI beta progresses towards a stable release in mid-2026
Swift UI: we've updated @expo/ui SwiftUI component APIs to more closely match SwiftUI's. If you're familiar with SwiftUI, the Expo UI equivalents should now feel more familiar. We’re still in beta, and accordingly there are a number of breaking changes:
DateTimePickerrenamed toDatePicker(now supportsrangeand custom labels)Switchrenamed toToggleCircularProgressandLinearProgressmerged intoProgressViewwith aprogressViewStylemodifierSectionnow uses atitleconstructor prop andisExpandedinstead ofcollapsibleFormreplacesscrollEnabledwith thescrollDisabledmodifierButtonandSliderAPIs updated to match SwiftUI
Jetpack Compose: we expect to have a beta version of our Compose API available either late in the SDK 55 beta or alongside the full release. We’ll update this post when it’s ready.
New Expo SDK package versioning scheme
As of SDK 55, all Expo SDK packages use the same major version as the SDK. For example, the version of expo-camera that is compatible with SDK 55 is ^55.0.0 . This makes it easy to identify at a glance that your Expo SDK packages are in fact intended for the SDK version you are using. It also accurately reflects that we do not intend for packages to be compatible across different SDK versions.
Expo Modules Core
Expo Modules Core is the foundation for building native modules with a modern, unified API across iOS and Android. We use it for all of our modules, and we are always investing in making it the best tool to reach for when you need to extend the native capabilities of your app. Some of the improvements in SDK 55 include:
- Adopted Swift 6 language mode enables stricter compiler checks to guarantee the code is free of data races.
- Added ArrayBuffer support. Learn more in these pull requests: #39943, #41404, #41415, #41548. Documentation coming soon.
- Added StaticFunction and StaticAsyncFunction to Class in modules API. Learn more in these pull requests: #38754, #39228.
We’ll have a more comprehensive summary of changes in the final release notes.
Alpha release of expo-widgets for iOS
expo-widgets enables the creation of iOS home screen widgets and Live Activities using Expo UI components, without writing native code. It provides a simple API for creating and updating widgets timeline, as well as starting and managing Live Activities. Layout can be built using @expo/ui components and modifiers — this is the main distinction between expo-widgets and Voltra. Learn more about expo-widgets.
expo-blur is now stable on Android
Performant background blurring has been a pain point for Android developers for a long time — and that includes React Native developers targeting Android. In expo-blur, blurring on Android was hidden behind the experimentalBlurMethod due to high performance cost of rendering the blur. Starting with SDK 55 expo-blur uses the much more efficient RenderNode API on Android 12 and newer. This allows developers to add background blurs to views at a low performance cost.
Support for the new blur method required us to change how the Blur API works. You will now have to specify a <BlurTargetView> wrapper for the blurrable background content. If you don’t want to migrate to the new API just yet and need background blurs only for previously supported platforms, you can keep your current implementation as the introduced changes are non-breaking. Learn more in the expo-blur API reference.
A special thanks goes out Dima — these changes were possible thanks to work on Dimezis/BlurView, which we use for blurring on Android.
Experimental support for receiving shared data in expo-sharing
During the beta period, expo-sharing will receive a highly requested feature: first-class support for sharing data into Expo apps. This will be possible thanks to a config plugin, which adds a share-extension app target on iOS and appropriate intent-filters on Android. Sharing requests are delivered via deep links, allowing you to easily handle them in JavaScript.
Thank you Maxi for your work on MaxAst/expo-share-extension! If you’re looking for this feature and want to use a library that has been been battle tested in production, expo-share-extension may be a good option for you. This feature in expo-sharing will be marked as experimental in SDK 55.
For a video that gives you a sneak peek of the feature, check out expo/expo#42242.
Other Highlights
- Expo Go: we’ve rebuilt the UI in order to more closely align with the
expo-dev-clientchanges that we made in SDK 54 and to improve the Hermes debugging experience. It looks very similar to before, but this work is a foundation for us to build on in upcoming cycles as we invest more in the user experience of both Expo Go andexpo-dev-client. Let us know if we missed any details that are important to you! - Expo Web: we re-wrote the error overlay, added alpha support for server-side rendering, and have shipped experimental data loaders (see PRs #39570, #40130, and #41934 - documentation coming soon).
expo-contacts/next,expo-media-library/next, andexpo-calendar/next: New object-oriented APIs for easier and more granular management of contacts, events, and media. Makes it simpler to modify data by using SharedObjects to manipulate them directly rather than passing around IDs. We’ve also added more powerful queries, among other features! Links: Contacts, MediaLibrary, and Calendar.expo-notifications: there were a number of other improvements and bug fixes such as updating to latest Android firebase notifications dependency, and parameter validations. Refer to the breaking changes section below for more information.expo-audio: the new version includes support for lock-screen controls and background audio recording. Learn more in the expo-audio API reference.expo-sqlite: now includes an SQLite inspector devtools plugin, tagged template literals support, andSQLITE_ENABLE_MATH_FUNCTIONSis enabled by default. Learn more in the expo-sqlite API reference.expo-cameraprovides an option to opt-out of including the barcode scanner APIs in order to reduce your app size. Learn more in the expo-camera API reference.expo-video- AddedseekToleranceandscrubbingModeOptionsfor better scrubbing performance. Picture-in-Picture has been refactored on Android to support handling multipleVideoViews. AddedaverageBitrateandpeakBitratefields to the video track information. You should see performance improvements on iOS thanks to loading a larger part of the video data asynchronously. Learn more in the expo-video API reference.expo-imagesupports HDR images on iOS and can now render SF Symbols.- We plan to bump the minimum iOS version from 15.1 to 16.4 in SDK 56. The minimum iOS for SDK 55 is still 15.1. See the platform version compatibility table.
Deprecations
- We intend to deprecate
removeSubscriptioncalls exported from several Expo modules. We recommend switching tosubscription.remove(), wheresubscriptionis the object returned when registering an event listener. This will be merged during the beta. - We are deprecating
expo-video-thumbnailsin favor ofgenerateThumbnailsAsyncfromexpo-video.expo-video-thumbnailsis not receiving patches and will be removed in SDK 56. - Refer to the CHANGELOG for a full list of breaking changes.
Notable breaking changes
- Following the deprecation and a warning, the
notificationconfiguration field was removed fromapp.jsonschema. Specifying anotificationentry will throw an error inprebuild- migrate to theexpo-notificationsconfig plugin. - Attempting to use push notifications in Expo Go on Android will throw an error. Until now, this was a warning. We first informed about the planned removal in the SDK 53 release post. To use push notifications, migrate to a development build.
- On foldable devices, folding no longer results in Android activity re-creation: expo/expo#42150.
expo-avwas removed from Expo Go because it has been replaced byexpo-videoandexpo-audio. Additionally,expo-avis no longer receiving patches and may not continue working in your apps as a result.- Refer to the CHANGELOG for a full list of breaking changes.
Known regressions
- Found an issue? Report a regression.
How to try out the beta release
Initialize a new project with SDK 55 beta
# npm- npx create-expo-app@latest --template default@next# bun- bun create expo-app --template default@next# pnpm- pnpm create expo-app --template default@next# yarn- yarn create expo-app --template default@nextNote: create-expo-app will install dependencies with the package manager that you are using. For example, with npm when npx is used and yarn when yarn create used.
Upgrade an existing project
🆕 Try using our expo/skills upgrade skills with Claude Code to upgrade your app to the beta. We appreciate reports for any issues that you encounter so we can further tune it in the coming weeks.
The following instructions explain the manual steps to upgrade your app.
- Upgrade all dependencies to match SDK 55:
- npx expo install expo@next --fix- Install the latest Expo Go for Android emulators/physical devices or iOS simulators:
- Launch your project through Expo CLI (press the a or i keyboard shortcut after running
npx expo start) and the updated version of Expo Go will be automatically installed.
- Launch your project through Expo CLI (press the a or i keyboard shortcut after running
- Install the latest Expo Go for iOS to your physical device: Join the TestFlight External Beta.
- Read the documentation by selecting it from the version selector in the API reference section.
What to test
- Upgrade your app with
npm install expo@nextoryarn add expo@next, then runnpx expo install --fixand consult the Native project upgrade helper and report any issues you encounter. - Build your app with EAS Build, and/or if you have Xcode installed and up to date on your machine and/or Android Studio, try prebuilding your app and running it:
npx expo prebuild --cleanandnpm run iosandnpm run android. Alternatively, try outnpx expo run. Any new issues? Please report them. - Did we miss updating the documentation somewhere? Let us know.
How to report issues
- Create an issue and be sure to fill out the appropriate template (and include a minimal reproducible example).
- Figuring out the underlying causes of issues is always super helpful, and it'll help expedite a solution.
- Let us know that you are using the SDK 55 beta so we can prioritize the issue.
- The most helpful beta testers will be listed in the final release notes (and possibly even provided with some Discord flair — you can link your Discord and GitHub accounts to your Expo account).
Join the SDK 55 Livestream
We are hosting a livestream at 11am PT on Thursday, February 12th. That should be enough time for everyone to get into the SDK and find some things to ask questions about. Please join the stream and fire your questions at us. We will spend time talking through the highlights from the release and the outcomes we hope you will experience from the new SDK.