Using Expo SDK, React Native, and third-party libraries
Edit page
Learn how to use Expo SDK, React Native libraries, and other third-party npm packages in your project.
Edit page
Every app is inevitably going to use a third-party library, so it's important to understand how to determine whether a library is compatible with your project.
React Native core libraries
React Native provides a set of built-in primitives that most developers will need in their apps. These include components such as<ActivityIndicator>,<TextInput>,<Text>,<ScrollView>, and<View>. These are listed atCore Components and APIs in React Native documentation. You can also view theReact Native version that corresponds to your Expo SDK version.
To use a React Native component or API in your project, import it from thereact-native package in your code:
import{Text,View}from'react-native';exportdefaultfunctionApp(){return(<Viewstyle={{ flex:1, justifyContent:'center', alignItems:'center'}}><Text>Hello, world!</Text></View>);}
Expo SDK libraries
The Expo SDK picks up where the React Native core libraries end. It provides access to a lot of device and system functionality such as audio, barcode scanning, camera, calendar, contacts, video, and so on. It also adds other powerful libraries like updates, maps, OAuth authentication tools, and more. For more information, see how we decidewhat goes into the Expo SDK.
To use a library from the Expo SDK, find the one you are looking for in theAPI reference or use the documentation search.
Are you using this library in an existing React Native app?
If you initialized your app usingnpx @react-native-community/cli@latest init and you don't have theexpo package installed in it yet, see theinstalling Expo modules guide for more information.
You will see the platform compatibility tags at the top of each API reference. It tells you which platforms and environments the library is compatible with. For example, the platform tags for theexpo-device library look like the following:
After the platform compatibility table, there is a library's description and a section with instructions on installing the library. For example:
- npx expo install expo-deviceThenpx expo install command picks a library version compatible with your project and then uses your JavaScript package manager (such as npm) to install it.
Next, a typical API reference includes:
- Config plugin usage information if the library requires a config plugin.
- A code example that shows how to use the library.
- API section that lists how to import the library, followed by a list of hooks, props, types, methods, and classes that the library provides.
Note: If you use TypeScript, you can see the information included in the API section in your TypeScript-compatible code editor (such as VS Code) with auto-completion.
Third-party libraries
Finding a third-party library
React Native Directory is a searchable database of libraries built specifically for React Native. If the library that you are looking for is not provided by React Native or the Expo SDK then this is the best place to look first when trying to find a library for your app.
After the React Native Directory, thenpm registry is the next best place. The npm registry is the definitive source for JavaScript libraries, but the libraries that it lists may not all be compatible with React Native. React Native is one of many JavaScript programming environments, including Node.js, web browsers, Electron, and more, and npm includes libraries that work for all of these environments. Any library that is compatible with React Native is compatible with the Expo project when you create adevelopment build. However, it may not be compatible with theExpo Go app.
Determining third-party library compatibility
Use Expodevelopment builds for building production-quality apps. It includes all of the native code that your project needs to run. This is a great way to test your app before you publish it to the App Store or Google Play. You can also include libraries that require native projects (android andios directories) configuration.
The Expo Go app is an optional stepping stone towards development builds. You can use it to quickly test your app while you are developing it, but it does not include all of the native code required to support every library. You can checkReact Native Directory to find a library compatible with Expo Go by visiting the website and verifying that it has a "✔️ Expo Go" tag. You can also enable thefilter by Expo Go.
To determine if a new dependency changes native project directories, you can check the following:
- Does the library includesandroid orios directories?
- Does the library's README mention linking?
- Does the library requires you to changeandroid/app/src/main/AndroidManifest.xml orios/Podfile orios/Info.plist to change the project configuration?
- Does the library have aconfig plugin?
If you answered yes to any of these questions, then you shouldcreate a development build to use the library in your project.
Not listed on the directory? You can find the project on GitHub. A simple way to do this is withnpx npm-home --github <package-name>. For example, to open the GitHub page forreact-native-localize, run:
- npx npm-home--github react-native-localizeIf you want some help determining library compatibility,create an issue on the React Native Directory repository and let us know. This will not just help you, it will also help other developers have an easy answer in the future!
Installing a third-party library
We recommend always using
npx expo installinstead ofnpm installoryarn adddirectly because it allowsExpo CLI to pick a compatible version of a library when possible and also warn you about known incompatibilities.
Once you have determined if the library is compatible with React Native, useExpo CLI to install the package:
- npx expo install @react-navigation/nativeBe sure to follow the project website or README for any additional configuration and usage instructions. You can get to the README quickly using this command:
- npx npm-home @react-navigation/nativeIf the module needs additional native configuration, you can do so usingconfig plugins. Some packages require a config plugin but they don't have one yet, you can refer to the list ofout-of-tree config plugins.
Are you using this library in an existing React Native app?
If your project does not supportExpo Prebuild then you won't be able to useconfig plugins. You can eitheradopt Expo Prebuild or set up and configure each library manually by following any additional setup guides from the respective module's website or README.
If the module is not supported inExpo Go, you can create adevelopment build:
Learn how to add custom native code to your Expo project.
Excluding a third-party library from version checks
If you have a specific version of a third-party library installed and want it to be excluded from version checks performed bynpx expo install,npx expo-doctor, ornpx expo start, use theexpo.install.exclude property in thepackage.json file.