Expo vs React Native CLI
The managed React Native experience vs bare metal. Expo removed most reasons to eject. Most, not all.
Expo
Expo is the default choice for React Native in 2026. EAS Build handles native compilation, Expo Router gives you file-based routing, and most native modules work through the config plugin system. Bare React Native CLI is for edge cases only.
Expo Grew Up
Old Expo was limited. No native modules, weird build system, you'd eventually eject and lose everything.
New Expo is different. Development builds replace the old managed workflow. EAS Build compiles native code in the cloud. Config plugins let you modify native projects without ejecting. The restrictions that made people avoid Expo are mostly gone.
Where CLI Still Wins
Some native modules still require bare React Native. Complex Bluetooth integrations, custom native UI components, or apps that need to modify Xcode/Gradle settings that config plugins don't cover.
Also, if your team has strong iOS/Android native developers, they might prefer working directly with the native projects.
The DX Gap
Expo's developer experience is miles ahead. npx create-expo-app, hot reload that actually works, Expo Router for navigation, EAS Submit for app store deployment.
Bare React Native means managing Xcode projects, Gradle files, CocoaPods, manual linking. It's the same DX gap as Create React App vs manual webpack config.
Quick Comparison
| Factor | Expo | React Native CLI |
|---|---|---|
| Setup Time | Minutes | Hours |
| Native Module Access | Most (via config plugins) | Full |
| OTA Updates | Built-in (EAS Update) | CodePush or manual |
| Build System | EAS Build (cloud) | Local Xcode/Gradle |
| File-Based Routing | Expo Router | React Navigation (manual) |
| Native Customization | Config plugins | Direct access |
| CI/CD | EAS (managed) | DIY (Fastlane etc.) |
The Verdict
Use Expo if: You're starting a new React Native project, want the best DX, or don't have dedicated native developers. This is most teams.
Use React Native CLI if: You need deep native customization, have native developers on the team, or use modules that don't work with Expo.
Consider: Flutter is the main alternative. Different language (Dart) but excellent DX and performance.
Expo is the default choice for React Native in 2026. EAS Build handles native compilation, Expo Router gives you file-based routing, and most native modules work through the config plugin system. Bare React Native CLI is for edge cases only.
Related Comparisons
Disagree? nice@nicepick.dev