React Native has been a modern powerhouse for building apps. It allows large and small teams to build for every mobile platform at the same time, with almost all the capabilities of a natively built app. The community is robust, and if there isn’t a React Native module out there for you, it’s easy to create your own - their documentation is awesome. We love working with React Native - nothing beats that feeling when you see how fast you can get your app up and running on multiple platforms.
However, that love can quickly fade once you’ve released your app and the maintenance kicks in. Apple or Google is constantly releasing new OSs and SDKs, and the only way to stay updated would be to continuously migrate your React Native to the latest version. If you’re lucky, this happens after release, if not this causes delays in development and testing. Either way, it won’t be good.
At some point you’re going to want those latest React Native features and bug fixes, or Apple is going to force you to upgrade to the newest XCode (use this hack as a band-aid solution). When that time comes (and trust me, it will), you’ll find that something breaks due to the updates - maybe it was that community component that isn’t being supported anymore. Your new developer’s environment won’t run Metro correctly and your CI/CD pipeline is broken, so no new builds for your QA team. What a headache.
So what can we do?
These pain points and long-term issues were known in the React Native community and put off a lot of early adopters - I was one of them. Initially captivated by the ease of building in React Native, then terrified of what React Native leaves behind when asked to make an update. This is where the Expo platform comes in, it handles all those pain points for us!
Four reasons why we love Expo
1. No XCode or Android Studio needed
You don't need XCode or Android Studio to develop your app. You’ll only need to install Expo CLI and the Expo GO dev client app. These tools will help you preview the app that you’re building, instead of the native emulators from XCode or Android Studio. Once you have that, you can start building in TypeScript or JavaScript with your favourite editor and have it running on a device without any additional environment setup. By not requiring the native projects, you can avoid the hassle of IDE and OS version bumping.
2. CI/CD without the headache
Setting up a CI/CD pipeline can be painful and time-consuming. The good news is Expo build tools include a CI/CD pipeline, specifically built for Expo React Native apps! The free tier gives you all that you need to get up and running quickly with a single-running build. As you begin to require more capacity, you can look into the paid tier options. These offer features such as jumping to the front of the queue, as well as adding multiple builds.
What’s more, Expo makes it really easy to create and distribute test or demo builds, as well as onboard new team members to an in-development iOS app. Your team can simply grab the latest version or register a new test device. Distribution can be done by giving out QR codes (find out how), which makes it easy for non-technical stakeholders.
3. Still native if you need it
Expo’s React Native modules offer enhanced functionality that’s not available in core React Native libraries. Adding pure JavaScript/TypeScript React Native libraries is simple and if you need your own custom native logic, you can still continue to use Expo’s managed build tools. In our case, we needed to implement our own security features for native authentication. We did so by creating a React Native module with native code (we used this tool to speed up its creation) and added it as a dependency to our managed Expo app.
This isn’t the only option, you could eject and manage the native projects by yourself. Either way, you’re still open to the potential pain of managing the project on your own. However, using the Expo modules reduces the scope of native code within the project, which makes life simpler.
4. Zero-touch deployments - hooray!
Expo handled a major pain point for us that we didn’t even know we had. You can release bug fixes and even entire features without having to go through an app store review and release process. This has been a game changer! Expo can also host and distribute the React Native JavaScript bundle and assets on a CDN. As the app launches, it can check for any new bundle updates and you get them for free. During development, this means you can get the latest version out to your QA and stakeholders without them having to download and install a new build. The only time a new store release or QA build is needed is when any new native functionality is required. Note: This is a premium feature that gets unlocked with any of the paid tiers, but it’s worth it!
In the end
We know that Expo might not be for everyone – if you’re working on a simple JavaScript-only app that doesn’t need long-term management, you could be fine with just out-of-the-box React Native.
Whether your app is short or long lived, the benefits of Expo will still get you up and running faster. The biggest benefit we see is for those maintaining a product through multiple update cycles, which Expo will provide a lot of relief for, on top of its quality of life benefits. Learn more about Expo at expo.dev.