OTA Update Model

EAS Update ships compatible JavaScript and assets to installed app binaries.

Safe OTA Changes

Usually safeRequires caution
Copy changesRoute behavior with native deep-link assumptions
JavaScript bug fixesLarge asset changes
Layout and style changesFeature flags that expose hidden native assumptions
API endpoint logicChanges depending on new native module behavior
Images and static assetsPlatform-specific behavior that was not device-tested

Not OTA-Safe

  • Native code.
  • Native dependencies.
  • Expo SDK upgrades.
  • Android permissions.
  • iOS usage descriptions or background modes.
  • App package name or bundle identifier.
  • Icons and splash config that affect native projects.
  • Runtime-incompatible JavaScript.
  • Store policy or privacy behavior that needs review.

Runtime Version

Runtime version is the compatibility label between a binary and an update. A binary only receives updates with a compatible runtime version.

Common policies:

PolicyUse when
appVersionSolo-dev apps that bump app version for native releases
fingerprintYou want automatic runtime changes when native inputs change
CustomYou need manual cross-platform control and can maintain discipline

Default to appVersion for simple solo-dev apps unless the project has frequent native changes or strong reasons to use fingerprint.

Rollout Flow

eas update --branch preview --message "Smoke update"
# install/open compatible preview build and verify
eas update --branch production --message "Production hotfix"
# if bad
eas update:rollback

Warning: Store rules still apply to OTA updates. Do not use OTA to sneak around review for sensitive permissions, payment behavior, privacy changes, or platform policy.