Skip to content

Expo vs React Native CLI: Which Should You Start With?

React Native apps can start in two broad ways. Expo provides a full framework around React Native: file-based routing with Expo Router, a large set of maintained native modules, Continuous Native Generation that creates iOS and Android projects from configuration, and optional EAS cloud services for building, submitting and updating apps. React Native CLI, maintained by the community, creates a project with native folders you own and edit yourself.

Quick verdict

Expo is a React Native framework with routing, a native module library, generated native projects and optional cloud services for builds, submissions and updates. React Native CLI is the community command-line tool for apps that manage their own iOS and Android projects directly. The React Native docs now recommend starting new apps with a framework such as Expo; choose the CLI when you need full manual control.

The official React Native documentation now recommends using a framework for new apps and points to Expo, which reflects how far Expo has moved from its early, restrictive reputation. Custom native code, config plugins and development builds are all supported. The CLI path still matters for teams with existing native code, unusual build pipelines or a preference for managing every native detail by hand.

Expo vs React Native CLI, side by side

CriterionExpoReact Native CLI
What it isFull React Native framework with tooling and optional cloud servicesCommunity command-line tool for a self-managed React Native project
Official guidanceRecommended framework in the React Native docsSupported for teams that prefer no framework
Native projectsGenerated from configuration with prebuild, or committed if preferredCommitted and edited directly in Xcode and Android Studio
Custom native codeSupported through Expo Modules API, config plugins and development buildsSupported directly in native folders
RoutingExpo Router, file-based, built inChoose your own, commonly React Navigation
Builds and submissionEAS Build and Submit, or local buildsLocal builds or your own CI pipeline
Over-the-air updatesEAS Update or self-hosted update serverSet up your own solution
UpgradesSDK releases bundle tested module versionsManual native changes guided by the upgrade helper
Best fitMost new apps, startups and product teamsBrownfield apps and teams needing full manual native control

Choose Expo when

  • You are starting a new app and want the officially recommended path.
  • You want routing, common native modules and builds set up quickly.
  • Over-the-air updates for JavaScript changes are valuable to you.
  • Your team is stronger in React than in Xcode and Gradle.
  • You prefer upgrades handled through tested SDK releases.

Choose React Native CLI when

  • You are adding React Native screens to an existing native app.
  • Your build process has strict in-house CI or security requirements.
  • You want to edit native projects directly without generation steps.
  • Experienced iOS and Android engineers will own the native layers.

Why Expo became the default

Early Expo limited which native code apps could use, so many teams moved to the CLI as soon as they needed a custom SDK. That limitation is gone. Development builds work like a custom version of the Expo Go app with your own native code, config plugins modify native projects during prebuild, and the Expo Modules API makes writing Swift and Kotlin modules straightforward. As a result, the React Native docs now steer new projects toward a framework.

Expo's cloud services are optional. EAS Build, Submit and Update are convenient, especially for teams without macOS build machines, but apps can also be built locally or in any CI system. Since Microsoft retired App Center and CodePush, EAS Update has become a common choice for over-the-air updates, though self-hosted options exist.

When the plain CLI still makes sense

The CLI path shines when native code is the center of gravity. Brownfield projects that embed React Native inside an existing Swift or Kotlin app, companies with locked-down build pipelines, and teams that want every Gradle and Xcode setting under direct version control often prefer it. You can still adopt individual Expo modules in these projects without using the full framework.

The trade-off is maintenance. Without a framework, upgrades require applying native changes by hand, and routing, updates and build automation must be assembled from separate tools. Our React Native development team typically starts new apps on Expo and uses a bare setup only when a clear constraint calls for it.

Final verdict

For most new React Native apps, Expo is the better starting point: it is the framework the React Native docs recommend, it supports custom native code, and it removes much of the build, routing and upgrade work. Choose React Native CLI when you are integrating into an existing native app, must control every native file directly, or have build requirements that a framework would complicate. Both paths produce the same kind of native app.

Expo vs React Native CLI: questions

Something else on your mind? Ask a consultant and get a reply within one business day.

Is Expo good for production apps?

Yes. Expo is used for production apps of all sizes and supports custom native code through development builds and config plugins. It is the framework recommended in the official React Native documentation. Its cloud services for builds and updates are optional, so teams can keep their own CI and distribution if they prefer.

Can I use custom native modules with Expo?

Yes. Any React Native library with native code can be used in an Expo app through a development build, and config plugins apply the required native configuration automatically. You can also write your own modules in Swift and Kotlin with the Expo Modules API. Only the prebuilt Expo Go app is limited to bundled modules.

Is Expo free?

The Expo framework, SDK and tools are open source and free to use. EAS cloud services for builds, submissions and over-the-air updates have a free tier and paid plans based on usage. Teams can avoid those costs entirely by building locally or in their own CI and hosting updates themselves.

Can I move from Expo to a bare React Native project later?

Yes. Running prebuild generates standard iOS and Android projects that you can commit and edit directly, at which point you manage native code like any CLI project. Many teams never need to, because config plugins and development builds cover most native requirements while keeping the generated workflow.

Still deciding between Expo and React Native CLI?

Tell us about the product and the team. We will recommend a stack in a free consultation, and explain the trade-offs in plain language.