Choosing a mobile stack

What is React Native

React Native is a simpler way to write native apps: you write React in JavaScript or TypeScript, and it renders real iOS and Android UI components.

12 min read

Quick answer

React Native is a simpler way to write native apps. You write the app in JavaScript or TypeScript with React, and React Native renders it with the platform's real UI components: UIView on iOS, android.view on Android. There is no web view. The output is a native binary that ships through the App Store and Google Play, so React Native apps are native apps.

Are React Native apps native apps?

Someone in your architecture review says React Native is "a website in a wrapper," and half the room nods. The name invites that guess. People hear "React" and picture a web view inside an app shell, and a React Native app doesn't have one.

The React Native docs describe it as "written in JavaScript, rendered with native code": "React primitives render to native platform UI, meaning your app uses the same native platform APIs other apps do." When you write <View> in a React Native component, the framework creates a UIView on iOS and a ViewGroup on Android. <Text> becomes UITextView and TextView. <ScrollView> becomes UIScrollView and Android's ScrollView, as the React Native guide to core components shows. The docs call these platform-backed components Native Components, and say the result is that "React Native apps look, feel, and perform like any other apps."

The View above is a real UIView with a real accessibility node and a real place in the platform's view hierarchy. A native engineer inspecting the running app in Xcode's view debugger sees the same objects they would see in a Swift app. Only the author of those objects differs: JavaScript, running inside the app, instead of Swift or Kotlin. React Native changes how you write the app, not what the app is made of.

How does React Native work?

A React Native app carries a JavaScript engine that runs your code, plus a C++ interface that lets that code create, update and measure native views directly.

The JavaScript runtime. Your app code runs on Hermes, "an open-source JavaScript engine optimized for React Native" and the default engine. In a release build, JavaScript is compiled ahead of time to Hermes bytecode (.hbc), so the app does not parse source at launch. The docs report lower startup time and memory use than the JavaScriptCore engine.

The New Architecture. Since React Native 0.76 (October 2024), every new project uses the New Architecture. Its center is the JavaScript Interface (JSI), a C++ layer that lets JavaScript hold references to native objects and call them synchronously. The New Architecture docs say it "removes the asynchronous bridge between JavaScript and native and replaces it with JavaScript Interface (JSI)." Two systems sit on JSI. Fabric is the renderer; it holds the UI as an immutable tree in C++, reads layout synchronously, and supports React 18's concurrent features. Turbo Native Modules are how JavaScript reaches platform APIs such as the camera, storage and sensors; they are typed with TypeScript specs, generated by Codegen, and loaded lazily on first use.

How JavaScript drives native views. React runs your components and produces a tree of elements. Fabric turns that into a shadow tree in C++, computes layout, and mounts the result as host views: real UIView and android.view objects created and updated through JSI. Touches and text input flow back into JavaScript event handlers through the same interface. Because JSI is synchronous where it needs to be, React Native can measure layout before the first frame is drawn, which removes the visible "jump" the old asynchronous bridge could produce.

What changed in the New Architecture?

ComponentWhat it isWhat it replacedWhat it does
JavaScript Interface (JSI)C++ layer that gives JavaScript direct references to native objectsThe asynchronous JSON bridgeSynchronous and asynchronous calls between JavaScript and native, with no serialization step
Fabric rendererRendering system with the UI stored as an immutable tree in C++The legacy renderer (Paper)Synchronous layout reads, concurrent rendering, thread-safe updates, mounts to host views
Turbo Native ModulesTyped native modules generated from TypeScript or Flow specsLegacy Native Modules loaded at startupLazy loading, type-safe interfaces via Codegen, sync or async calls
CodegenBuild-time generator for native interfaces from JavaScript specsHand-written module boilerplateProduces the C++, Objective-C++ and Java/Kotlin glue for modules and components
Bridgeless modeRuntime with the old bridge removedBridge-based runtimeDefault in 0.76 and later; all communication goes through JSI
HermesJavaScript engine tuned for React NativeJavaScriptCore as defaultAhead-of-time bytecode, lower startup time and memory use

Sources: React Native architecture docs, Fabric, Turbo Native Modules, Hermes, React Native 0.76 announcement.

Who created React Native, and who owns it now?

React Native started as a hackathon project inside Facebook in the summer of 2013, after the company's public admission that betting on HTML5 over native had been a mistake. Meta's engineering blog gives the timeline: a first public preview at React.js Conf in January 2015, the code opened to everyone at F8 in March 2015 (iOS), and the Android runtime pushed to GitHub and npm on 14 September 2015. Facebook's Ads Manager for iOS shipped on React Native in February 2015, before the framework was public.

Meta has kept building on it. The New Architecture docs say that "as of 2024, this version of React Native has been proven at scale and powers production apps by Meta."

React Native's governance changed in 2026. On 7 October 2025 the Linux Foundation announced its intent to launch the React Foundation with seven founding members: Amazon, Callstack, Expo, Meta, Microsoft, Software Mansion and Vercel. On 24 February 2026 the React Foundation was formed as an independent foundation hosted by the Linux Foundation, with eight platinum members (Huawei joined the original seven) and Seth Webster as executive director. The React team wrote that day that "React, React Native, and supporting projects like JSX are no longer owned by Meta" and that technical direction "will continue to be set by the people who contribute to and maintain React." Expo wrote up its view in its own post on the React Foundation.

