---
modificationDate: May 06, 2026
title: Expo SDK reference
description: Access device and system functionality in your Expo and React Native apps using Expo SDK packages.
---

<AgentInstructions>

## Submitting Feedback

If this page contains errors, outdated information, or gaps that blocked you from completing a task, report it so the docs can be improved:

curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/versions/v56.0.0/","feedback":"🤖 Agent feedback: <specific, actionable description>"}'

Only submit when you have something specific and actionable to report.

</AgentInstructions>

# Expo SDK reference

Access device and system functionality in your Expo and React Native apps using Expo SDK packages.

> For the complete documentation index, see [llms.txt](/llms.txt). Use this file to discover all available pages.

The Expo SDK is a collection of packages that provide access to device and system functionality such as camera, contacts, location, sensors, haptics, and more. Each package targets a specific feature and can be used independently. All packages work in any React Native app with the `expo` package installed.

You can install any Expo SDK package using the [`npx expo install`](/more/expo-cli#install) command. For example, three different packages are installed using the following command:

```sh
npx expo install expo-camera expo-contacts expo-sensors
```

After installing one or more packages, you can import them into your JavaScript code:

```ts
import { CameraView } from 'expo-camera';
import * as Contacts from 'expo-contacts';
import { Gyroscope } from 'expo-sensors';
```

This allows you to write [`Contacts.getContactsAsync()`](/versions/v56.0.0/sdk/contacts#contactsgetcontactsasynccontactquery) and read the contacts from the device, read the gyroscope sensor to detect device movement, or start the phone's camera and take photos.

## All Expo SDK packages work in any React Native app

Expo apps are React Native apps, so all Expo SDK packages work in any React Native app with the `expo` package installed and configured. The easiest way to create a React Native app with support for Expo SDK packages is to use `create-expo-app`. However, you can also add Expo SDK support to an existing React Native app with the `npx install-expo-modules` command.

```sh
npx create-expo-app my-app --template bare-minimum
```

[Install Expo SDK packages in existing React Native apps](/bare/installing-expo-modules) — Learn more about configuring projects created with npx @react-native-community/cli@latest init to Expo SDK packages. — npx @react-native-community/cli@latest init

[Use libraries](/workflow/using-libraries) — Learn how to install Expo SDK packages in your project.

## Using pre-release versions

New Expo SDK versions are released three times each year. Between these releases, we publish pre-release versions of the `expo` package and all of the Expo SDK packages. Pre-releases are not considered stable and should only be used if you are comfortable with the risk of encountering bugs or other issues.

### Canary releases

Canary releases represent a snapshot of the state of the `main` branch at the time they are published. Canary package versions include `-canary` in the name, along with the date and commit hash, such as `55.0.0-canary-20260121-a63c0dd`. To install the latest canary release:

```sh
npm install expo@canary && npx expo install --fix
```

You can often use pre-release versions of individual packages with stable releases of the Expo SDK. There may occasionally be incompatibilities or other issues that arise in canary-quality releases. You may want to [silence dependency validation warnings](/more/expo-cli#configuring-dependency-validation) if you opt in to the canary package and once you have verified that it works well for your use cases.

### Beta releases

Before each Expo SDK release, we publish beta versions of the `expo` package and all of the Expo SDK packages. Beta releases are considered much more stable than canary releases, and we encourage developers to try them out on their apps and share their feedback. Beta releases use the `beta` tag on npm and follow the instructions in the related [changelog](https://expo.dev/changelog) post.

## Each Expo SDK version depends on a React Native version

| Expo SDK version | React Native version | React version | React Native Web version | React Native TV version | Minimum Node.js version |
| --- | --- | --- | --- | --- | --- |
| 56.0.0 | 0.85 | 19.2.3 | 0.21.0 | 0.85-stable | 22.13.x |
| 55.0.0 | 0.83 | 19.2.0 | 0.21.0 | 0.83-stable | 20.19.x |
| 54.0.0 | 0.81 | 19.1.0 | 0.21.0 | 0.81-stable | 20.19.x |

### Additional information

Expo SDK policy for tracking React Native releases

-   Expo SDK versions are released three times each year, and each Expo SDK release targets a single React Native version. This is typically the latest stable version at the time of the release.
-   The release cadence of React Native has varied over its history and it is currently on pace for six releases in 2025. While on this cadence, you can expect that there will be an Expo SDK version for every second React Native release.
-   Pre-release versions of the upcoming Expo SDK will include support for the latest version of React Native quickly, usually the same day it is released. A member of the Expo SDK team works on the React Native releases team for each release, and is responsible for continuously updating the React Native version in the Expo repository, verifying compatibility, and reporting regressions back to the team at Meta.

Why not release a new Expo SDK version immediately for every React Native release?

At Expo, we have found that releasing three major version provides a good balance of stability and innovation for developers depending on our open source tools. Expo and Meta work closely together on releases, and we will keep improving our processes to get the latest Expo and React Native features to you as quickly as possible.

What if I need a change from the latest React Native version and it's not yet in an Expo SDK release?

We work closely with the team at Meta to ensure that any urgent fixes are included in the React Native version used by the latest Expo SDK. If your issue won't be cherrypicked into an existing release because it is more niche, or it involves a breaking change, then you have two options:

1.  Use [`patch-package`](https://github.com/ds300/patch-package) to pull in the fix.
2.  Use a [pre-release version of the Expo SDK](/versions/v56.0.0#using-pre-release-versions). An ([example](https://expo.dev/changelog/react-native-78)).

Can I use an older version of React Native with the latest Expo SDK?

Packages in the Expo SDK are intended to support the target React Native version for that SDK. Typically, they will not support older versions of React Native, but they may. When a new version of React Native is released, the latest versions of the Expo SDK packages are typically updated to support it. However, this may take weeks or more, depending on the extent of the changes in the release.

## Support for Android and iOS versions

Each version of Expo SDK supports a minimum OS version of Android and iOS. For Android, the `compileSdkVersion` is defined which tells the [Gradle](https://developer.android.com/studio/build) which Android SDK version to use to compile the app. This also means that you can use the Android API features included in that SDK version and from the previous versions. For iOS, the [Xcode](https://developer.apple.com/news/upcoming-requirements/) tells the minimum Xcode SDK version to use to compile the app.

| Expo SDK version | Android version | `compileSdkVersion` | `targetSdkVersion` | iOS version | Xcode version |
| --- | --- | --- | --- | --- | --- |
| 56.0.0 | 7+ | 36 | 36 | 16.4+ | 26.2+ |
| 55.0.0 | 7+ | 36 | 36 | 15.1+ | 26.2+ |
| 54.0.0 | 7+ | 36 | 36 | 15.1+ | 16.1+ |

When deciding whether to upgrade your Expo SDK version, consider both Expo's SDK version and app store submission requirements, as described in the above table. Google Play Store and Apple App Store periodically increase their minimum required OS versions and API levels, which are required for new app submissions. Expo has no control over the app store requirements, and you should check [Google](https://developer.android.com/studio/build) and [Apple](https://developer.apple.com/news/upcoming-requirements/) for the current store submission requirements.
