Why I gave Expo a second chance
Users•Development••6 minutes read
Yushan Fernando
Guest Author
TL;DR - Three years ago I evaluated Expo and chose RNC CLI instead. Recently, I re-evaluated Expo and am impressed by how powerful it has become.

This is a guest post from Yushan Fernando, a Senior Frontend Engineer at Blott Studio, UK. Yushan's favorite character in the Marvel Universe is Iron Man.
...
A few years ago, I evaluated Expo to see if I could use it for a fintech app called Spot. I knew I'd need to integrate a third-party React Native SDK for the project, and, at the time Expo was not a good fit because it required that I "eject" to the bare workflow. So I opted to use the React Native CLI instead.
That was more than two years ago. And in the meantime I had been hearing a lot of intriguing updates about Expo. It was becoming difficult not to take another look.
Then, towards the end of last year, I became particularly excited about some of the new features in the Expo SDK 50 beta, including Prebuild, Expo Router V3, and the Expo Modules API.
More importantly, I heard from developer communities like notJust.dev, Callstack, Simon Grimm, and Infinite Red that Expo's features had become much more stable.
So, after Expo SDK 50 was launched on January 19th, I decided to re-evaluate Expo for one of our upcoming mobile projects.
Re-evaluating Expo
This new app falls under the travel category (I'm not at liberty to mention it by name). Its key features are:
- Remote Check-In
- Room Unlock
- Secondary Guests Management
- Message the Host
When developing these features, I had to integrate a third-party native package for iOS and Android. I knew this would be challenging, as we typically receive React Native SDKs from third parties. I needed to evaluate whether Expo could handle this advanced requirement, along with others, and whether its features were stable.
As engineers, we need to ensure that the features are reliable before fully committing to a framework. Otherwise, we might spend extra time troubleshooting and potentially have to abandon the framework, which is not ideal.
I created an Expo Playground to understand and measure the stability of essential features like Prebuild and Modules. I frequently referred to these pages in the Expo documentation while experimenting:
- The concept behind the Prebuild
- How initiate the Prebuild process
- Expo Modules Overview
- My favorite Expo Module Tutorial
Architecture of my Expo app
Here is a basic high-level architecture of the app. You can see that I'm using the AWS ecosystem along with Expo to ship iOS and Android app versions.
My experience building with Expo
Revisiting Expo was a revelatory experience. The framework has become much more powerful since my initial evaluation. Today, Expo streamlines React Native development, so that developers can now focus more on building application features and improving the user experience.
Here are a couple of important personal experiences I had while building with Expo:
Power of Prebuild
I received a .xcframework for iOS and an .aar for Android from a third party to integrate with our app. First, I added the .xcframework and .aar as native dependencies to the Expo Module. Then, I implemented the native functionalities using Expo Modules APIs like AsyncFunction and Function, referencing the native methods directly from the third party SDKs. I also subscribed to the iOS AppDelegate and the Android Activity Lifecycle Listener, as mentioned in the documentation. I really felt the power of Expo's Prebuild process when engaging with advanced features like these.
First-class support
On Android, I encountered a critical issue after implementing Expo Notifications. Specifically, after migrating to FCM V1, navigation upon clicking the notification didn't work when the app was killed. I searched the Expo GitHub repository and found that another developer had reported the issue. To my surprise, one of the Expo developers, Douglas Lowder, had already commented that they were actively looking into it. It was great to see first-class support for developers struggling with an issue. He kept us updated and provided the best solution as promised, on time. I really appreciate Douglas Lowder's incredible support.
Smooth upgrade to new Expo SDK
I started working on the app with Expo SDK 50, and while I was working on it, Expo released SDK 51 on May 8th, which included exciting new features such as Apple Privacy Manifests, Expo Router v3.5, and Expo CLI support for running on iOS devices over the network etc. I was able to easily upgrade the entire app to SDK 51, along with all the necessary dependencies. This process had never been so seamless before, especially compared to my experience with React Native CLI. Kudos to Expo for making this so smooth 🥳
Advice to my fellow developers
You might be a developer who, like me, didn't fall in love with Expo at first sight. That's okay, and I'm happy to tell you that now is a good time to give it a second chance. I'm sure you won't regret it.
There will never be a 100% smooth and bug-free framework. It just isn't possible. What I really appreciate is the effort they're putting in to make our Dev lives much better and the support they're providing when we're stuck somewhere.



