releases.shpreview
Expo/Expo Changelog/Expo SDK 52

Expo SDK 52

$npx -y @buildinternet/releases show rel_vjFy_l9TdZm65ob3qajWm

Release Date: November 12, 2024

Expo SDK 52 includes React Native 0.76 and marks the rollout of React Native's New Architecture by default for all newly created projects.

The New Architecture Rollout

After a year of collaboration with Meta, Software Mansion, and community developers, the New Architecture is now enabled by default for all new projects from SDK 52 onward.

What the Rollout Looks Like

  • The New Architecture is enabled by default for all new projects. New projects created with npx create-expo-app will have newArchEnabled set to true in app.json.
  • Existing projects can opt in to the New Architecture after upgrading. It's not required and won't be automatically enabled. SDK 53 will likely enable it by default, and a future 2025 release may remove the ability to use the old architecture.
  • Expo Go for SDK 52+ only supports the New Architecture. All Expo SDK packages and included third-party libraries support it. You can opt out by setting newArchEnabled to false and creating a development build.

Testing Your App

  • Ensure you use the latest version of all third-party native libraries
  • Run npx expo-doctor@latest to find incompatibilities with the New Architecture
  • Read about known issues and learn how to enable the New Architecture in your app

Highlights

Platform Updates

  • iOS deployment target bumped from 13.4 to iOS 15.1, matching React Native 0.76 requirements
  • Android minSdkVersion and compileSdkVersion bumped from 23 to 24 and 34 to 35 respectively

New and Improved Libraries

expo-video - Now stable. Migrated from beta with improvements based on community feedback. More reliable, easier to use, more performant, and more powerful than the Video component from expo-av. Includes lock screen controls and Picture-in-Picture support on both Android and iOS, plus a utility for generating video thumbnails.

expo-audio - New beta library providing a modern, stable, and easy-to-use API for adding audio to apps. Not yet included in Expo Go.

expo-file-system/next - Beta release of a rebuilt library with a new API designed for ease of use. Enables synchronous read/write operations using SharedObjects and advanced features like stateful file handles. Fully backwards compatible.

expo-camera - Many improvements after being promoted from expo-camera/next in SDK 51. Now more robust with Swift Concurrency for improved reliability.

expo-live-photo - New iOS-only library for playing back iOS Live Photos. Added support to expo-image-picker for picking live photos.

expo-image v2 - Introduces the useImage hook for preloading images with size and metadata before rendering. Returns a shared reference to a native image instance that can be passed directly to the Image component. Added onDisplay event when images are displayed on screen.

expo-image-manipulator - New object-oriented, contextual API that is more performant and provides better developer experience.

expo-sqlite improvements:

  • New expo-sqlite/kv-store API provides convenient key/value storage, implementing the same API as @react-native-async-storage/async-storage with synchronous APIs
  • Now supports SQLCipher (enable via config plugin)
  • Now supports saving databases to shared containers on iOS for app extension sharing

expo-notifications improvements - Many bug fixes and improvements including better FCMv1 support and improved background task support that now runs even when app is terminated.

Other improvements:

  • Expo DevTools Plugins now support binary payloads like Uint8Array
  • iOS 18 tinted icons support now available
  • Fixed environment variables issue with embedded expoConfig in expo-constants
  • Calendar form sheets now launchable from expo-calendar
  • expo/fetch - WinterCG-compliant Fetch API drop-in replacement with download streaming support
  • React Navigation v7 now available (automatic upgrade for Expo Router users)
  • React Native DevTools replaces the JavaScript debugger from SDK 47
  • Edge-to-edge layouts on Android improved with react-native-edge-to-edge library support

Splash Screen Improvements

  • Migrated to Android 12 SplashScreen API, resolving long-standing issues on Android 12+
  • Fade transitions now easier: SplashScreen.setOptions({ fade: true, duration: 1000 })
  • Dark mode splash screens officially supported through the config plugin
  • Intent to deprecate the splash field in favor of the config plugin for developers using Continuous Native Generation

