Skip to main content
Quick answers to frequently asked questions about Expo development.

Getting Started

Expo is a framework and platform for building React Native apps. It provides:
  • A comprehensive SDK with native modules
  • Development tools and CLI
  • Build and deployment services (EAS)
  • Over-the-air updates
  • A managed workflow for easier development
Expo makes React Native development faster and more accessible while maintaining full native capabilities.
No, you can build complete apps using only JavaScript/TypeScript. However:
  • Managed workflow: No native knowledge required
  • Custom native code: You can drop down to native code when needed
  • Config plugins: Many native customizations can be done without writing native code
You can start without native knowledge and learn as you need it.
Yes! You can:
  1. Install Expo packages in any React Native app:
  2. Use individual Expo modules:
  3. Adopt Expo gradually without rewriting your app
See the integration guide.
Expo Go:
  • Sandbox app with pre-installed Expo SDK
  • Quick prototyping and learning
  • Limited to Expo SDK modules
  • No custom native code
Development Builds:
  • Your actual app with development tools
  • Supports any native library
  • Custom native code allowed
  • More flexibility, closer to production
For production apps, use development builds. Expo Go is great for learning and quick tests.

Project Setup

This creates a new Expo project with TypeScript support and recommended configurations.
app.json:
  • Static JSON configuration
  • Simple and straightforward
  • No logic or dynamic values
app.config.js:
  • Dynamic JavaScript configuration
  • Access environment variables
  • Conditional logic
  • Function-based configuration
If both exist, app.config.js takes precedence.
Expo supports TypeScript out of the box:
  1. Rename files from .js to .tsx or .ts
  2. Create tsconfig.json:
  3. Install types:
  4. Start developing with TypeScript!
No additional configuration needed.

Development

Using Expo Go:
  1. Install Expo Go from the App Store or Google Play
  2. Run npx expo start
  3. Scan the QR code with your device
Using a development build:
  1. Build your app: eas build --profile development
  2. Install the build on your device
  3. Run npx expo start --dev-client
  4. Open the app on your device
See Device Setup.
React DevTools:
Console Logs:
  • Logs appear in the terminal automatically
  • Use console.log(), console.warn(), console.error()
React Native Debugger:
  1. Install React Native Debugger
  2. Press ‘j’ in the terminal
  3. Debug in the standalone app
VS Code Debugging:
  1. Install React Native Tools extension
  2. Configure launch.json
  3. Set breakpoints and debug
See Debugging Guide.
Clear cache when you have bundling issues or after updating dependencies.
Common causes:
  1. Metro cache: Clear with --clear flag
  2. Large dependencies: Check bundle size
  3. Network connection: Use LAN or localhost
  4. Debug mode overhead: Normal in development
  5. Source maps: Slow but necessary for debugging
Production builds are much faster. To test performance, build a release version.

Configuration

  1. Install expo-font:
  2. Load fonts:
  3. Fonts load automatically on subsequent launches
See Font Guide.
  1. Create .env file (optional):
  2. Access in code:
  3. Or use app.config.js:
    Then access via Constants:
Only variables prefixed with EXPO_PUBLIC_ are available in app code.
App Icon:
  1. Create a 1024x1024 PNG image
  2. Update app.json:
Splash Screen:
  1. Create your splash image
  2. Update app.json:
  3. Rebuild your app
See App Icon and Splash Screen guides.

Building & Deployment

Use EAS Build:
  1. Install EAS CLI:
  2. Configure EAS:
  3. Build for iOS and Android:
  4. Download and test the build
See EAS Build.
Yes, for native builds:iOS:
Android:
However, EAS Build provides:
  • Cloud building (no native toolchain needed)
  • Consistent environment
  • Easier signing and credentials management
  • Build caching
  1. Build your app:
  2. Submit to stores:
EAS handles credentials, signing, and submission automatically.See App Stores.
Over-the-air (OTA) updates let you push JavaScript changes without app store review:
  1. Configure updates:
  2. Publish update:
  3. Users get the update on next app launch
Limitations:
  • JavaScript/assets only (no native code changes)
  • Requires expo-updates package
  • Users must have compatible native code
See EAS Update.

Native Modules & Libraries

Yes! You can use:
  1. Expo SDK modules - Pre-configured and tested
  2. React Native core - All React Native features
  3. Community libraries - Most work out of the box
  4. Native modules - With custom development builds
Libraries with native code require:
  • Config plugins (for some), or
  • Custom development builds
Search compatibility at React Native Directory.
  1. Install the library:
  2. Check if it needs a config plugin:
  3. Rebuild your app:
Some libraries work without plugins; others require custom native code.
Config plugins modify native projects during prebuild:
They let you customize native code without writing it manually.See Config Plugins.

Common Errors

Solutions:
  1. Clear cache:
  2. Check port availability (default 8081)
  3. Kill existing Metro processes:
  4. Reinstall dependencies:
Causes:
  • Missing dependency
  • Incorrect import path
  • Cache issue
  • Case sensitivity (especially on Linux)
Solutions:
  1. Install missing package:
  2. Clear cache:
  3. Check import paths:
  4. Restart Metro
Causes:
  • Native module not linked
  • Module not installed
  • Incompatible versions
Solutions:
  1. For new modules, rebuild:
  2. Check module installation:
  3. Verify config plugin is added:

Performance

General optimizations:
  1. Use Hermes:
  2. Optimize images:
    • Use appropriate sizes
    • Compress images
    • Use WebP format
  3. Lazy load components:
  4. Memoize expensive computations:
  5. Use FlatList for long lists:
See Performance.
  1. Analyze bundle:
  2. Remove unused dependencies:
  3. Tree shake properly:
  4. Use Hermes (smaller bundle)
  5. Enable minification (production only)

Monorepos

Yes! Expo works with:
  • Yarn Workspaces
  • npm Workspaces
  • pnpm
  • Turborepo
  • Nx
Example Metro config:
See Monorepos.

Getting Help

See Community Resources.