Build the mental model
React Native is the core framework that builds mobile apps with JavaScript and TypeScript, rendering real native UI components on Android and iOS.
Common misconception
People often say "Expo" and "React Native" as if they were interchangeable, but every Expo app is still a React Native app underneath — Expo is not a competing framework, only a tooling ecosystem built around it.
- Development tooling — a fast dev server, hot reloading, and the Expo Go preview app
- Device API access — ready-made packages for camera, location, notifications
- Build services — EAS Build compiles without a local Android Studio/Xcode setup
- Over-the-air (OTA) updates — push JS-level fixes without app-store review
None of this replaces learning React Native itself — Expo sits on top of it as a productivity layer, and teams can move toward a more custom bare workflow when needed.
- Expo
- A tooling and platform ecosystem built around React Native that simplifies development tooling, device API access, build services, and over-the-air updates.
EXPO BUILT ON REACT NATIVE
--------------------------
EXPO BUILT ON REACT NATIVE
-----
+------------------------------------------------------+
| EXPO ECOSYSTEM |
| dev tooling | device APIs | EAS build | OTA updates |
+------------------------------------------------------+
| REACT NATIVE (CORE FRAMEWORK) |
| JavaScript / TypeScript -> native UI compo- |
| nents rendered on the platform |
+------------------------------------------------------+
| ANDROID / IOS (NATIVE) |
+------------------------------------------------------+Connect it to a real scenario
Most new React Native projects today start with Expo's managed workflow, because it removes a huge amount of setup friction — no need to touch native project files just to get started.
A project's app.json or app.config.js file holds all its configuration in one readable place instead of scattered native config files.
Not all-or-nothing
Expo's "config plugins" let a managed project include specific native customizations without fully ejecting — teams typically move to a bare workflow only when a native module has no Expo equivalent.
For a small team building a fairly standard app — forms, lists, camera, notifications, maps — Expo's managed workflow covers the vast majority of real needs.
Try the working example
function suggestReactNativeWorkflow(project) {
const { wantsSimplifiedSetup, needsCustomNativeModule, teamIsNewToMobile } = project;
if (needsCustomNativeModule) {
return "bare/custom React Native workflow (or Expo with a custom dev client)";
}
if (wantsSimplifiedSetup || teamIsNewToMobile) {
return "Expo managed workflow";
}
return "Expo managed workflow (default recommendation)";
}
const firstTimeTeam = {
wantsSimplifiedSetup: true,
needsCustomNativeModule: false,
teamIsNewToMobile: true
};
const customHardwareProject = {
wantsSimplifiedSetup: false,
needsCustomNativeModule: true,
teamIsNewToMobile: false
};
const experiencedStandardProject = {
wantsSimplifiedSetup: false,
needsCustomNativeModule: false,
teamIsNewToMobile: false
};
console.log("First-time mobile team:", suggestReactNativeWorkflow(firstTimeTeam));
console.log("Custom hardware project:", suggestReactNativeWorkflow(customHardwareProject));
console.log("Experienced team, standard app:", suggestReactNativeWorkflow(experiencedStandardProject));First-time mobile team: Expo managed workflow
Custom hardware project: bare/custom React Native workflow (or Expo with a custom dev client)
Experienced team, standard app: Expo managed workflow (default recommendation)
A team wanting simplified setup or new to mobile gets pointed toward Expo managed; a project needing a custom native module gets pointed toward the bare workflow instead.5-minute try-it
Add a fourth example project with both `needsCustomNativeModule: true` and `teamIsNewToMobile: true` at the same time — predict which condition the function checks first before running it, then verify.
One important caution
Assuming Expo and React Native are the same thing, or that the React Native course already covers Expo
Treating the managed-to-bare workflow decision as all-or-nothing and forgetting that config plugins offer a middle ground
Expo Documentation — How Mobile Apps Work