Known Splash Screen Limitations

  • Config plugin properties don't apply to the splash-screen view during app launch in Expo Go or development builds—you'll need to rebuild the app to see changes
  • Debug builds on Android 13+ show a black screen between splash and app UI when using preventAutoHideAsync() (doesn't impact release builds; appears to be an Android OS issue)

DOM Components

DOM Components make it easier to incrementally migrate from web to native and provide an escape hatch for integrating any web library into native apps.

Create a React DOM component file (using <div>, <span>, etc.) and add the "use dom" directive to the top. You can then import and use it like a normal component from React Native code. The DOM component renders inside a webview but works through props. Any web library can be used within DOM components.

Expo CLI

  • Experimental universal Tree Shaking - Automatically remove unused ESM imports/exports to improve OTA and web performance
  • Experimental React Compiler support - Enable with "experiments": { "reactCompiler": true } in app config
  • Fast resolving by default - Up to 15x faster resolution across all platforms (merged into Metro as of React Native 0.76)
  • New flag for iOS run command - npx expo run:ios --binary /path/to/bin
  • Improved debugging flag - EXPO_USE_METRO_REQUIRE=1
  • Metro support - Now supports resolver.requireCycleIgnorePatterns in server bundles
  • EXPO_USE_METRO_WORKSPACE_ROOT - Now enabled by default for better monorepo support
  • pnpm monorepo support - Metro automatically configured for pnpm monorepos
  • CSS modules improvements - CSS modules can now import other CSS modules
  • Web assets - Now use strings/ImageSource for easier web ecosystem interop
  • iOS app config field - Added ios.appleTeamId to set DEVELOPMENT_TEAM in PBX projects
  • Reduced Expo CLI size - Removed dependency on RNC CLI (uses expo-modules-autolinking instead)
  • Eager builds - npx expo run --eager bundles JavaScript before native compilation

Expo Modules API

  • Better SharedRef support - Improved type validation during conversion between packages
  • Enhanced SharedObject - New memory pressure handling for better garbage collection
  • Time type support - CMTime (iOS) and Duration (Android) now supported as convertible types
  • AppDelegate customization - Added customizeRootView to ExpoAppDelegateSubscriberProtocol
  • Android lifecycle - Added OnUserLeavesActivity event to lifecycle listeners
  • Event management - New useEvent and useEventListener APIs for simpler event handling
  • EventEmitter migration - Migrated to C++ implementation for improved performance
  • Third-party AAR support - Extended config to support wrapping third-party AARs via android.gradleAarProjects
  • Web modules - New way to define type-safe web modules with events via registerWebModule

Expo Router

  • Server Components and Server Actions - Early preview of React Server Components support (not for production yet)
  • React Navigation v7 - Expo Router now uses v7 (may require changes to underlying React Navigation APIs)
  • expo-router/ui API - New headless <Tabs /> component with Radix-like API for un-styled tab layouts
  • expo-router/link - New export for better alignment with upcoming package.json exports support
  • legacy_subscribe - Added for broader compatibility with services like Branch
  • sitemap Config Plugin - Can now disable the built-in /_sitemap route with sitemap: false

Expo Application Services (EAS)

  • EAS Build worker image updated - iOS builds now use macOS 14.6 and Xcode 16.1
  • Bundle JavaScript build step - New step calling npx expo export:embed --eager improves error detection speed (can be disabled with EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP=1)
  • Improved EAS Update dashboards - Better navigation between channels, branches, runtime versions, and deployments; added install stats for update groups

Deprecations

  • Push notifications in Expo Go - Will no longer be supported in SDK 53 (warned in SDK 52). Developers should create a development build instead.
  • Google Maps in Expo Go for Android - Will no longer be supported in SDK 53 (warned in SDK 52)
  • CRSQLite support in expo-sqlite - Deprecated due to lack of active development
  • expo-av Video API - Deprecated, use expo-video instead

Notable Breaking Changes

  • Expo Go uses New Architecture - JSC is no longer supported, must use Hermes
  • Expo Go for Android - No longer supports Pedometer (use development builds instead)
  • expo-camera/legacy - Removed, migrate to expo-camera
  • expo-sqlite/legacy - Removed, migrate to expo-sqlite
  • expo-barcode-scanner - Removed (deprecated in SDK 50), use barcode scanning from expo-camera instead
  • privacy field removed - Unused privacy field from app.json removed
  • create-react-native-app no longer supported - Use npx create-expo-app instead
  • expo-notifications trigger types - Simplified calendar trigger input types
  • expo-router type changes - Removed generic from Href type and navigation hooks/APIs
  • expo-router Typed Routes - No longer generate types for partial group Hrefs
  • expo-router navigate method - Behavior changes (refer to React Navigation v7 upgrade guide)
  • React state batching - When using New Architecture, state set functions no longer execute synchronously
  • Full screen splash images - No longer supported on Android in expo-splash-screen

Known Issues

  • Developer preview of React Server Components are not for production use
  • React Native DevTools "Sources" tab may show ignore list warning; press "Remove from ignore list" and reload
  • Yarn v1 may crash/hang during dependency upgrades; manually update expo to ^52.0.0 in package.json and run yarn, then yarn expo install --fix

Upgrading to Expo SDK 52

  1. Update EAS CLI: npm i -g eas-cli
  2. Upgrade dependencies: npx expo install expo@^52.0.0 --fix
  3. Remove unnecessary resolutions/overrides from package.json
  4. Check for issues: npx expo-doctor@latest
  5. Review deprecations and breaking changes section
  6. Check the full changelog for all breaking changes
  7. Upgrade Xcode if needed (Xcode 16+ required, 16.1 recommended)
  8. For Continuous Native Generation users: Delete android and ios directories
  9. For non-prebuild users: Run npx pod-install or use Native project upgrade helper
  10. Create new development builds if using expo-dev-client
  11. Consider migrating from Expo Go to development builds

For more help, see the Troubleshooting SDK upgrade guide or join office hours on Wednesdays at 12:00PM Pacific on Discord.

Fetched April 8, 2026