What it is
React Native is a mobile framework from the React ecosystem. Developers describe screens as components, and the framework connects that component code to native iOS and Android views.
The project started at Meta as a way to ship mobile products faster without splitting every feature across fully separate Objective-C, Swift, Java, and Kotlin teams. The repository therefore contains JavaScript, C++, Java, Objective-C++, and platform build code.
What is inside
The repository includes the runtime core, base components, bridges to platform APIs, the newer Fabric and TurboModules architecture, tests, examples, and build infrastructure. It is a foundation for applications and libraries, not just a widget kit.
Its value is that it exposes the real cost of cross-platform mobile work: JavaScript, C++, Android, iOS, and native-module guidance live in one public codebase.
How it is used
Teams use React Native when they want to share a large part of interface logic across iOS and Android while keeping access to device capabilities. Real products still include native code for cameras, notifications, payments, and platform-specific navigation.
Small teams get faster starts and a broad library ecosystem. Larger teams get a common component model and a path for moving selected parts of an existing app into a shared layer.
Strengths and limits
The main strength is the familiar React model, fast interface iteration, and a large hiring pool. The same component thinking can be used on web and mobile, even when code is not copied unchanged.
The limitation is that iOS and Android do not disappear. Complex animation, heavy lists, native SDKs, and unusual devices still require platform knowledge.
React Native also depends on native modules. A good team decides early which parts stay in Swift, Kotlin, or Java and which parts can live in the shared component layer. That reduces the risk of building the app around platform workarounds.
Maintenance depends on React versions, Android SDK, Xcode, build tooling, and third-party libraries. If those pieces move chaotically, development speed disappears even though the shared-code idea still looks attractive.
Example
A small React Native screen
This example shows the component model: React owns state, while Text and Pressable render as native mobile controls.
import { useState } from 'react'
import { Pressable, Text, View } from 'react-native'
export function CounterScreen() {
const [count, setCount] = useState(0)
return (
<View>
<Text>Presses: {count}</Text>
<Pressable onPress={() => setCount(count + 1)}>
<Text>Add</Text>
</Pressable>
</View>
)
}