How to Set Up an Expo App for iOS, Android & Web
Create a current Expo SDK 57 project, start the development server, and run the same React Native app on iOS, Android, and web without installing a global Expo CLI.
Expo SDK 57 quick start
If Node.js 22.13 or newer is already installed, these commands create a current Expo app and start its development server:
npx create-expo-app@latest MyApp --template default@sdk-57
cd MyApp
npx expo start
The SDK template is explicit because Expo's documentation recommends selecting default@sdk-57 during the SDK 57 transition. The project CLI runs through npx expo; a global @expo/cli installation is not required.
What Expo creates
An Expo app is a React Native app. The default template includes TypeScript and Expo Router, and it can target Android, iOS, and web from one project.
Prerequisites and development tools
-
Install Node.js
Expo SDK 57 requires Node.js 22.13.x or newer. Use the current Node.js 22 LTS release and keep the same version in local development and CI.
# Check if Node.js is installed
node --version
npm --versionIf you don't have Node.js installed, visit nodejs.org and download the LTS version.
-
Use the project Expo CLI
The Expo CLI is included through the project's
expopackage. Run it withnpxso the CLI version stays aligned with the app:npx expo --versionAvoid old tutorials that tell you to install
expo-clior@expo/cliglobally. -
Install Required Tools
Install Xcode on macOS for the iOS Simulator and native iOS builds. Install Android Studio for the Android SDK, emulator, and native Android tooling. Web development needs only your browser and the packages installed by Create Expo App.
Creating Your First Project
-
Create a New Expo Project
Create a project from Expo's current SDK 57 default template:
npx create-expo-app@latest MyFirstApp --template default@sdk-57The default template includes TypeScript and Expo Router. Use
--template blank-typescriptonly when you intentionally want a minimal project without the default navigation structure. -
Navigate to Your Project
cd MyFirstApp -
Start the Development Server
npx expo startThis starts Metro and prints the keyboard shortcuts and QR code used by the available development targets.
Running on Different Platforms
iOS (macOS only)
-
Install Xcode
Install a version of Xcode supported by your Expo SDK and macOS release. Expo SDK 57 documents Xcode 26.4 or newer.
-
Install iOS Simulator
Open Xcode Settings, choose Platforms, and install an iOS Simulator runtime.
-
Run on iOS Simulator
With Metro running, press
i. To compile and install the native project locally, runnpx expo run:ios.
Android
-
Install Android Studio
Install Android Studio, the Android SDK, and an emulator image for a repeatable local Android development environment.
-
Choose Expo Go or a development build
Expo Go is useful for learning and quick tests when it supports your SDK and libraries. A development build is the better default for production apps because it includes your own native dependencies. Create one locally with
npx expo run:androidor through EAS Build. -
Run on Android Emulator (with Android Studio)
Start an emulator, then press
ain the Metro terminal. Usenpx expo run:androidwhen you need to compile the native Android app.
Web
-
Run on Web
Press
win the terminal or click "Run in web browser" in the Expo DevTools.This will open your app in a web browser using the Expo web runtime.
Understanding the Project Structure
The current default template uses Expo Router, so screens live in the app directory:
MyFirstApp/
├── app/
│ ├── _layout.tsx # Root navigation layout
│ └── index.tsx # First screen
├── assets/ # Images, fonts, and icons
├── app.json # Expo app configuration
├── package.json # Dependencies and scripts
└── tsconfig.json # TypeScript configuration
Edit app/index.tsx to change the first screen. The app/_layout.tsx file configures the root navigator, while app.json contains app identity, platform settings, icons, and config plugins.
Next Steps
You now have a working Expo app and a current toolchain. Continue with the parts that turn the starter into a production app: