If starting today, use expo. You can access native code with expo’s latest version, development clients and config plugins. Answer from ctrlshiftba on reddit.com
🌐
Reddit
reddit.com › r/reactnative › what do companies use? (expo or cli)
r/reactnative on Reddit: What do companies use? (Expo or CLI)
November 2, 2023 -

I am trying to develop an app and am not sure which to use. I know Expo is easier and quicker but you can't access native elements. But there should js lib to do most things. Or should I just start using CLI and if I use CLI would I still be able to write on code base and get an app that works for both ios and android?

Top answer
1 of 17
56
To answer your question to the best of my knowledge: large companies use CLI simply because their apps are far more hybridized than hobbyist apps. Many of them, for efficiency reasons or compatibility reasons, have lots of custom native code in their projects. As for this sub, I honestly don’t know where to guide you to but this sub has become a giant expo ad. You will receive extremely biased opinions all favoured towards expo. I’ve been developing RN apps for a few years. I’ve used both, but I prefer CLI simply because I am closer to the native side and I have learned native development and how RN itself works. I understand the build errors and release processes etc. if you’re a beginner keep in mind that you may be hindering yourself of that same knowledge if you stick with expo. Now Expo is great, but keep in mind that it doesn’t change how RN works. Despite what many say, there are obviously limits to what you can do. If you cannot trust yourself to debug native code which may arise when using the CLI, think carefully if you can fix issues which may occur when ejecting a working project. Also think about your project requirements. If it doesn’t have third party support from expo, Ide go with CLI. If you want to learn RN, go with CLI. If you want to develop a quick simple app, Ide go with Expo. Sorry about this long rant. I’m just a bit fedup about this expo cult thing that’s been going on recently.
2 of 17
31
If starting today, use expo. You can access native code with expo’s latest version, development clients and config plugins.
🌐
Medium
medium.com › @softworthsolutionspvtltd › expo-vs-react-native-cli-7e47c7630039
Expo vs React Native CLI. Expo or React Native CLI ? What should… | by Softworth Solutions Private Limited | Medium
June 27, 2023 - However, all the above mentioned ... like RevenueCat which will solve the problem. ... React Native CLI is the traditional approach for building React Native apps....
Discussions

What is the difference between Expo and React Native? - Stack Overflow
When you write code in Expo you are writing React Native code. Expo has two main pieces: Expo CLI (expo-cli): a developer tool for creating projects, viewing logs, opening on your device, publishing, etc. More on stackoverflow.com
🌐 stackoverflow.com
React native cli or Expo - Stack Overflow
im planning to start a new project that will go to production, but im confused between using React native cli or Expo. The app will use Amplify for the Auth. help please some people said that expo ... More on stackoverflow.com
🌐 stackoverflow.com
Expo vs React Native CLI : reactnative
I am making my first react native app and I am wondering if expo is the way to go or just React Native CLI alone? Any thoughts or ideas will help.... More on old.reddit.com
🌐 r/reactnative
Expo vs react native cli?

I personally have always used CLI but for beginners Expo is much faster to work with. For production apps I’ve always preferred the smaller bundle size however I think you can modify this now with Expo.

