Skip to main content

expo-updates

Version: 55.0.8 Fetches and manages remotely-hosted assets and updates to your app’s JS bundle. Enables over-the-air (OTA) updates so you can ship bug fixes and features without waiting for app store approval.

Installation

Usage

API Reference

Properties

string | null
The UUID of the current update, or null in development
string | null
The release channel configured for this app
string
The runtime version for this build
boolean
Whether the app is running in emergency mode (after a fatal error)
boolean
Whether the app is running the bundled update (not downloaded OTA)

Methods

() => Promise<UpdateCheckResult>
Checks if a new update is available
Returns:
() => Promise<UpdateFetchResult>
Downloads the most recent update
Returns:
() => Promise<void>
Reloads the app with the most recently downloaded update
This will immediately reload your app. Save any state before calling.
(maxAge: number) => Promise<UpdatesLogEntry[]>
Reads expo-updates log entries
() => Promise<void>
Clears all expo-updates log entries

Events

(listener: (event: UpdateEvent) => void) => void
Hook to subscribe to update events

Examples

Check and Install Update

Auto-Update on App Start

Update with Progress Indicator

Listen to Update Events

Display Update Info

Staged Rollout

Debug Logs

Configuration

app.json:

Check Automatically Options

  • ON_LOAD: Check on app load (default)
  • ON_ERROR_RECOVERY: Only check after error
  • WIFI_ONLY: Only check on Wi-Fi
  • NEVER: Manual checks only

EAS Update

Publish updates with EAS:

TypeScript

Platform Support

Updates do not work in Expo Go. Build a development or production build to test.

Best Practices

  1. Check on Launch: Check for updates when app starts
  2. Background Downloads: Download updates in background, apply on next launch
  3. Test Updates: Test updates on staging channel before production
  4. Handle Errors: Always wrap update calls in try/catch
  5. User Choice: Let users decide when to apply updates
  6. Monitor Logs: Use log entries to debug update issues
Never call reloadAsync() without user confirmation, as it will immediately restart the app.

Resources