releases.shpreview
Expo/Expo Changelog/Expo SDK 50

Expo SDK 50

$npx -y @buildinternet/releases show rel_5C3-nwzZ7zSSgY67-_pJi

JAN 18, 2024

Today we're announcing the release of Expo SDK 50. SDK 50 includes React Native 0.73. Thank you to everyone who helped with beta testing.

Introducing Expo Dev Tools Plugins

This API provides a foundation for library authors and adventurous app developers to build browser-based plugins to debug and interact with aspects of their library/app. We built plugins for popular tools: Apollo Client, TanStack Query, TinyBase, React Native Async Storage, and React Navigation — available in the expo/dev-plugins repository.

New and improved SQLite and Camera APIs

  • expo-sqlite/next: a complete re-write of the SQLite library, modernizing the API and bringing it towards parity with web and Node.js equivalents. The API includes both sync and async methods, support for prepared statements, update callbacks, and the Blob data type. SQLite version updated to 3.42.0 on both platforms. A Knex dialect for expo-sqlite is also available.

  • expo-camera/next: updated to modern native platform best practices for accessing the device camera. For advanced use cases like frame processors, react-native-vision-camera is recommended.

import { CameraView } from 'expo-camera/next';

export default function Camera() {
  return (
    <CameraView
      style={{ flex: 1 }}
    />
  );
}

Introducing @expo/fingerprint

Answers the question: "How do I know if an app JavaScript bundle is compatible with a particular build of my app?"

The @expo/fingerprint CLI or API generates a fingerprint representing the unique native characteristics of a project. If the fingerprint changes, the JavaScript app targeting the older fingerprint may be incompatible.

Usage: npx @expo/fingerprint path/to/your/project

Expo Router v3

The next major release for universal file-based routing and advanced web support. Includes bugfixes, stability improvements, better documentation, web support, testing, and types. Now has experimental support for building universal server endpoints with API Routes.

EAS Build

  • Xcode 15.2 is now the default for macOS workers
  • JDK 17 and Ubuntu 20 are now the default for Linux workers
  • Node 18 is now the default (changed from Node 16 on November 27, 2023)
  • Improved warnings and errors with "build annotations"
  • Pre-warmed CocoaPods cache for faster builds
  • Expo Orbit v1 released: Makes it faster and easier to install and run builds from EAS
  • Added support for Bun, .nvmrc file reading for Node version, --profile flag for eas build:run, eas build:delete command, and improved fully customizable builds preview

EAS Update

  • New JavaScript API: useUpdates() hook in the expo-updates package for easy tracking and interaction with updates state
import { useUpdates } from 'expo-updates';

export default function App() {
  const {
    currentlyRunning,
    availableUpdate,
    isUpdateAvailable,
    isUpdatePending,
  } = useUpdates();
}
  • Dashboard UI features: Create/remove channels, republish updates, and remove them
  • Rollbacks: Instruct production apps to roll back to their embedded update on next check
  • Rollouts: Gradually roll out updates to a percentage of users to minimize production impact

Basic Expo Modules support for tvOS and macOS

  • The use_expo_modules! method now works on tvOS and macOS targets in the Podfile
  • Packages supporting tvOS: expo-application, expo-av, expo-constants, expo-device, expo-file-system, expo-font, expo-image, expo-keep-awake, expo-localization, expo-splash-screen, expo-updates, @expo/cli
  • Packages supporting macOS: expo-constants, expo-file-system, expo-keep-awake

First-class Expo support in Sentry

sentry-expo has been merged into @sentry/react-native@5.16.0, and sentry-expo is now deprecated. The integration with EAS Update is improved: eas update --branch <branch> && npx sentry-expo-upload-sourcemaps dist

