Learn how to add Expo SDK to an existing React Native project.
Are you migrating from
react-native-unimodules
? If yes, please refer to the Expo modules migration guide.
To use Expo modules in your app, you will need to install and configure the expo
package.
The expo
package has a small footprint; it includes only a minimal set of packages that are needed in nearly every app and the module and autolinking infrastructure that other Expo SDK packages are built with. Once the expo
package is installed and configured in your project, you can use npx expo install
to add any other Expo module from the SDK.
Depending on how you initialized the project, there are two ways you can install the Expo modules: automatic or manual.
To install and use Expo modules, the easiest way to get up and running is with the install-expo-modules
command.
# Install and configure the expo package automatically
npx install-expo-modules@latest
When the command succeeds, you will be able to add any Expo module in your app! Proceed to Usage for more information.
If the command fails, please follow the manual installation instructions. Updating code programmatically can be tricky, and if your project deviates significantly from a default React Native project, then you need to perform manual installation and adapt the instructions here to your codebase.
The following instructions apply to installing the latest version of Expo modules in React Native 0.68.
npm install expo
Once installation is complete, apply the changes from the following diffs to configure Expo modules in your project. This is expected to take about five minutes, and you may need to adapt it slightly depending on how customized your project is.
Optionally, you can also add additional delegate methods to your AppDelegate.mm. Some libraries may require them, so unless you have a good reason to leave them out, it is recommended to add them. See delegate methods in AppDelegate.mm.
Save all of your changes. In Xcode, update the iOS Deployment Target under Target → Build Settings → Deployment
to iOS 12.0
. The last step is to install the project's CocoaPods again in order to pull in Expo modules that are detected by use_expo_modules!
directive that we added to the Podfile
:
# Install pods
npx pod-install
# Alternatively, the run command will install them for you
expo run:ios
You can verify that installation was successful by logging a value from expo-constants. Run expo install expo-constants
, then run expo run:[android|ios]
and modify your app JavaScript code to add the following:
import Constants from 'expo-constants';
console.log(Constants.systemFonts);
Once the expo
package is installed and configured in your project, you can use expo install
to add any other Expo module from the SDK. Learn more in "Using Libraries".
expo
packageThe following Expo modules are brought in as dependencies of the expo
package:
expo-dev-client
.expo-file-system
and provides a common foundation for assets across all Expo modules.expo-asset
and many other Expo modules. Commonly used directly by developers in application code.expo-dev-client
for development and it is required by @expo/vector-icons
.To exclude any of these modules, refer to the following guide on excluding modules from autolinking.
If you need to exclude Expo modules that you are not using but they got installed by other dependencies, you can use the expo.autolinking
field in package.json:
{
"name": "...",
"dependencies": {},
"expo": {
"autolinking": {
"exclude": ["expo-keep-awake"]
}
}
}
You can also exclude a specific platform by using exclude
under the platform key:
{
"name": "...",
"dependencies": {},
"expo": {
"autolinking": {
"exclude": ["expo-font"],
"ios": {
"exclude": ["expo-keep-awake"]
}
}
}
}