We are working on Expo SDK 33 and wanted to talk about some of the changes in this next release that we think are most helpful to know about in advance. When SDK 33 is ready — it is still in development — we will publish a full list of changes, and this post covers only a subset of what is coming.

⚓️ React Hooks and React Native 0.59

Expo SDK 33 will use React Native 0.59, which includes support for React 16.8.3, which includes the Hooks API. This will let you write your own Hooks as well as use those that others have written, like Nader Dabit’s React Native Hooks collection.

🌐 Expo for Web

We recently announced beta support for creating progressive web apps in addition to native Android and iOS apps from Expo projects. With SDK 33, you will be able to create apps for all three platforms from one project. Expo for Web is a very new project, so expect to see it become more robust beyond SDK 33.

🧹 Removing SDK 26, 27, 28, 29, and 30

In the next release of the Expo Client for Android and iOS, we are keeping six months of backwards compatibility but removing SDK 26 through 30. You will need to upgrade your projects to SDK 31, 32, or 33 if using the Managed workflow. The expo build service will continue to support building standalone apps for older SDK versions but the Expo Client will support only SDK 31, 32, and 33.

Several years ago, we looked to provide at least six months of backwards compatibility. React Native was released about every two weeks and we created a new Expo SDK about once a month; six months of backwards compatibility meant supporting six SDK versions at a time.

As the time between Expo SDK releases has grown longer, six months of backwards compatibility now corresponds to a smaller number of SDK versions. For technical reasons, we may not always be able to provide six months of backwards compatibility, but for the next release we plan to. SDK 31 was released at the start of November 2018, so by including SDK 31 through 33 in the next release of the Expo Client, we are still providing six months of backwards compatibility.

Removing older SDK versions also helps us with more complex upgrades, particularly on Android. In SDK 33 we are switching from gnustl to LLVM’s libc++ , which involves recompiling the older SDKs. After SDK 33, we are also looking to support 64-bit APKs in time for Google’s upcoming requirement, which is also made easier by dropping older SDK versions.

🎁 Ad Hoc Builds for iOS

For the Expo Client on iOS, we are working on providing a service that will build a custom development client for your Apple Developer team, specifically for development and testing. It is like building the Expo Client from source yourself but done for you by Expo’s app builders.

Ad Hoc Builds let you develop with a wider range of APIs that might make sense for your app but not the general Expo Client in the App Store. For example, APIs like AR and payments are allowed in apps that specifically need them, but since the Expo Client does not actively use these APIs, the App Store guidelines don’t let us include them for you to use.

However, if you were to build a development client from source you could use these APIs if they were appropriate for your app. To streamline this workflow for you, we’re providing Ad Hoc Builds you can build without Xcode and run on your own devices. At launch, we might not have support for optional APIs like AR and payments, but it is something we are working towards. You will need a paid Apple Developer account for Ad Hoc Builds, which is required for publishing to the App Store regardless.

Additionally, Ad Hoc Builds won’t have the same limitations as the Expo Client, so you will be able to open your projects with the QR code scanner, a popular request we’ve seen. Also, as we update the Expo Client and remove older SDK versions, your older ad hoc development clients will continue to work and you can upgrade them at your own pace. And in the future, Ad Hoc Builds will set things up to let you customize in-app purchases, custom URL schemes, and more — giving you the developer experience of the Expo Client and the capabilities of standalone apps.

📔 TypeScript Definitions

We have migrated the Expo SDK’s Unimodules to TypeScript, allowing us to more easily generate .d.ts files and publish them to npm alongside the JS. React Native and its surrounding tools also have gained much better support for TypeScript, making this a timely change.

➕ And More

These are many of the most significant changes coming to SDK 33 and there will be more. SDK 33 is still in development and when we next have another update, we will share it on the Expo blog here.