Apr 24, 2024 by

Brent Vatne
The SDK 51 beta period begins today and will last approximately one week. 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’re also hosting office hours for those of you interested in helping test the release!
SDK 51 beta includes React Native 0.74. The full release notes for SDK 51 won't be available until the stable release, but you can browse the changes in the expo/expo CHANGELOG to learn more about the scope of the release and any breaking changes.
When you create a new project with npx create-expo-app --template default@beta, you will see our ✨renovated new project template✨!  It includes common dependencies and configuration that most projects need, so you can hit the ground running.

That's a lot of code to delete if you don't need it! That's why you can run npm run reset-project to remove all of the boilerplate code and start fresh.
expo-camera/next is now exported from expo-camera (learn more), and expo-sqlite/next is now exported from expo-sqlite (learn more). You can find the old versions at expo-camera/legacy and expo-sqlite/legacy during SDK 51, and they will be removed in SDK 52. Thank you to everybody who used these APIs during SDK 50 and gave us feedback!expo-av over the years. This library is a complete rewrite of the Video functionality from expo-av, and it's designed to be more reliable and easier to use. We expect to update this library frequently during the SDK 51 cycle, and so it will not yet be available in Expo Go (yet another reason to use Development Builds). Learn more.{
  "expo": {
    "ios": {
      "privacyManifests": {
        "NSPrivacyAccessedAPITypes": [
          {
            "NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryUserDefaults",
            "NSPrivacyAccessedAPITypeReasons": ["CA92.1"]
          }
        ]
      }
    }
  }
}

Autocompletion with TypeScript makes it easy to find the right symbol for expo-symbols.
"runtimeVersion": { "policy": "fingerprint" } field in your app.json, you can be confident that your updates will always target compatible native runtimes. This makes @expo/fingerprint integration with EAS Build and Update seamless. Learn more about how this helps you to achieve Continuous Deployment, and learn about how @expo/fingerprint works.npx expo lint command: You can now run npx expo lint in your project to generate an ESLint config file that extends from eslint-config-expo. The philosophy of this config is to focus on code correctness and avoid stylistic rules that can be subjective. More documentation is coming soon, until then you can read the rules in the source code.# When ESLint is not configured yet
npx expo lint
? No ESLint config found. Install and configure ESLint in this project? › (Y/n)
# After ESLint has been configured
npx expo lint
> yarn eslint .
$ /app/node_modules/.bin/eslint .
/app/components/HelloWave.tsx
  22:6  warning  React Hook useEffect has a missing dependency: 'rotateAnimation'. Either include it or remove the dependency array  react-hooks/exhaustive-deps
✖ 1 problem (0 errors, 1 warning)
EXPO_USE_FAST_RESOLVER=1 can be set to enable up to 6x faster Metro resolution. We've also fully removed "exotic" bundling in favor of the default expo/metro-config which has fully integrated stable speed improvements.npx expo run:ios --device to pick a device from the list of available devices on your network, in the same way you would from the device selection window in Xcode.npx expo run:ios --device
? Select a device ›
❯   🌐 Brent iPhone (17.4.1)
    🌐 Apple Vision Pro (1.1.1)
    iPhone 15 (17.4)
    iPhone 15 Plus (17.4)
  ↓ iPad Pro (12.9-inch) (6th generation) (17.4)create-expo/create-expo-app will initialize a project with the required configuration to ensure that it will work with your package manager of choice.🗄️ npx create-expo-app@latest --template default@beta
🌭 bunx create-expo-app --template default@beta
📦 pnpm create expo-app --template default@beta
🧶 yarn create expo-app --template default@betaTextEncoder, btoa, atob are now globally available in Hermes.expo-camera to expo-camera/legacy. If you were already using the "next" implementation, then update the imports from expo-camera/next to expo-camera. The legacy implementation will be available until SDK 52.expo-sqlite to expo-sqlite/legacy. If you were already using the "next" implementation, then update the imports from expo-sqlite/next to expo-sqlite. The legacy implementation will be available until SDK 52."runtimeVersion": { "policy": "fingerprintExperimental" } → "runtimeVersion": { "policy": "fingerprint" } in your app.json.hooks field has been removed from app.json: this was previously used for the Classic Updates and sentry-expo, which was deprecated in SDK 50 in favor of @sentry/react-native. You should remove the hooks field from your app config.sentry-expo was deprecated in favor of @sentry/react-native, which we worked closely with the Sentry team on to ensure first-class support for Expo projects. Learn more.SDK 51 and React Native 0.74 represent a huge step forward in rolling out the long-awaited New Architecture for React Native.
There is still work to do, but we've made some incredible progress so far this year and we think SDK 51 and React Native 0.74 is the time to test your apps with the New Architecture. With your help, we can enable the New Architecture by default in SDK 52.
That said, most apps will run into some issues when testing with the New Architecture today, but we encourage you to try and report your experience. Improvements will be arriving rapidly during the SDK 51 and React Native 0.74 cycle, so if your initial attempt isn't successful, you might want to create a branch that you can retry every couple weeks with the latest versions of every package.
As announced in SDK 50, starting with SDK 51, Expo Go will only support a single SDK version at a time. This means that when the new Expo Go version supporting SDK 51 is released to the App Store and Play Store, it will only support SDK 51. It will not support SDK 50 or below. The Expo Go app will continue to be a great sandbox to get started quickly and experiment with ideas, but we encourage adopting development builds for a flexible and powerful development environment suitable for real-world applications at scale.
To make it as easy as possible to install a specific version of Expo Go, created expo.dev/go, a website that makes it as easy as possible to install a compatible version of Expo Go on your target platform. This works on Android devices/emulators and iOS simulators, but due to limitations of the iOS platform, you will only be able to use the latest version of Expo Go on physical iOS devices.

expo.dev/go makes it easy to install a compatible version of Expo Go on your target platform. The error message that you see when you try to open a project with an unsupported SDK version in Expo Go links directly to this website with the appropriate version and platform selected.
Most of the user-facing changes in the latest release of Expo Router are bug fixes and improvements based on feedback from the community. Some notable changes include:
const { "#": hash } = useLocalSearchParams().router.dismiss(), .dismissAll() and .canDismiss()ExpoRequest and ExpoResponse objects in favor of built-in WinterCG-compliant Request/Response objects._layout files (a platform agnostic version is still required).experiments.baseUrl support on web.npx create-expo-app@latest --template default@betabun create expo-app --template default@betayarn create expo-app --template default@betacreate-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.npx expo install expo@next --fixi or a keyboard shortcut after running npx expo start) and the updated version of Expo Go will be automatically installed.npm install expo@next or yarn add expo@next, then run npx expo install --fix and consult the Native project upgrade helper and report any issues you encounter.npx expo prebuild --clean and npm run ios and npm run android. Alternatively, try out npx expo run. Any new issues? Please report them.Thank you for helping us with testing the release — we look forward to shipping it soon! 🚀