Skip to content
Logo Theodo

Articles from Mo Khazali

React Strict DOM: The Future of Universal Apps with React Native

Mo Khazali10 min read

A React Logo with several devices in the background

A couple of weeks, Meta announced the release of react-strict-dom. I can't stress just how a big a deal this is. Fundamentally, this will change the way we use React Native (and React on web, for that matter). It provides…

Continue reading →

The Unfortunate Demise of App Center - An Obituary

Mo Khazali8 min read

An App Center logo on a gravestone.

Today is a sad day for the React Native ecosystem. Microsoft very quietly announced that App Center is being "retired" in just over a year's time (at the end of March 2025). Over the years of building React Native apps,

Continue reading →

Visualising your bundle size in Expo Router apps

Mo Khazali5 min read

An Expo Router logo with a magnifiying glass.

TLDRRun npx expo export -p web --dump-sourcemap in your project. This will create a dist directory with your exported project along with the sourcemaps. Run npx source-map-explorer dist/**/*.js to get the graphic representation of your sourcemaps.Before the days of Hermes, a…

Continue reading →

Nightly End-to-End & Performance Tests with Flashlight

Mo Khazali7 min read

A Flashlight logo with a backdrop of the night.

Several years ago, I was working on a web project that had quite a number of critical web flows that needed to be regularly tested to make sure that there weren't any regressions from functionality or performance across the app.

Continue reading →

What's the point of StyleSheets in React Native?

Mo Khazali5 min read

A code snippet with both StyleSheets and a regular object.

Over the years, I've heard whispers of the mystic powers of StyleSheet.create, and how not using StyleSheet would negatively affect performance. The other day, curiosity got the better of me, and I went down a rabbit-hole of looking into…

Continue reading →

Using RCTView & RCTText in React Native for Performance Gains

Mo Khazali6 min read

A React Native logo flying on a rocket.

I recently published an article and thread comparing iOS rendering performance across SwiftUI, React Native, and Flutter. The results showed that SwiftUI (unsurprisingly) performs the best, followed by React Native and Flutter respectively. I got some interesting feedback and suggestions from…

Continue reading →

Microfrontends in Mobile with React Native

Mo Khazali10 min read

A single Monolith being split into smaller services

Introduction This article is meant to be an exploration of the state of creating Microfrontends (MFEs) for native mobile apps in 2023. It covers the history of MFEs, giving a brief intro, and then looks into how React Native's architecture can…

Continue reading →

Comparing iOS rendering performance: SwiftUI vs. React Native vs. Flutter

Mo Khazali7 min read

3 iPhones with SwiftUI, React Native, and Flutter logos

When SwiftUI first came out, I remember reading about complaints around its performance. Some animations were janky (compared to UIKit) and app layouts were getting recalculated far too much, resulting in unnecessary computation power being used. People reported it being…

Continue reading →

Firebase Dynamic Links are being shut down: Time to go Universal with Expo Router?

Mo Khazali4 min read

A wireframing for a blank app

Google has a reputation for killing or discontinuing its products and services. There's literally a website called Killed By Google, which has a list of all the services that have been discontinued over the years. Recently, Google has been hinting…

Continue reading →

Building Whitelabel Mobile Apps: A Comprehensive Guide of Technical Considerations

Mo Khazali9 min read

A wireframing for a blank app

Introduction Imagine this scenario: You've just joined as a lead engineer at Burrito Ring, an international chain of average tasting TexMex fast food. Your first project is to develop a mobile app that allows users to view the menu, check allergens,

Continue reading →

The State of Building Native Mobile and Web Apps from a Single Codebase with React Native in 2023

Mo Khazali10 min read

A mobile and laptop showing a responsive website

This article is a write-up based on a talk I've given called "Building Universal Apps in React Native". It was first delivered at iJS Conference London in April 2023. This article is not meant to go into detail about all…

Continue reading →

Effective Strategies for Testing React Native Apps: Striking a Balance Between Testing UI and Business Logic

Mo Khazali9 min read

Logos for React and React Testing Library

Testing in software development is a contentious topic, with advocates on both ends of the spectrum. On one hand, there are those who argue against writing any tests at all, while on the other hand, there are companies that insist…

Continue reading →

Handling Supabase Password Reset in React Native

Mo Khazali9 min read

Supabase and React Logos

When working on a project that used Supabase for its authentication, we faced many issues in the password reset flow. Our app was using React Native on the front end, and Supabase on the backend. The official documentation had a…

Continue reading →

From Responsive on Mobile to Mobile-First

Mo Khazali5 min read

A mobile and laptop showing a responsive website

It’s no secret that web development has changed massively with the rise of smartphones. Back in the day, websites were typically targeting desktop resolutions, and many websites required you to use a computer to have a pleasant experience.Here’s a little…

Continue reading →

One Hook Per Screen: a simple architecture for scalable React Native apps

Mo Khazali7 min read

React Native logo with a hook icon

“Architecture is the decisions that you wish you could get right early in a project” Ralph JohnsonWhen I built my first site, the web felt like a simpler place. I would create an html file for my markup, a css file…

Continue reading →

Stop Building Auth: a case for using prebuilt authentication in React Native

Mo Khazali9 min read

A broken lock, symbolising weak authentication/security.

Authentication is simultaneously one the most and least important parts of your application. By default, most mobile apps will remember the user’s credentials (since phones are normally personal devices). This means that the user might spend a couple of minutes…

Continue reading →

Preview Branches for React Native with Expo

Mo Khazali6 min read

Banner with RN, Expo, and Github logos.

A Github Action to automatically generate preview branches using EAS (Expo Application Services) as part of a CI/CD workflow, creating live deployments that allow the reviewer to functionally check any changes in the app before the feature is merged into…

Continue reading →

Optimising screen load times for legacy low-end devices in React Native

Mo Khazali9 min read

React Native running quickly on a legacy device.

You’ve developed your React Native application and you’re ready to release it out to the public. All is going well, until you start testing on real phones. While your app is perfectly smooth and snappy on your shiny new iPhone…

Continue reading →

Hasura: GraphQL Without the Baggage.

Mo Khazali14 min read

GraphQL overwhelming developers.

Spoiler Alert: Star Wars references below. Proceed at your own risk... The introduction of GraphQL back in 2015 garnered a lot of hype in the development sphere - allowing clients to describe exactly what data they require (preventing over-fetching unneeded information)…

Continue reading →