Overview
This guide covers migrating to Expo from various starting points and strategies for smooth upgrades between Expo SDK versions.Migrating from React Native CLI
If you have an existing React Native CLI project, you can adopt Expo incrementally.Handling native dependencies
Most React Native libraries work with Expo:Replace React Native CLI libraries
- AsyncStorage
- NetInfo
- ImagePicker
Migrating from Native (iOS/Android)
If you’re coming from native development:Migrating from Flutter
- UI Components
- State Management
| Flutter | React Native / Expo |
|---|---|
Text() | <Text> |
Container() | <View> |
Row() | <View style={{ flexDirection: 'row' }}> |
Column() | <View> |
Image.network() | <Image source={{ uri: url }}> |
GestureDetector() | <TouchableOpacity> |
ListView.builder() | <FlatList> |
Stack() | <View> with absolute positioning |
Upgrading Between SDK Versions
Automated upgrade
Manual upgrade process
Check the upgrade guide
Visit Expo SDK release notes for breaking changes.
Common breaking changes
SDK 50 - Updates
SDK 50 - Updates
- Expo Router becomes the default routing solution
- New App Icon and Splash Screen API
- Updated minimum iOS version to 13.4
- New EAS Update API
SDK 49 - Updates
SDK 49 - Updates
- React Native 0.73
- New Architecture support (Fabric)
- Updated Metro bundler
- Improved web support
SDK 48 - Updates
SDK 48 - Updates
- React Native 0.71
- Hermes is now the default JS engine
- Improved TypeScript support
- New Expo Image component
Migration Strategies
Incremental migration
Migrate screen by screen:Feature flags
Use feature flags for gradual rollout:utils/features.ts
Parallel implementations
Run old and new implementations side-by-side:Rollback Strategy
If something goes wrong:Testing After Migration
Automated tests
__tests__/migration.test.ts
Manual testing checklist
- App launches successfully
- All screens render correctly
- Navigation between screens works
- API calls succeed
- Authentication flow works
- Push notifications work
- Deep linking works
- Offline functionality works
- Performance is acceptable
- No console errors or warnings
Common Migration Issues
Metro bundler errors
Metro bundler errors
Native module linking errors
Native module linking errors
TypeScript errors after upgrade
TypeScript errors after upgrade
Version conflicts
Version conflicts
Migration Checklist
Before migration
- Read the upgrade guide for target SDK version
- Create a new branch in version control
- Document current app behavior
- Back up current codebase
- Inform team about migration
- Plan rollback strategy
During migration
- Update Expo SDK version
- Update all Expo packages
- Update third-party dependencies
- Address breaking changes
- Update TypeScript types
- Clear all caches
- Rebuild native projects
After migration
- Test all features
- Run automated tests
- Test on iOS and Android
- Check performance metrics
- Monitor crash reports
- Update documentation
- Notify team of completion
Getting Help
If you encounter issues:- Check Expo documentation
- Search Expo forums
- Ask in Expo Discord
- Review GitHub issues
- Consult SDK upgrade guide