There are two popular ways to create a React Native app - you can use the Expo CLI or you can use the React Native. Planning to build a cross-platform app, you may get confused between React Native or Expo.

So which one is better for the development of your app?

In this article, I will share the pros and cons of building Expo and React Native apps and their deployment. I want also to give my recommendation on what you should choose for your next project. I keep things simpler so that you could choose one of the best starters for your app, so let’s get started.

What is React Native Init?

React Native has become a popular framework to build cross-platform apps with JavaScript. Its main advantage is the ability to create cross-platform apps. They allow giving a much better UI than the current hybrid options on the market, closer to that of native apps. React primitives render to native platform UI. It means your app will use the same native platform APIs other apps do. You will need Xcode or Android Studio to get started.

What is Expo?

Expo is a framework to build React Native apps. It is a set with tools and services built for React Native. It will help you begin with building React Native apps with ease. It provides you with a list of tools that simplify the creation and testing of React Native app. Besides that Expo provides a more robust and convenient development workflow with flexibility.

Expo and React Native App are the "Cross-Platform Mobile Development" tools.

Find in the guide:

  • Offshore development rates by country
  • Time zone difference
  • Development rates by role

Pros and Cons of React Native

The main advantage of using React Native is that you can share code between iOS and Android. Instead of that, you have to write and maintain two completely separate codebases. Moreover, you can also use many times the parts of your web app.

There are four situations in which React Native CLI is your best choice:

  • working prototypes;
  • apps with streamlined UI;
  • basic cross-platform apps;
  • apps without heavy use of native APIs;
  • applications with complex User Interface;
  • building utilities such as battery monitors;
  • apps built especially for a single OS;
  • apps when you don’t have many animations.

Let’s take a look at the advantages of React Native:

Pros of React Native:
  • You can include native modules coded in Java/Objective-C.
  • Developing .apk and .ipa files is much easier than with Expo.
  • Reusable code & pre-built components.
  • Simplified UI.
  • Third-party plugin support.
  • Modular architecture.

React Native made a big push in mobile application development, but it has some downsides. Recently Airbnb and Udacity shared their experience in React Native. They have concluded that this platform has plenty of benefits. But you can’t use it to build any kind of mobile apps.

Cons of React Native CLI:
  • It requires Android Studio and XCode to run the projects.
  • You can't build an app for iOS without having a Mac.
  • There is no need to connect the device via USB to use for testing.
  • There is no need to import fonts by hand in XCode.
  • If you want to send your app to somebody you need to send the whole .apk / .ipa file.
  • You have to install and link with, for example, npm Push-Notifications, Asset Manager.
  • Setting up a working project in a correct way is rather difficult and can take time.
  • It requires a high level of configuration.
  • It requires a basic knowledge of Android and iOS folder structure.

Pros and Cons of Expo CLI

Now what I want to start with is the cons for Expo or the limitation, because they have quite a few. And if your app needs a specific thing, you have to check whether Expo supports it or not. So that you could know you shouldn’t consider using Expo in the first place.

Cons of Expo CLI:

Limitations:

They have a nice page that outlines some of the limitations, so I’m not going to go through the entire thing. I recommend reading this list before you make a decision. But I want to highlight the biggest problem, that you cannot use native modules. I mean by that a project, where you’re can run a React Native link for, for example, vector icons.

Libraries

The vector icons library is a very popular React Native library. You can't use them if you:

1) need to change some of the iOs projects or Android projects;

2) touch CocoaPods or a Gradle;

3) write some Swift code or Kotlin code.

So anywhere we need to link something, it doesn’t work in Expo CLI.

Vector Icons library is a very popular library and Expo supports other libraries too. Expo creates a version of many libraries and you are free to use them in your apps. The biggest thing that has come up with me is that they didn't support the fast image library that I lacked. I needed to link it somewhere in here, but I could not get it to work. So if there are some specific Native module libraries or native modules that you need, you can not use Expo.

Some iOS and Android APIs are not available

The other thing is to note, some of the device’s APIs are not supported. That’s a big thing as well: no Bluetooth, no Web RTC. But many features are in progress of development now, so it’s a good way to check a list of feature requests.

Anyway, it’s a big thing. If you need any of those things you shouldn’t use Expo. And I’d say it’s the main thing to be mindful of if none of these things matter to you on your project. And if you don’t need native modules, Expo may be a very good choice and I’d recommend it.

