Ship smaller OTA updates: bundle diffing comes to EAS Update in SDK 55
Product•Development•React Native••4 minutes read
Quin Jung
Engineering
Alan Hughes
Engineering
SDK 55 introduces bundle diffing in EAS Update. Devices now download patches instead of full bundles, reducing download sizes by up to 75%.

Every time you publish an update with EAS Update, your users download a new bundle. For most releases (a bug fix, a copy change, a small UI tweak) that means sending megabytes of code when only a fraction of it actually changed.
Starting with SDK 55, EAS Update supports bundle diffing. Instead of downloading a full bundle, devices can now receive a small binary patch representing only what changed between the old update and the new one.
In our testing, patches result in approximately 75% smaller downloads compared to full bundles - meaning a typical 3MB update could drop to around 0.75MB. Users get updates faster, and you burn less bandwidth doing it.
Bundle diffing is in beta and opt-in. Here's how it works and how to enable it.
What is bundle diffing?
Bundle diffing lets the expo-updates client request a diff from what’s already on the device to the new update, then apply that patch locally. It’s estimated that diffs will result in an approximately 75% reduction in Hermes bytecode and JavaScript download times on both Android and iOS.
How bundle diffing works
EAS Update generates patches using the bsdiff algorithm.
When a device asks for an update, EAS Update will only serve a patch if:
- The patch is meaningfully smaller than the full bundle. Otherwise the device just gets the full bundle.
- It can be computed efficiently. If patch generation is too resource-intensive, EAS Update again falls back to the full bundle.
If anything about patching isn’t a clear win, you still ship updates normally.
How to enable bundle diffing in your app
Prereq: your app must use Expo SDK 55 or later.
Then enable it in your app config:
{"expo":{"updates":{"enableBsdiffPatchSupport":true}}
Verify it’s working
- Expo website: You can confirm that bundle diffs are being served from the Update Details page. Open the Update Group you published, then select the platform you want to inspect.
- In-app logs: call
Updates.readLogEntriesAsync()and look for a log entry indicating a patch was applied (for example, “patch successfully applied”).
If you experience issues, let us know by reaching out to us on Discord or through the website.
Limitations of bundle diffing
Bundle diffing is in beta for SDK 55. Here are the current limitations:
- Embedded bundles aren't eligible. The embedded bundle is never used as a base for patching. Devices must already be running a published update to receive a patch.
- Patches aren't guaranteed for every possible update pair immediately. When an update is published, EAS Update precomputes a patch only against the second-newest update on the channel. If a device requests the new update while running a different published update, it will initially receive the full bundle. A patch for that specific base update is then generated on demand and served to future similar requests.
- Patches are generated shortly after publishing. It can take a few minutes between publishing an update and the patch being ready. During that window, devices may receive the full bundle.
Feedback
We worked on bundle diffing to lower bandwidth cost for users and to make update delivery more efficient. In the future, we plan to support diffing on embedded bundles.
We’d love to hear how bundle diffing works for you. Let us know how we can help by reaching out to us on Discord or through the website.