Which apps are built with React Native?

The React Native showcase describes "thousands of apps," and the companies that name their use in public include some of the largest on either store.

Meta: the Facebook app on iOS, Android and Meta Quest, Facebook Ads Manager, Meta Horizon, Messenger Desktop, and Instagram on Meta Quest.

Microsoft: Microsoft Office, Outlook, Teams and Xbox Game Pass on iOS and Android.

Amazon: Amazon Shopping, Alexa, Amazon Photos, and Kindle on e-readers.

Coinbase: "As of January 2021, the Coinbase iOS and Android apps have transitioned away from native development to React Native," Coinbase wrote, serving 56 million users at the time.

Discord: the iOS app, with "millions of daily active users," built by a team of two engineers, according to Discord's 2018 post on sticking with React Native.

Bloomberg: its consumer news app for iOS and Android, launched December 2016.

Pinterest: "we now support React Native within our iOS and Android apps," wrote Pinterest Engineering in 2018.

Wix: Wix Owner, Spaces, Dine by Wix and Fit by Wix.

Bluesky: its social app for web, iOS and Android is open source and written in React Native, built with Expo.

Shopify: ran its merchant apps on React Native for five years, reporting sub-500 ms P75 screen loads and over 99.9% crash-free sessions in January 2025. In September 2026 it announced a move back to Swift and Kotlin, citing coding agents that lowered the cost of building twice. Shopify is now a former React Native user, and its post explains why its team chose two native codebases.

Appfigures measured React Native at 6.75% of all apps released in January to October 2024 and found 173 React Native apps earning more than $1M in net revenue in the trailing 30 days, against 37 for Flutter.

What is the difference between React, React Native and Expo?

React is the JavaScript library for building user interfaces; on the web it renders to the DOM through react-dom. React Native is React for native platforms: it swaps react-dom for a renderer that produces platform views and swaps browser APIs for native ones, so you write <View> instead of <div> and use a native module such as expo-location instead of navigator.geolocation, as the Expo FAQ puts it. Expo is a framework built on React Native that adds a standard library of native modules, routing, web support and project tooling. Per Expo's core concepts, the expo package can be installed in nearly any React Native project.

React (web)React NativeExpo
What it isUI libraryReact renderer and runtime for native platformsFramework and toolchain for React Native
Renders toBrowser DOM via react-domUIView on iOS, android.view on AndroidSame as React Native, plus DOM on web via React Native for web
LanguageJavaScript, TypeScriptJavaScript, TypeScriptJavaScript, TypeScript
OutputWeb pageNative .ipa and .aab binariesNative binaries and, optionally, a website from the same code
Owned byReact Foundation (Linux Foundation)React Foundation (Linux Foundation)Expo (open source, MIT); founding member of the React Foundation
RelationshipFoundation both build onUses ReactUses React Native; the way Meta recommends everyone build with React Native

Sources: react.dev, React Native docs, Expo core concepts, React Foundation.

When should you use React Native, and when shouldn't you?

Use React Native when your team already writes JavaScript or React and you need iOS and Android from one codebase, with the UI built from platform components instead of drawn by a custom engine. Coinbase's move is a typical case: an unbalanced native team (seven Android, eighteen iOS engineers) became one team on one codebase.

Think twice when:

  • The app is a 3D or heavy AR experience. Games and real-time rendering live close to Metal, Vulkan and ARKit. A JavaScript layer between your code and the GPU is a cost with no matching benefit.
  • Some AR and camera pipelines. Real-time frame processing belongs in native code. You can write that part as a Turbo Native Module or an Expo Module, but if the whole app is that pipeline, start native.
  • The design team is platform-first. If iOS and Android are meant to look and behave differently on purpose, a shared UI works against you. Expo's @expo/ui narrows this by exposing SwiftUI and Jetpack Compose from React, but a team that wants two distinct apps should ask whether it wants a shared codebase at all.
  • You have the budget to build twice and a reason to. Shopify reached that conclusion in 2026, and it is a legitimate one.

Where Expo fits

Expo is the way Meta recommends everyone build with React Native. The React Native team's June 2024 post names Expo as "the only recommended community framework", and react.dev lists it as "a React framework that lets you create universal Android, iOS, and web apps with truly native UIs".

In practice, Expo gives a React Native project a standard library of tested native modules, Expo Router for file-based navigation, Continuous Native Generation so the ios and android directories are generated from app.json instead of maintained by hand, React Native for web for a website from the same code, and the Expo Modules API for your own Swift and Kotlin. Since SDK 56, @expo/ui exposes SwiftUI and Jetpack Compose components from React. Expo made the New Architecture the default in SDK 53, when it was already enabled in 74.6% of SDK 52 projects built on EAS Build.

Limitations

Expo does not change what React Native renders; the views are the same platform views. Expo Go, the sandbox app, is a playground and not for production; real projects use a development build. The framework is free and MIT-licensed. Expo Application Services (EAS), the cloud layer for builds, submission and JavaScript updates, is optional and paid above a Free plan of 15 Android and 15 iOS builds a month.

Next step

Run npx create-expo-app@latest, open the app on a phone, and inspect the view hierarchy in Xcode or Android Studio to see the mechanism for yourself. The Expo getting started guide takes about ten minutes.

Verified on 12 September 2026.

Keep reading

Frequently Asked Questions