How to build a mobile app with React Native and Expo
Posted: Dec. 11, 2025
This is an archived post. The information contained in this post will not be updated based on new discoveries.
React Native and Expo offer one of the fastest, most practical ways to build mobile applications for iOS and Android using JavaScript or TypeScript. If you want to ship cross-platform apps without wrestling with native build chains, this stack gets you moving quickly while still leaving room to scale into more advanced workflows.
This guide explains the essentials: what these technologies are, why they matter, and how to set up, build, test, and deploy an application using them.
What React Native Is
React Native is a framework for building native mobile apps using React concepts. You write components with JSX, manage state, and rely on a declarative UI model, but the output renders through native widgets rather than HTML.
Key characteristics:
- Cross-platform: One codebase for iOS and Android.
- Native performance: UI components map to native primitives, not WebViews.
- Extensive ecosystem: Strong community support, third-party libraries, and integrations.
What Expo Adds to the Equation
Expo is a set of tools, services, and libraries built on top of React Native. It abstracts away most of the complex native configuration so you can focus on building and shipping.
What makes Expo useful:
- Zero native setup: No Xcode or Android Studio required for basic development.
- Expo Go app: Instantly load your project on physical devices.
- Managed workflow: Batteries-included approach for common mobile features.
- OTA updates: Push updates without requiring a full app store submission.
- Build service: Cloud-based building for iOS and Android binaries.
If you need custom native modules later, Expo also supports an "EAS + prebuild" workflow to incrementally eject into native code.
Prerequisites
Before starting, ensure you have:
- Node.js (LTS)
- npm or yarn
- A device with Expo Go installed (iOS App Store or Google Play)
- Basic React knowledge
Step 1: Install the Expo CLI
Expo’s CLI manages development, running, bundling, and building your project.
npm install -g expo-cliStep 2: Create a New Project
Use Expo’s project generator:
expo init my-mobile-appSelect a template (e.g., blank TypeScript or JavaScript). This bootstraps a working React Native app immediately.
Navigate into the project:
cd my-mobile-appStep 3: Start the Development Server
Run your app locally:
npm startExpo Dev Tools will open in your browser. Scan the QR code with the Expo Go app to load your project instantly on a physical device.
Step 4: Understand the Project Structure
A typical Expo project includes:
my-mobile-app/
├── App.js # Root component
├── package.json
├── app.json # Expo configuration
└── assets/ # Images, fonts, iconsYou can work entirely inside App.js or split functionality into modules as your project scales.
Step 5: Create Your First Screen
Example simple component:
import { View, Text, StyleSheet } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text style={styles.header}>Hello, React Native + Expo</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center'
},
header: {
fontSize: 24,
fontWeight: '600'
}
});React Native uses Flexbox for layout, supports StyleSheet objects, and provides built-in components like View, Text, Image, and TouchableOpacity.
Step 6: Add Navigation
Use React Navigation, the industry-standard routing library.
Install:
npm install @react-navigation/native
npm install react-native-screens react-native-safe-area-contextInstall stack navigation:
npm install @react-navigation/native-stackBasic usage:
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}Step 7: Use Expo APIs for Device Features
Expo includes high-level APIs for:
- Camera
- Sensors
- File system
- Push notifications
- Location services
- Image picking
Example: picking an image
npm install expo-image-pickerimport * as ImagePicker from 'expo-image-picker';
const pickImage = async () => {
const result = await ImagePicker.launchImageLibraryAsync();
if (!result.canceled) {
console.log(result.assets[0].uri);
}
};Step 8: Build the App for Production
Use Expo Application Services (EAS) to generate binaries:
npm install -g eas-cli
eas login
eas build --platform android
eas build --platform iosExpo builds your app in the cloud and provides downloadable .aab or .ipa files. These are ready for Google Play and App Store submissions.
Step 9: Push Over-the-Air (OTA) Updates
You can deploy updates instantly without waiting for app store approvals:
expo publishUsers receive updates on their next app launch.
When to Use the Bare Workflow
The Expo managed workflow covers most use cases. If you need custom native modules or want full access to platform-specific code, you can switch to a bare workflow:
expo prebuildThis generates iOS and Android folders and gives you the freedom to write or integrate native modules.
React Native and Expo provide a robust, efficient, and scalable foundation for building mobile applications. Expo’s managed workflow accelerates development, simplifies testing, reduces native complexity, and shortens the path to deployment. For teams or solo developers who want to ship mobile products quickly without sacrificing future flexibility, this stack is one of the strongest options available today.
Do you need an app?
Do you need an App for your project? let us create one for you!
@alxlynnhd