Expo

Get Started
Feature Preview

Installation in React Native and Bare workflow projects

The installation steps on this page are only required to add the expo-dev-client library to a React Native or Bare project. To add a the expo-dev-client library to an existing managed project, see our Getting Started guide.
If you're just starting your project, you can create a new project from our template with:
npx crna -t with-dev-client
If you have an existing project, you'll need to install the package and make a few changes to your AppDelegate.m, MainActivity.java and MainApplication.java.
If you created your project with expo init, or you already have expo and/or other Expo modules up and running, use the tabs marked With Expo modules.
If you created your project with expo init before SDK 43 and have react-native-unimodules up and running, use the tabs marked With unimodules. When you're ready, consider upgrading to the newer Expo modules by following these steps.
If you created your project with npx react-native init and do not have any other Expo packages installed, use the tabs marked Without Expo Modules.
Note: if you are using SDK 43 or above, you'll need to install expo-dev-client@0.6.0 or above.

1. Installation

Add the expo-dev-client library to your package.json.
npm install expo-dev-client

Add the following lines to your Podfile:
Add an empty Swift file to your project from inside of Xcode by choosing File > New > File > Swift File.
When the above prompt comes up, choose "Create Bridging Header".
Add configuration in react-native.config.js to allow React Native autolinking to find the dependencies of expo-dev-client:
Then you can run the following command to install native code for the Dev Launcher via CocoaPods.
npx pod-install
Also, make sure that your project is configured to deploy on an iOS version above 10. To do that, open Xcode and go to General > Deployment Info, and select an iOS version of at least 11.0.

If your project is set up with Expo modules, no additional changes are needed to install the package on Android. 🎉
Add the following lines to your settings.gradle:
Additionally, ensure your project's minSdkVersion and Gradle version are at least the following:

Development builds use deep links to open projects from the QR code. If you have added a custom deep link scheme to your project, your development build will use it. However, if this isn't the case, you need to configure the deep link support for your app. The uri-scheme package will do this for you once you have chosen a scheme.
npx uri-scheme add <your scheme>
See the uri-scheme package for more information.

Make the following changes to allow the expo-dev-client library to control project initialization in the DEBUG mode.
⚠️
Make sure to replace MyApp on line 75 in the following diff with your app's actual module name (found on the removed line 36).

Make the following changes to allow the expo-dev-client library to control project initialization in the DEBUG mode.

There are a few more changes you can make to get the best experience, but you can skip ahead to building if you prefer.

Expo CLI requires you to have the expo package installed so it can maintain consistent behavior in your project when new versions of the Expo SDK are released. The package will not be used directly by your project unless you import it in your application code, which is not recommended.
npm install expo --save-dev

When you start your project on iOS, the metro bundler will be started automatically. This behavior might not be ideal when you want to use expo start. Our recommended solution is to remove the Start Packager action from building scripts. To do that you need to open the Xcode, go to "Build Phases" and remove the "Start Packager" action.

Sometimes, for certain types of errors, we can provide more helpful error messages than the ones that ship by default with React Native. To turn this feature on you need to import expo-dev-client in your index file (in the managed workflow, you need to add this import on top of the App.{js|tsx}). Make sure that the import statement is above import App from './App'.
import 'expo-dev-client';
...
import App from "./App";
Note: This will only affect the application in which you make this change. If you want to load multiple projects from a single development app, you'll need to add this import statement to each project.

Development builds can also open and preview published updates to your app. To add this feature, add expo-updates@0.8.0 or newer to your app if it isn't already installed, and add a small additional integration in your AppDelegate.m and MainApplication.java files.
  1. Install expo-modules in your project.
  2. Install expo-updates in your project.
  3. Make the following changes to complete the integration with expo-updates: