Skip to main content

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.
1

Install Expo packages

2

Update package.json scripts

package.json
3

Create app.json

app.json
4

Update entry point

If you have a custom entry point, update it:
index.js
5

Regenerate native projects

This updates your ios/ and android/ directories with Expo configuration.
6

Test the app

Handling native dependencies

Most React Native libraries work with Expo:

Replace React Native CLI libraries

Update imports:

Migrating from Native (iOS/Android)

If you’re coming from native development:
1

Create Expo app

2

Set up navigation

3

Port UI components

Convert native UI to React Native:
4

Port business logic

Move business logic to TypeScript:
utils/api.ts
5

Add native modules if needed

For platform-specific features:

Migrating from Flutter

Upgrading Between SDK Versions

Automated upgrade

This updates all Expo packages to compatible versions.

Manual upgrade process

1

Check the upgrade guide

Visit Expo SDK release notes for breaking changes.
2

Update Expo SDK

3

Update dependencies

4

Update app.json

app.json
5

Clear caches

6

Rebuild native projects

Common breaking changes

  • 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
  • React Native 0.73
  • New Architecture support (Fabric)
  • Updated Metro bundler
  • Improved web support
  • 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:
1

Use version control

2

Keep old versions

package.json
3

Document migration

Keep notes on changes for easy rollback:
MIGRATION.md

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

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: