Edit this page
Learn how to quickly get started by creating a new project with Expo Router or adding the library to an existing project.
Find the steps below to create a new project with Expo Router library or add it to your existing project.
1
We recommend creating a new Expo app using create-expo-app
to create a project with Expo Router library already installed and configured:
-
npx create-expo-app@latest
2
Now, you can start your project by running:
-
npx expo start
Follow the steps below if you have a project that was previously created with Expo but does not have Expo Router library installed.
Make sure your computer is set up for running an Expo app.
1
You'll need to install the following dependencies:
-
npx expo install expo-router react-native-safe-area-context react-native-screens expo-linking expo-constants expo-status-bar
The above command will install versions of these libraries that are compatible with the Expo SDK version your project is using.
-
npx expo install expo-router react-native-safe-area-context react-native-screens expo-linking expo-constants expo-status-bar react-native-gesture-handler
The above command will install versions of these libraries that are compatible with the Expo SDK version your project is using.
2
For the property main
, use the expo-router/entry
as its value in the package.json. The initial client file is app/_layout.js.
{
"main": "expo-router/entry"
}
3
Add a deep linking scheme
in your app config:
{
"scheme": "your-app-scheme"
}
If you are developing your app for web, install the following dependencies:
-
npx expo install react-native-web react-dom
Then, enable Metro web support by adding the following to your app config:
{
"web": {
"bundler": "metro"
}
}
4
Ensure you use babel-preset-expo
as the preset
, in the babel.config.js file or delete the file:
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
If you're upgrading from a version of Expo Router that is older than v3, remove the plugins: ['expo-router/babel']
. expo-router/babel
was merged in babel-preset-expo
in SDK 50 (Expo Router v3).
Add expo-router/babel
plugin as the last item in the plugins
array to your project's babel.config.js:
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: ['expo-router/babel'],
};
};
Note: If your project doesn't have babel.config.js, run
npx expo customize babel.config.js
to create one.
5
After updating the Babel config file, run the following command to clear the bundler cache:
-
npx expo start -c
6
If you're upgrading from an older version of Expo Router, ensure you remove all outdated Yarn
resolutions or npm overrides in your package.json. Specifically, remove metro
,
metro-resolver
, react-refresh
resolutions from your package.json.
Expo Router requires at least react-refresh@0.14.0
. React Native hasn't upgraded as of SDK 49 and Expo Router v2, so you need to force upgrade your react-refresh
version by setting a Yarn resolution or npm override.
{
%%placeholder-start%%... %%placeholder-end%%
"resolutions": {
"react-refresh": "~0.14.0"
}
}
{
%%placeholder-start%%... %%placeholder-end%%
"overrides": {
"react-refresh": "~0.14.0"
}
}