APR 30, 2025 by Brent Vatne
Today we're announcing the release of Expo SDK 53. SDK 53 includes React Native 0.79.

In SDK 53, the New Architecture is enabled by default in all projects. You can opt out if you aren't yet ready to adopt it. As of April 2025, the New Architecture was enabled in 74.6% of the SDK 52 projects built on EAS Build.


Android 16 (due in June) will no longer allow apps to opt out of edge-to-edge display. In SDK 53, edge-to-edge on Android is now:
In SDK 54, edge-to-edge will be the default for new and existing projects.

The new module expo-background-task uses the latest APIs on Android and iOS and deprecates the expo-background-fetch module. It uses the WorkManager API on Android and the BGTaskScheduler API on iOS.
Example usage:
import * as TaskManager from 'expo-task-manager';
import * as BackgroundTask from 'expo-background-task';
import * as Updates from 'expo-updates';
const BACKGROUND_TASK_NAME = 'task-run-expo-update';
TaskManager.defineTask(BACKGROUND_TASK_NAME, async () => {
const update = await Updates.checkForUpdateAsync();
if (update.isAvailable) {
await Updates.fetchUpdateAsync();
await Updates.reloadAsync();
}
});
async function registerTask() {
const isRegistered = TaskManager.isTaskRegisteredAsync(BACKGROUND_TASK_NAME);
if (!isRegistered) {
await BackgroundTask.registerTaskAsync(BACKGROUND_TASK_NAME, {
minimumInterval: 30,
});
}
}
registerTask();
In React Native 0.79, the Metro team switched the package.json exports field support to enabled by default. You can opt out by specifying unstable_enablePackageExports: false if you run into related issues.
If libraries that you depend on are incompatible with this change, report them to this discussion.

React Native 0.79 with React 19 and React Native Web 0.20.0. Refer to the React Native 0.79 and React 19 release notes for detailed information.
Development builds can now be deployed to TestFlight. Try it out with the new npx testflight package if you use EAS — set "distribution": "store" on your development profile and add "development": {} as a submit profile in eas.json, then run npx testflight --profile development.
Stable release of new expo-audio library. We recommend migrating to it from expo-av now. It is more reliable, easier to use, more performant, and more powerful.
New expo-maps package alpha release. This library aims to provide wrappers for the platform standard APIs for maps — Google Maps on Android and Apple Maps for iOS. The minimum iOS version required to use the library is currently iOS 17.
Improve Android build times with prebuilt Expo Modules. Up to 25% reduction in build time locally depending on hardware.
expo-updates now allows you to override headers at runtime with Updates.setUpdateURLAndRequestHeadersOverride().
expo-updates for Android no longer copies embedded assets on launch, reducing startup time from ~300ms to ~100ms.
React Server Functions support is now in beta. Deploy React Server Functions to production with EAS Hosting.
Expo Modules for TV and macOS improvements: Added support for macOS AppDelegate subscribers and users can now extend directly from ExpoAppDelegate.
expo-file-system/next now integrates with expo/fetch for file uploads with file.blob().
expo-sqlite now includes experimental support for web using WebAssembly.
expo-sqlite now supports libsql, with support for Turso's Offline Sync Public Beta.
expo-notifications improvements: Custom images and icons are now supported in Expo Push Service for Android. The iOS implementation has been converted to Swift.
Add import.meta transform plugin (experimental, opt-in feature).
AppDelegate has moved from Objective-C to Swift. Config Plugins that modify the AppDelegate source code will need to be updated.
Bumped the recommend TypeScript version to ~5.8.3.
Experimental opt-in React 19.1 support with improved errors available via experiments.reactCanary.
Flat config support in eslint-config-expo. npx expo lint now supports flat config.
Expo Atlas has been promoted from experimental to stable. Enable with EXPO_ATLAS=1 npx expo.
Added experimental support for web workers on web, used in expo-sqlite for multi-threaded support.
Added experimental EAS Update support to Expo DOM components.
Improved error messages. React errors will now be human-readable in Expo CLI.
Added build-time redirects and rewrites for customizing the URL and routing.
Guarded Groups. Client side routes can be grouped together and protected by a guard function.
Prefetching Routes. Prefetching allows a route to be fetched and loaded in the background.
Make authentication and other flows using an initial redirect easier to build. Apps are now wrapped in a virtual root navigator.
Improved documentation with new "Router 101" section.

