React Native
Mobile apps
iOS
Android
Web Development
React
JavaScript

React Native

8 min read

Years before I even started taking programming seriously, I always thought about making mobile apps, iPhone apps specifically to be honest. I did have an Android phone for a few years but admittedly, I have always sort of been a little bit of an Apple fanboy. I remember having to go wait in line at an Apple Store to get the newest release of OS X on a DVD on launch day to see how different OS X 10.6 Snow Leopard was from OS X 10.5 Leopard. Viva la iLife baby. Fast forward several years, after I had expanded my sphere of programming knowledge to include other languages like Python, I naturally dipped a toe into learning Swift.

Swift is Apple’s programming language to make native apps for OS X and iOS (and now iPadOS, tvOS, and watchOS). I’ve already dated myself here so I’ll just hammer that down. Back then you still had to buy books to learn about this stuff, so I bought the popular Big Nerd Ranch Guide to Swift Programming. As a self taught dev, that book was pretty intimidating. Off the bat, the book starts with foundations and fundamentals of Objective-C. You also had to use Xcode as your IDE (today it’s more of a strong suggestion), and Xcode was quite different than my preferred text editor at the time, Sublime Text. You also had to set up the iOS simulators, which were notorious resource hogs, so you needed a fairly nice Apple computer to boot. The learning curve admittedly felt steep just to end up making another ugly weather app or an app to tell you if an image included a hot dog or not.

The idea of PWAs (Progressive Web Apps) was also starting to become a thing. Ironically, the PWA tech is sort of credited to Steve Jobs even though Apple has done nothing but lightly suppress PWAs on their mobile and desktop platforms. Even today, to use PWAs on Safari (mobile or desktop) feels like you need a little workaround, compared to how smooth they work on Google Chrome. PWAs can also only be added to the Google Play mobile App Store, not the Apple App Store. In any case, it always felt like PWA technology would eventually become advanced enough where you could seamlessly translate standard web dev into native mobile apps. While I still think PWAs are super cool, it turns out that is not quite the case yet. The real answer to seamlessly translating standard web tech to native mobile apps is absolutely React Native.

React Native is a framework that allows you to use React to create native apps for both iOS and Android (and now AndroidTV, macOS, tvOS, Windows, UWP, standard web apps, and even virtual reality apps for Oculus). It is not brand new, cutting edge tech anymore. React itself was released to the public in 2013 (even though everyone wants React devs with 15+ years experience lol) and React Native was only a couple years behind, released in 2015. This was also the time when Electron was starting to become popular. Electron is a JavaScript framework that allows you to build desktop applications. Electron and React Native were exciting and cool but there was so much criticism of those applications being buggy, slow, and “not close to the metal” that it felt like that tech could never be used for serious projects. Fast forward to today and industry standard apps like Slack, VS Code, and Discord are all built on Electron. The scope of applications built with React Native today is wild, from Meta’s mobile catalog (Facebook, Instagram, etc.), Microsoft’s mobile apps (Outlook, Teams, Xbox Game Pass), to Amazon’s mobile apps (from Amazon Shopping to Alexa to the Kindle app). There is a strong chance that you use an app built with React Native every day. With that said, these technologies have come a really long way.

I dabbled with React Native on and off over the years and even contributed a little bit to a professional React Native project, but never considered myself an expert. The dev experience always felt a little clunky compared to using Swift with Xcode or my actual comfort zone of Next.js with VS Code. On sort of a whim with a small fun idea, a few months ago I decided to give it another go and was blown away at how far it has come.

I was looking for a mobile app that didn’t exist yet, so naturally, I built it myself. Taking care of a swimming pool is a major headache; there is a lot to learn about balancing chemicals and running and maintaining the hardware like the pumps and filters. It can also become super expensive and time consuming bringing water samples to various pool stores to have your water tested just to be upsold on expensive chemicals you might not even need. So I built PoolBoi, an AI powered pool expert assistant. On top of having access to a couple OpenAI LLMs, PoolBoi allows users to add and save historical water readings, comments, personal pool details, and more so the AI is always provided with accurate and up to date context for the user.

Back to the tech, the parallels between modern React Native and Next.js are striking at first. The project structure, the component driven architecture, and the developer experience in VS Code all feel nice and familiar. What really blew my mind was how much of my everyday frontend toolkit simply works now. I spun up PoolBoi using Tailwind CSS and even pulled in Shadcn/UI components without any issue. I was even able to use Zustand for state management (because Redux can sometimes feel like bringing a chainsaw to cut butter).

Another place React Native has massively leveled up is the development workflow. The days of wrestling with iOS simulators on Xcode are basically gone. With Expo, I didn’t even have to touch a simulator. The Expo Go app and its QR codes made spinning up PoolBoi locally incredibly convenient. I could scan a QR code right from my terminal window, and suddenly my React code was running on my actual iPhone in seconds. That instant feedback loop honestly rivals the Next dev experience in terms of speed.

On the backend side, things can be a little less familiar. In my Next.js projects I had gotten used to leaning on API routes as my go to serverless layer. With React Native that was not really an option. Instead I turned to Supabase Edge Functions as the alternative, which turned out to be a perfect fit. PoolBoi’s AI features like parsing pool chemistry test results and generating troubleshooting advice all run through Edge Functions. They behave almost exactly like the serverless routes I am used to building in Next.js, but with the added flexibility and scale of Supabase handling the infrastructure. That shift was smoother than I expected, even though that credit is more due to Supabase.

React Native’s syntax can also feel a little unfamiliar at first. Instead of standard HTML, React Native uses its own primitive components. Instead of the HTML div, in React Native you use View. Instead of a p tag, you use Text. Instead of input, you use TextInput. Pressable instead of button, ScrollView instead of a div with overflow: auto, and so on. It feels a little awkward at first, but at least you don’t need to deep dive into any C languages to get the hang of it.

So my little PoolBoi app was actually fun to build instead of a hassle, but the kicker is it does not just run on iOS and Android with one codebase. With Expo’s web output, I could also deploy the app straight to the web. When I first read that you could build web apps with React Native, I definitely thought “why in the world would anyone do that?” But it has been awesome for sharing early builds. People can simply click a link and try it in their browser without me needing to package, sign, and ship to an app store. For demos, feedback loops, or just sending it to a friend to test, it has been a game changer. You can even deploy modern React Native apps to Vercel with the same one click deployment that you can with Next apps.

I’m not sure that React Native in 2025 feels exactly like the dream I hoped PWAs would become back in the day. But it is modern tooling, it is reliable, and it is cross platform in a way that feels genuinely amazing. Launching an app that can compile natively on smartphones, smart TVs, smart watches, tablets, and desktops with the comfort zone of React is just sweet.

Mobile apps
iOS
Android
Web Development
React
JavaScript
More Posts