Hi all,
In the last three months alone, I have developed six apps for iOS and Android. In my tech stack, I use various services, and today I want to talk about Expo, which saves me a lot of time when developing applications. If you want to see how much work has been done, feel free to check out my apps:
Expo is an open-source platform for building and deploying universal native apps for Android, iOS. Here are the main reasons I switched to it:
Expo makes it easier to get started with development. You can create a basic application with a single command, and just like that, you have a mobile app. Expo provides a complete ecosystem. If React Native is a wrapper over native development, Expo is an additional layer on top. Expo has no alternatives (except for React Native CLI). It allows you to develop applications for Android, iOS, Web, and even Apple Vision.
Expo Go has enhanced mobile app development because Create React Native App, a console command for creating React Native applications, was too complicated to set up. It required configuring the entire environment, installing Xcode, emulators, SDKs, Android components, etc. Expo Go can emulate React Native, allowing you to run any code in the browser.
A key advantage of Expo is its ability to work with native modules. Expo has access to native SDKs like the phone’s camera, flashlight, notifications, screen brightness, and more. It compiles the application into native code and lets you create Dev builds, making your application truly native. You simply install a package, and Expo recognizes it and generates the native code needed for the app to interact with the platform’s native code. This is very convenient for development, and you don’t need to worry about integrations and modules.

The only thing I find lacking in my development experience with Expo is a rich component library. For instance, React Native provides basic buttons and switches, but if you want to use an iOS date & time picker, it’s not available. This is more of a limitation of React Native itself rather than Expo though.
A good example of a more comprehensive solution is Flutter. Flutter offers a wide range of widgets, including Cupertino widgets and many Material Design widgets. With Flutter, you can quickly put together a basic UI because it comes with a lot of ready-made UI components that look good and follow platform guidelines. In contrast, the React Native ecosystem lacks such a robust set of basic UI components.
Expo has a limited architecture, and you can’t deviate from it. If you’re building a highly customized solution, like Facebook, you won’t use Expo; you’ll go with React Native CLI because it imposes no architectural restrictions, allowing you to develop anything you want.
Expo is popular in more straightforward segments or B2B scenarios. When you need to create something simple, like an online store, and neither you nor the users care too much about how it looks, Expo is ideal. You can generate native React Native code for multiple platforms with a single command, saving a lot of time and money.
In my experience, it’s significantly faster. It’s hard to measure exactly, and it obviously depends on the complexity of the app. For a simple app like a to-do list, there’s no time difference between using Expo or native code. However, if you need features like camera access or push notifications, Expo is much faster.
For example, when I was developing Space Academy, the difference was noticeable compared to using native code. The app included notifications and Apple authentication, for which Expo also provides a ready-made module called Expo Sign-in with Apple. This made development significantly faster than doing it natively in Swift.
Thanks for reading! If you want to stay connected, give me a follow on Medium and Twitter.