Expo UI aims to give developers easy access to native UI components from Jetpack Compose and SwiftUI. It will include essential platform primitives like toggles, sliders, context menus, pickers, and lists.
This library is currently an early prototype — it's experimental, and it's changing quickly. APIs may change. You will find issues and limitations. We don't recommend using this in production yet.
The new experiments.remoteBuildCache config will enable remote caching for your local builds, so you never have to re-compile a project if you or any of your teammates have already created a build with a matching fingerprint.
You can implement your own cache provider, or use a prebuilt provider like GitHub or EAS. During this initial experiment period, we've limited the number of cached builds with the EAS provider to 10 on the free and on demand plans, 50 with the production plan, and 100 with the enterprise plan (per billing cycle).
expo-av: The Video component was replaced by expo-video in SDK 52 and the Audio API is replaced by expo-audio in SDK 53. The package will no longer be maintained and we will not publish any new versions for SDK 54 and beyond.
expo-background-fetch: This library has been replaced by expo-background-task, which uses modern platform APIs.
jsEngine field in app config has been deprecated: JavaScriptCore support in React Native core has been deprecated in react-native@0.79 and will be removed in the near future. It will still be possible to use JavaScriptCore through the @react-native-community/javascriptcore package.
Push notifications are no longer supported in Expo Go for Android, after being deprecated in SDK 52.
React DevTools has been removed from Expo CLI: now that it is available through React Native DevTools, it's no longer listed in the plugins.
Node 18 reached End-Of-Life (EOL) on April 30, 2025. Use at least Node 20 for SDK 53 projects.
React 19 comes with some breaking changes. See the React 19 upgrade guide.
Internal imports in React Native were updated to export syntax. If importing from within the React Native package with require a nested path (react-native/x/y), you may need to update your imports.
package.json exports and imports now enabled by default as of React Native 0.79.
Updated default AppTheme. New native Android projects now use the DayNight theme.
Edge-to-edge is enabled by default in new projects and in Expo Go for Android.
Deprecated setImmediate polyfill has been removed from the runtime.
Android package name is no longer automatically added as a linking scheme in prebuild.
EAS Build now uses frozen lockfiles by default for SDK 53+ projects. You can opt out by setting EAS_NO_FROZEN_LOCKFILE=1.
Added upload and download commands for remote build cache. Run eas upload to share builds by URL and eas build:download to download a build.
"Build comparison" and "Fingerprint comparison" views help you understand your project and troubleshoot issues. Fingerprints are stored for each build and update and can be compared with a diff view.


React 18 peer dependencies can lead to multiple react installations. Many libraries have peer dependencies on React 18 — even though they are likely compatible with React 19. You may need to add overrides to your package.json to ensure every library uses the same single version of React.
Some libraries are incompatible with Metro ES Module resolution. For example, there are known issues with @supabase/supabase-js and @firebase/* packages. You can work around this by opting out of this feature.
Snack does not yet support SDK 53. This is coming soon.
To upgrade your app to Expo SDK 53 from 52:
Update to the latest version of EAS CLI (if you use it):
npm i -g eas-cli
Upgrade all dependencies to match SDK 53:
npx expo install expo@^53.0.0 --fix
If you have any resolutions/overrides in your package.json, verify that they are still needed.
Check for any possible known issues:
npx expo-doctor@latest
Refer to the Deprecations & removals section above for breaking changes.
Make sure to check the changelog for all other breaking changes.
Upgrade Xcode if needed: Xcode 16 is needed to compile. We recommend Xcode 16.2+ for SDK 53.
If you use Continuous Native Generation:
If you don't use Continuous Native Generation:
npx pod-install if you have an ios directory.If you use development builds with expo-dev-client: Create a new development build after upgrading.
If you use Expo Go: Consider migrating to development builds.
Fetched April 8, 2026