Ship smaller OTA updates: bundle diffing comes to EAS Update in SDK 55
Key Points
- Up to ~75% smaller OTA downloads
- Opt-in beta in SDK 55 via config flag
- Uses bsdiff; falls back to full bundle
Summary
SDK 55 adds opt-in bundle diffing to EAS Update: devices can download binary patches (generated with bsdiff) instead of full bundles, reducing OTA download sizes by about 75% in our tests. Patch serving is automatic when it’s meaningfully smaller and efficient to generate; otherwise the full bundle is still delivered.
Key Points
-
What it does
- Devices request a diff against the bundle already on device and apply a local patch instead of downloading the entire bundle.
- Uses the bsdiff algorithm and targets Hermes bytecode and JS on Android and iOS.
-
Benefits
- Approximately 75% smaller downloads (e.g., a 3MB bundle → ~0.75MB patch), faster updates, and lower bandwidth costs.
-
How to enable
-
Prerequisite: your app must use Expo SDK 55 or later.
-
Enable in app config by setting updates.enableBsdiffPatchSupport to true. Example (app.json/app.config):
{ "expo": { "updates": { "enableBsdiffPatchSupport": true } } }
-
-
How to verify
- Check the Update Details page in the Expo dashboard for served diffs.
- In-app: call Updates.readLogEntriesAsync() and look for a log entry like "patch successfully applied".
-
Limitations & behavior
- Beta and opt-in for SDK 55.
- Embedded bundles are not eligible as a patch base.
- Devices must already be running a published update to receive a patch; EAS precomputes patches only against the second-newest update on the channel and will generate additional patches on demand.
- Patch generation may take a few minutes after publish; during that window devices may receive the full bundle.
-
Operational notes
- EAS Update falls back to full bundles when a patch isn’t meaningfully smaller or is too expensive to compute.
- Monitor update delivery in dashboard and logs; report issues via Discord or the website.
Recommended next steps for engineers
- Upgrade to SDK 55+, enable bsdiff support in config, publish test updates, and verify patch application in dashboard and logs. Monitor patch generation latency and rollback behavior during the initial rollout.