Other Highlights

  • React Native 0.73 and React 18.2.0
  • expo-font config plugin now supports natively adding fonts to your app
  • expo-secure-store improvements: Synchronous getItem and setItem functions, unified Android/iOS behavior. Breaking change: fetching a non-existent value now always returns null
  • expo-dev-client defaults to loading the most recently opened project; configurable with "launchModeExperimental": "launcher"
  • Added npx expo run command: Prompts to select target platform if not specified
  • npx expo install --fix now upgrades the expo package to latest patch version
  • Native project update tool: Similar to React Native Upgrade Helper but for Expo Modules projects
  • Web bundle splitting with Metro, enabled by default
  • Improved error messages: Full stack traces for component errors, tree shaking of unused code, faster bundling
  • URL and URLSearchParams standards now built-in to the Expo core runtime
  • Improved isolated modules support: Can now use pnpm or npm --install-mode=isolated
  • Preview of experimental React Native JS debugger UI
  • @expo/webpack-config is deprecated in favor of Expo CLI's Metro web
  • CSS enabled by default with Metro web
  • tsconfigPaths enabled in @expo/metro-config by default for path aliases
  • Babel configuration changes: Removed unnecessary Hermes transforms, moved vector-icons alias to Metro resolver, added Reanimated plugin by default
  • Bundler no longer starts automatically from Xcode
  • npx expo prebuild no longer runs install on each run by default if no dependency changes

Notable Breaking Changes

  • Android SDK 34, AGP 8, and Java 17: Must install JDK 17 for local builds
  • Android minimum supported version bumped to Android 6 (API 23)
  • iOS minimum deployment target bumped to 13.4
  • Expo CLI and React Native now require Node 18+
  • Classic updates no longer supported: Use EAS Update instead
  • @expo/vector-icons updated to react-native-vector-icons@10.0.0: Adds FontAwesome6 support, changes to Ionicons and MaterialIcons (ios-/md- prefixes dropped)
  • expo-updates APIs mostly unavailable in Expo Go and expo-dev-client: These are designed for production builds
  • React Native 0.73 changed to Kotlin: MainApplication.java/MainActivity.java now MainApplication.kt/MainActivity.kt
  • ProgressBarAndroid and ProgressViewIOS removed from React Native
  • Refer to Expo Router v3 breaking changes if you use it

Expo Go: Dropped SDK 47 and 48

SDK 47 and 48 projects will no longer work in the latest version of Expo Go. Older versions of Expo Go can be installed for these SDKs.

A single SDK version per release of the Expo Go app: Looking ahead to SDK 51

Expo Go has historically supported multiple SDK versions in a single installation. Starting with SDK 51, each Expo Go release will support only a single SDK version. This change is motivated by the shift toward development builds as the primary development workflow. Expo CLI will continue to automatically install the appropriate Expo Go version for your project's SDK.

Known Issues

  • Snack support for SDK 50 is not yet available
  • Expo Go for iOS: Source maps not working correctly, JavaScript debugger doesn't connect (not present in development builds)

Upgrading your app

Update to the latest version of EAS CLI:

npm i -g eas-cli

Install the new version of the Expo package:

npm install expo@^50.0.0

Upgrade all dependencies to match SDK 50:

npx expo install --fix

Additional upgrade steps:

  • Verify and remove unnecessary resolutions/overrides in package.json
  • Run npx expo-doctor@latest to check for known issues
  • Check changelog for all breaking changes
  • Upgrade Xcode if needed (Xcode 15 required, 15.2 recommended)
  • If using Expo Router, check v3 breaking changes
  • If not using Continuous Native Generation:
    • Run npx pod-install if you have an ios directory
    • Apply changes from the Native project upgrade helper
    • Or consider adopting prebuild
  • If maintaining Expo Modules:
    • For Android: Update build.gradle for Gradle 8 changes
    • For iOS: Update platform deployment target from '13.0' to '13.4'
  • If maintaining config plugins: Update for MainActivity/MainApplication Kotlin migration
  • If using Expo Go: Update from app stores
  • If using development builds with expo-dev-client: Create a new development build after upgrading
  • Join the SDK 50 launch live-stream on January 31st on YouTube

Fetched April 8, 2026