So what I wanted to go over next is there is a lot of pluses of using Expo, that I noticed it and that was very helpful.

Pros of Expo CLI:

No need to link and lots of libraries

Having to call a React link or go into CocoaPods and install stuff, I always had problems. React Native always broke whenever I was linking things, or sharing a project with others. For whatever reason, it was one of those things where the project from my computer doesn’t work on someone else’s. So with Expo, you don’t have those issues. Expo has created a library for you and you can integrate them with ease. I have no problem in agreeing with all the XP libraries and they are very fast and easy to integrate, so that is a huge plus. The other thing to know is there is a lot of JavaScript libraries as well, that you can use with Expo.

Better development experience

The next thing, I wanted to share, is the developer experience that is the way better. Whenever I would run or build the app it would have a giant build at the very beginning. After once packager would start up it was faster. But anytime I would install a library or something after that it was very slow to start back up. And then I discovered the packager works a lot better with Expo. Another cool thing is you don’t need to have your phone plugged into your computer to run it. It can run the app you’re coding over Wi-Fi and it can also sync between different phones, which is awesome. So you can be typing away on your computer and as you are making changes, the other people’s phones are updating too. And that is very nice.

Easier to upgrade to new versions

The next thing is that upgrading is a lot smoother. In the upgrading doc, you will see the steps you have to go through to upgrade it to a new version. It doesn’t take long to do. So this is what it looks like to upgrade an Expo and I had a much pleasant experience with it.

Easier to deploy to Apple/Google Store

The next thing is that it was much easier to deploy things to Apple/Google Play app stores. It handles your keys and signing credentials and certificates for you. It makes things more simple.

Mobile UI

It's much easier to view on both Android and iPhone using barcode scanning. It is also easier to view with online iPhone and Android simulators.

Over the air updates

The next thing was huge out-of-the-box updates, which means you had to reput it to the Apple store or the Google store. For Google, it was not a big deal, usually, it took around two hours and your app is out to people. But Apple has a very slow review process. The time for updates can be very very long. So over-the-air your app updates itself and it happens when the user is opening the app.

Easier to set up deep linking

Also, it was very easy to set up different things at Expo. I was setting recently a deep linking. It was a very big surprise for me by how simple it was to set up with that and React Navigation.

Expo SDK is available

Expo apps ship with Expo SDK. And it opens up lots of features to benefit you. BarcodeScanner, MapView, ImagePicker, and many more are available for your use.

.apk and .ipa files

Expo involves generating an IPA file for iOS and an APK file for Android.

Ejecting

The last thing that is good to mention is that at any point you can eject out. It’s nice to know that you are not locked in and you have other options.

For example, you’re using Expo and realize that you need a library out of Expo, then you can eject. Doing this, this feature is unpacking all the Native code into iOs and Android folders. Also, it is splitting the App.js file into App.js and index.js.

My general experience is so much better comparing with React Native. I spent less time setting things up, and getting libraries, and React Native to work. And I had more time programming the apps, building the views, the logic. I love working with Expo.

But if your app needs some specific features and packages, it’s better to choose React Native.

To Sum Up

As you see, both ways have their pros and cons. So which one is better to use? It depends. For example, here, in Fulcrum Rocks, we use Expo for development MVP projects. It allows us to provide you with a working product very fast. You can make the app scalable and add extra features and continue working with the app.

Expo and React Native are awesome tools to create apps. The only important thing is to understand the demands of your projects. Then it will be easy to choose which one to use. In Fulcrum Rocks, we already have enough experience to make the right choice. Feel free to contact us for cooperation or estimate the cost of your app yourself.

FAQ: Expo vs React Native

What is Expo React Native?

Expo is a bundle of tools created around React Native to help you start an app very fast. It provides you with a list of tools that simplify the creation and testing of React Native app. It equips you with the components of the user interface and services. Usually, they are available in third-party native React Native components.

How to use React Native with Expo?

Expo is a massive environment for React Native. It helps you from the creation to distribution of your React Native apps. Remember, when you are coding in Expo, you still write React Native code. But with the support of the Expo CLI and Expo Client on your smartphone. It is better to use Expo CLI if you are new to app development.

Expo CLI is a safe choice for a new React Native programmer. It has a list of tools built around React Native. That's why you only need to download a recent version of Node.js and a phone or emulator to begin within minutes. Even so, anytime you can switch to React Native CLI.