Aller au contenu

SDK 55 Breaking Changes

React Native 0.83, React 19.2. Full changelog: https://expo.dev/changelog/sdk-55

Removed APIs & Config Fields

notification field removed from app.json

Specifying a notification entry in app.json will throw an error during prebuild. Migrate to the expo-notifications config plugin:

{
  "expo": {
    "plugins": [
      [
        "expo-notifications",
        {
          "icon": "./assets/notification-icon.png",
          "color": "#ffffff"
        }
      ]
    ]
  }
}

newArchEnabled config option removed

Legacy Architecture is no longer available. Remove the field from app.json entirely.

edgeToEdgeEnabled removed from app.json

Edge-to-edge is mandatory on Android 16+. The config option no longer has any effect.

experiments.reactCanary flag removed

React 19 is the baseline. The flag is no longer necessary.

EXPO_USE_FAST_RESOLVER removed

The fast resolver is the only resolver implementation. No env variable needed.

expo-av removed from Expo Go

expo-av no longer receives patches. Migrate to expo-audio and expo-video.

Renames & API Changes

Old New
expo-blur experimentalBlurMethod blurMethod
expo-router headless tabs reset prop resetOnFocus
expo-video allowsFullscreen prop fullscreenOptions.enable
expo-router ExpoRequest/ExpoResponse Standard Request/Response
expo-video bitrate track field averageBitrate and peakBitrate

Removed Deprecated APIs

  • expo-clipboard: content property removed from event listeners — use getStringAsync()
  • expo-cellular: carrier-related constants removed (iOS methods return null)
  • expo-notifications: push notifications in Expo Go on Android now throws (was warning)

Deprecations (will be removed later)

  • removeSubscription functions from several modules → use subscription.remove() instead
  • expo-video-thumbnails → use generateThumbnailsAsync from expo-video (removal in SDK 56)
  • expo-navigation-bar: most methods deprecated and no-op (edge-to-edge mandatory). Use config plugin.
  • expo-status-bar: backgroundColor, translucent, networkActivityIndicatorVisible deprecated. Use config plugin.
  • androidNavigationBar app.json config deprecated → use expo-navigation-bar config plugin
  • androidStatusBar.backgroundColor / androidStatusBar.translucent deprecated → use expo-status-bar config plugin

CLI & EAS Changes

eas update requires --environment flag

This flag is now mandatory. Update CI scripts:

# Before
eas update --branch production --message "Fix bug"

# After
eas update --branch production --message "Fix bug" --environment production

App config evaluation changed

app.config.ts files are now transpiled with your project's TypeScript installation, not a separate internal tool. Test your dynamic config after upgrading.

Native Tabs Import Changes

Icon, Label, Badge, VectorIcon are now static properties on NativeTabs.Trigger. See ./native-tabs.md reference.

Autolinking Changes

expo.experiments.autolinkingModuleResolution is now enabled by default in monorepos. If having dependency issues, verify with:

npx expo-modules-autolinking verify -v

Tool Requirements

  • Xcode 26 required (EAS Build defaults to 26.2)
  • Node.js: ^20.19.4, ^22.13.0, ^24.3.0, or ^25.0.0
  • iOS minimum stays 15.1 (bump to 16.4 planned for SDK 56)

Migration Checklist

  • [ ] Remove newArchEnabled from app.json
  • [ ] Remove edgeToEdgeEnabled from app.json
  • [ ] Remove notification from app.json, use config plugin
  • [ ] Remove experiments.reactCanary from app.json
  • [ ] Migrate expo-av to expo-audio / expo-video
  • [ ] Rename experimentalBlurMethodblurMethod in expo-blur usage
  • [ ] Rename headless tabs resetresetOnFocus
  • [ ] Replace ExpoRequest/ExpoResponse with standard Request/Response
  • [ ] Update eas update commands with --environment flag
  • [ ] Update Xcode to version 26
  • [ ] Review expo-navigation-bar and expo-status-bar usage for deprecated APIs
  • [ ] Check native tabs imports (see native-tabs.md reference)
  • [ ] Review expo.install.exclude and patches for outdated workarounds