More on reddit.com
🌐 r/reactnative
49
10
July 16, 2021
🌐
Swovo
swovo.com › blog › expo-vs-react-native
Expo vs React Native CLI: Key Differences Explained
React Native CLI provides developers with more flexibility and control over the project setup. Expo is ideal for beginners or rapid prototyping, while React Native CLI appeals to developers who require extensive access to native modules.
🌐
Retool
retool.com › blog › expo-cli-vs-react-native-cli
Retool Blog | Putting the Expo vs React Native debate to rest
February 16, 2023 - Originally, Expo was designed to build products using strictly React Native code, with no support for native libraries like CocoaPods. This contrasted with the stock React Native CLI where you could include native libraries and interface with them.
🌐
Nitor Infotech
nitorinfotech.com › blog › a-comparative-analysis-between-react-native-cli-expo-cli
A Comparative Analysis Between React Native CLI & Expo CLI | Nitor Infotech
It is also worth noting that Expo doesn’t support a lot of mobile native functionality like Bluetooth interaction. React Native CLI generates a core react native project for you, as well as platform specific native iOS and Android projects.
🌐
Medium
medium.com › @andrew.chester › should-you-use-expo-or-bare-react-native-8dd400f4a468
Should you use Expo or Bare React Native? | by Andrew Chester | Medium
March 15, 2025 - Upside: Optimize with CI/CD caching if you’ve got skills. Winner: Expo for simplicity; CLI if you crave control. Users don’t care about your stack, they want speed. Let’s unpack the runtime.
🌐
Stack Overflow
stackoverflow.com › beta › discussions › 78231158 › which-is-better-for-developers-to-develop-react-native-with-expo-cli-or-bare-re
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
March 27, 2024 - Expo CLI is better for faster setup, ease of use, and smaller projects without heavy native code dependencies. Bare React Native is better for complex apps needing custom native modules or deep platform-specific features.
Find elsewhere
🌐
Godel Technologies
godeltech.com › godel insights › blog › expo vs. bare react native in 2025
Expo vs. Bare React Native in 2025 - Godel Technologies
May 27, 2025 - 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).
🌐
DEV Community
dev.to › jocanola › react-native-cli-vs-expo-cli-clearing-up-misconceptions-2fl4
React Native CLI vs Expo CLI: Clearing Up Misconceptions - DEV Community
September 18, 2025 - This means Expo offers up to 95% of the flexibility of bare React Native, with additional tooling that makes development and maintenance easier. Using React Native CLI directly gives you full control from day one:
🌐
React Native
reactnative.dev › docs › environment-setup
Get Started with React Native · React Native
5 days ago - Expo provides features like file-based routing, high-quality universal libraries, and the ability to write plugins that modify native code without having to manage native files. ... Yes. You can use React Native without a Framework.
🌐
Attract Group
attractgroup.com › home › expo vs react native cli: 10 key differences you didn’t know
Expo vs React Native CLI: 10 Key Differences You Didn't Know | Attract Group
March 18, 2025 - This makes it a great choice for beginners or for projects where you want to focus on building features rather than dealing with setup. On the other hand, React Native CLI gives you more control over your project.
🌐
Expo
expo.dev
Expo
🌟 Why choose #Expo for your next app? Enjoy the simplicity of building with one codebase for all platforms, access a rich library of pre-built components, and streamline updates with over-the-air changes—all without touching native code! 🚀 #ReactNative #js #100DaysOfCode
Top answer
1 of 14
327

When you write code in Expo you are writing React Native code. Expo has two main pieces:

  1. Expo CLI (expo-cli): a developer tool for creating projects, viewing logs, opening on your device, publishing, etc.

  2. Expo client: an app on your phone that lets you open your projects while you're working on them, without needing to go through XCode or Android Studio, and also lets other people view them too! And if you publish it through expo-cli, people can access it at any time through the Expo client on Android or on iOS if signed in to the same account it was published with. Lastly, we also make it possible to build standalone apps so people don't have to use the Expo client to open it, and you can distribute to the app store and play store if you like.

So Expo is a set of tools built on top of React Native. These tools depend on one key belief held at Expo: it's possible to build most apps without ever needing to write native code, provided that you have a comprehensive set of APIs exposed to JavaScript.

This is important because with React Native you can always drop down to native code. This is incredibly helpful sometimes but it comes at a cost: you need to send people your binaries if you want them to test them, someone on the other side of the world can't just tap a link to open it while you're working on it and you can't just publish it with one click for someone to access it similar to how you would in a browser.

With Expo, we suggest that try to avoid dropping down to native code, if you can. As I mentioned above, we think that with a comprehensive set of APIs available to JavaScript, this shouldn't be necessary for most apps. So, we aim to provide this comprehensive set of APIs, and then build all of the awesome tooling that can exist in a world where the native runtime is shared.

However, if you must find that you want to drop down to native, you can use eject and continue using the native APIs that Expo gives you while having the same level of control as you would in any native project.

Read more about ejecting

2 of 14
202

A summary of the documentation and answers from Expo employees:

React Native init:

Advantages

  • You can add native modules written in Java or Objective-C (probably the only but the strongest one)

Disadvantages

  • Needs Android Studio and Xcode to run the projects
  • You can't develop for iOS without having a Mac
  • Device has to be connected via USB to use it for testing
  • Fonts need to be imported manually in Xcode
  • If you want to share the app you need to send the whole .apk / .ipa file
  • Does not provide JavaScript APIs out of the box, e.g., Push-Notifications, Asset Manager, they need to be manually installed and linked with npm for example
  • Setting up a working project properly (including device configuration) is rather complicated and can take time

Expo

Advantages

  • Setting up a project is easy and can be done in minutes
  • You (and other people) can open the project while you're working on it
  • Sharing the app is easy (via a QR code or link), you don't have to send the whole .apk or .ipa file
  • No build necessary to run the app
  • Integrates some basic libraries in a standard project (Push Notifications, Asset Manager, etc.)
  • You can eject it to ExpoKit and integrate native code continuing using some of the Expo features, but not all of them
  • Expo can build .apk and .ipa files (distribution to stores possible with Expo)

Disadvantages

  • You can't add native modules (probably a game changer for some)
  • You can't use libraries that use native code in Objective-C/Java
  • The standard Hello World app is about 25MB big (because of the integrated libraries)
  • If you want to use: FaceDetector, ARKit, or Payments you need to eject it to ExpoKit
  • Ejecting it to ExpoKit has a trade-off of features of Expo, e.g. you cannot share via a QR code
  • When ejecting to ExpoKit you are limited to the react-native version that is supported by ExpoKit then
  • Debugging in ExpoKit (with native modules) is a lot more complicated, since it mixes two languages and different libraries (no official Expo support any more)

Sources:

  • Detaching Expo Apps to ExpoKit: Concepts
  • Difference between react-native-init and create-react-native-app #516
  • Ejecting to ExpoKit
🌐
Diogo Izele
blog.diogoizele.com › posts › REACT-NATIVE-BASICS-RN-CLI-VS-EXPO
React Native Basics - React Native CLI vs Expo? | Diogo Izele
December 18, 2024 - Both React Native and Expo have their own CLIs, and each serves specific purposes within their contexts.
🌐
The Frontend Forge
thefrontendforge.hashnode.dev › react-native-expo-versus-cli-a-detailed-overview
React Native Expo vs CLI: Key Differences
January 7, 2025 - However, integrating these features directly into React Native wasn't feasible, as it would restrict some developer controls, though these controls aren't always necessary. React Native CLI is the official command-line interface for React Native, ...
🌐
Expo Documentation
docs.expo.dev › bare › using-expo-cli
Migrate from React Native CLI to Expo CLI - Expo Documentation
November 11, 2025 - After installing the expo package, you can use the following commands which are alternatives to npx react-native run-android and npx react-native run-ios: ... When building your project, you can choose a device or simulator by using the --device flag. This also applies to any iOS device that is connected to your computer. npx expo run:[android|ios] automatically starts the bundler/development server. If you want to independently start the bundler with npx expo start command, pass the --no-bundler to the npx expo run:[android|ios] command. Can I use Expo CLI without installing the Expo Modules API?
🌐
Software House
uniquedevs.com › strona główna › blog › mobile › mobile › how to start a project in react native – expo or react native cli?
Expo vs. React Native CLI: Choosing the right tool for your app development | UniqueDevs
March 5, 2025 - All you need is Node.js and Expo CLI. A wide range of ready-made modules (Expo SDK) – you have immediate access to APIs such as camera, push notifications, location, accelerometer and others. Rapid prototyping – you can focus on writing JavaScript/React code instead of complicated native configuration.
🌐
NPM Compare
npm-compare.com › create-react-native-app,expo,react-native,react-native-cli
react-native vs expo vs react-native-cli vs create-react-native ...
Looking for similar npm packages? Use Npm Compare (npm-compare.com) to compare package features, popularity, npm trends, and discover alternatives.