AI Insights

Expo vs. Bare React Native in 2025

Expo vs. Bare React Native in 2025 Ellipse

React Native has become a compelling choice for building mobile apps these days. Many early to mid-stage startups and even big names like Microsoft and Shopify use it. But when you start a new project, you hit a fork in the road: use Expo or stick to the standard React Native CLI (Bare React Native).

Your developer experience can vary depending on which path you take. In this article, I want to highlight the differences between the two, based on my own experience working with them. My goal is to give you a clearer picture to help you choose the right approach for your project.

What Exactly Is Expo?

Expo is an open-source framework and set of tools built around React Native, which is both a JavaScript and a Native code system, which increases complexity for developers. Expo tries to make development easier, especially with its “Managed Workflow,” letting you avoid dealing directly with Native code much of the time.  It is designed to simplify the developer experience for building apps across iOS, Android, and the Web.

The Good Stuff: Why Use Expo?

From my experience, Expo brings some really helpful things to the table:

Easier Start & Testing

Getting an Expo project running is often faster. The Expo Go app is great for quickly testing your project on your phone by just scanning a QR code. It acts as a sandbox environment that enables you to quickly experiment with building Native apps.

Flexibility for Native Code

While Expo helps you avoid Native code initially, you’ll likely need access to Native code at some point in many real-world apps. The nice part is Expo lets you generate the Native ‘iOS’ and ‘Android’ folders by running ‘npx expo prebuild’, and make changes to them. You can also integrate Expo modules into an existing bare React Native project. So, even though Expo is often seen as a managed workflow, it also offers flexibility for apps that need Native modules.

High-Quality, Cross-Platform Libraries

Expo provides a rich ecosystem of well-maintained, high-quality open-source libraries (e.g., expo-camera, expo-location, expo-av). These packages offer consistent, cross-platform APIs, covering a vast array of common functionalities for every project.

Expo Modules API

Provides an easier way to build and maintain Native modules using Swift and Kotlin.

Over-the-Air with expo-updates

Allows you to push updates to your application’s JavaScript code and assets directly to users without going through the app store review process. It communicates with the configured remote update service, which can be self hosted.

Why would you choose Bare React Native over Expo?

Expo sounds great, but there are solid reasons why you might choose the bare React Native path instead:

Total Native Control

This is the big one for many devs, including me. With bare RN, you have full access to the `ios` and `android` project files right away. If you are already comfortable with Native development, editing files like `Info.plist` or `build.gradle` directly often feels simpler than learning Expo’s `app.json` configuration system, which can feel limited sometimes.

No Extra Layers

Expo adds its own layer on top of React Native. Sometimes, you just want to work directly with React Native itself, avoiding potential bugs or delays that can come from an extra dependency, especially when new React Native versions are released. Expo needs to catch-up with React Native updates, leading to potential compatibility issues.

Only What You Need

A bare RN project starts clean. You add only the libraries you actually need. Expo includes many libraries by default; while they are useful, you might not need all of them, potentially adding a bit of bloat.

Expo Go Limitations

It is a perfect tool for learning, prototyping, and experimenting, but is not suitable for most production apps due limitations that Expo Go has. You can only access Native libraries that are included in the Expo SDK, or libraries that do not include any custom Native code.

Expo Service Reliance

Using EAS is handy, but it is a paid service (beyond the free tier) and means you rely on Expo’s cloud.

Choice of Navigation

Bare React Native projects typically use React Navigation, the standard navigation library recommended by the React Native documentation. React Navigation offers a programmatic, straightforward approach to navigation. In contrast, Expo defaults to `expo-router`, a file-based routing system inspired by Web development. This can feel unnatural for developers familiar with programmatic navigation in Native frameworks like Jetpack Compose or SwiftUI.

Why learning Native environments matters

Whether you pick Expo or bare RN, getting familiar with the iOS and Android Native environment is a smart move and a good investment of your time if you are serious about app development.

Fixing weird bugs, boosting performance, and adding a feature React Native doesn’t cover – knowing your way around the Native side is a huge advantage. The skills you learn will help you to do things beyond the limit of React Native and make you a stronger candidate among other React Native Developers.

Conclusion

React Native itself is a great framework for building apps. Expo adds more tools and services on top, with more abstractions. As a developer, it is up to you to decide whether those extras are needed for your project.

In my opinion, if you’re coming from a Web development background and want to learn React Native, it is probably easier to start with Expo. It allows you to build apps without dealing with Native code initially, while still giving you the flexibility to add Native modules later if needed.

On the other hand, if you have experience with Native development, prefer fewer abstractions and dependencies, and are comfortable modifying Native iOS/Android code, then Bare React Native might be a better choice. It allows you to take full advantage of the Native mobile development ecosystem.


References and Resources

You can check out some of the resources listed below to learn more about Expo and React Native CLI

Volodymyr Snaichuk, Mobile Software Engineer
Posted 27 May 2025
Read more AI Insights