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.
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"]
}
]
}
}
}
}
"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@beta
TextEncoder
, 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.
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@beta
bun create expo-app --template default@beta
yarn create expo-app --template default@beta
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.npx expo install expo@next --fix
i
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! 🚀