New updates and improvements to Expo and EAS.
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! 🚀
Apr 5, 2024 by
Szymon Dziedzic
Mar 29, 2024 by
Szymon Dziedzic
Starting on April 29th, 2024, apps uploaded to App Store Connect must be built with Xcode 15 for iOS 17, iPadOS 17, tvOS 17, or watchOS 10.
To ensure that your builds are compatible with the upcoming requirements, you can opt-in to use the Xcode 15 for your iOS builds by specifying "image": "macos-sonoma-14.4-xcode-15.3"
or "image": "latest"
in your eas.json configuration file.
"latest"
is an alias that points to the most recently added image. If you are reading this
post long after the publication date, it may point to a different image.
Refer to the build image documentation for more information.
Following Apple's announcement we are planning to drop the support for all of the iOS images with Xcode < 15 a month after the required Xcode version changes on Apple's side. This means that starting on May 29th, 2024, we will no longer provide the following images:
macos-monterey-12.1-xcode-13.2
macos-monterey-12.3-xcode-13.3
macos-monterey-12.4-xcode-13.4
macos-monterey-12.6-xcode-14.0
macos-monterey-12.6-xcode-14.1
macos-monterey-12.6-xcode-14.2
macos-ventura-13.3-xcode-14.3
macos-ventura-13.4-xcode-14.3.1
If you are using one of the images listed above, we recommend updating your configuration to use Xcode 15 as soon as possible to avoid any disruptions in your build process.
Jan 23, 2024 by
Evan Bacon
Welcome to Expo Router v3, our most powerful release yet! Today we're introducing beta support for the newest Expo platform: Servers. With this, Expo Router is now the first universal, full-stack React framework!
.mjs
support.<Link />
props: Configure and style <Link />
components with the new target
, push
, and className
props.Get started with Expo Router v3 today in one line:
-
npx create-expo-app@latest -t tabs@50
If you're new here, Expo Router uses a file-based approach to app development which enables you to build more powerful apps than ever before, with less boilerplate code. The key features so far have been autocomplete and type safety for navigation, SEO and accessibility for web, automatic universal linking, lazy bundling, and more!
Read moreJan 18, 2024 by
Brent Vatne
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.
Read moreXcode 15.2 image is now available on EAS Build
Jan 18, 2024 by
Szymon Dziedzic
Expo 2023: The year in review
Dec 20, 2023 by
Jon Samp
Xcode 15.1 image is now available on EAS Build
Dec 19, 2023 by
Szymon Dziedzic
EAS Update: new dashboard UI features
Dec 13, 2023 by
Tomasz Czajecki
Expo SDK 50 beta is now available
Dec 12, 2023 by
Brent Vatne
Keep your cache close — It’s Faster!
Dec 7, 2023 by
Stanisław Chmiela
Introducing Build Annotations
Dec 1, 2023 by
Kadi Kraman
Speed up your development workflow with Automatic GitHub builds
Nov 29, 2023 by
Juwan Wheatley
Expo Orbit v1: launcher app launched into orbit
Nov 14, 2023 by
Gabriel Donadel
EAS Build: Upgrading default Node.js version from 16 to 18 on November 27th, 2023
Nov 3, 2023 by
Brent Vatne
Refreshed Sidebar Navigation in Dashboard
Oct 26, 2023 by
Tomasz Czajecki
Fix for CVE-2023-4863 in expo-image@1.3.4
Sep 29, 2023 by
Brent Vatne
Xcode 15 and iOS 17
Sep 28, 2023 by
Brent Vatne
Support for Bun in EAS and Expo CLI
Sep 25, 2023 by
Kadi Kraman
Introducing Notification Center
Sep 12, 2023 by
Steven Songqi Pu
Pinning Projects in Dashboard
Aug 25, 2023 by
Tomasz Czajecki
Understand your users and grow your app with EAS Insights
Aug 22, 2023 by
Chris Walter
Proof of concept: Expo CLI Dev Tools Plugins
Aug 10, 2023 by
Kudo Chien
Preview: fully customizable builds on EAS Build
Aug 10, 2023 by
Szymon Dziedzic
Proof of concept: expo-sqlite integration with CR-SQLite
Aug 10, 2023 by
Alan Hughes
Expo Orbit: Download and launch builds
Aug 9, 2023 by
Gabriel Donadel
useUpdates() API for expo-updates
Aug 8, 2023 by
Doug Lowder
Single Sign-On (SSO)
Aug 8, 2023 by
Will Schurman
Rollouts for EAS Update
Aug 8, 2023 by
Quinlan Jung
New Dashboard Tables and More Timeline Activities
Aug 2, 2023 by
Tomasz Czajecki
Enforcement of EAS Free plan limits
Aug 1, 2023 by
Chris Jensen
Expo VS Code theme
Jul 24, 2023 by
Bartosz Kaszubowski
Link your GitHub repo with Expo
Jul 19, 2023 by
Juwan Wheatley
Improved Expo Docs organization
Jul 5, 2023 by
Aman Mittal
App.js 2023
May 3, 2023 by
Jon Samp
Changes summary Q4 2022
Jan 31, 2023 by
Jon Samp