---
title: 'Ship smaller OTA updates: bundle diffing comes to EAS Update in SDK 55'
authors: Quin Jung, Alan Hughes
published: February 27, 2026
categories: Product, Development, React Native
tags: OTA Updates, EAS Update
---

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](https://expo.dev/solutions/eas-ota-updates) 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](https://docs.expo.dev/eas-update/bundle-diffing/).

## 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](https://en.wikipedia.org/wiki/Delta_encoding#bsdiff).

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](https://expo.dev/changelog/sdk-55) or later.

Then enable it in your app config:

```json
{
	"expo":{
		"updates":{
			"enableBsdiffPatchSupport":true
		}
	}
```

## Verify it’s working

![verify bundle diffing is working](https://cdn.sanity.io/images/9r24npb8/production/41c56dc5e596c9f2f414672d3c784739be920514-1558x364.png)

1. **Expo website:** You can confirm that bundle diffs are being served from the [Update Details](https://expo.dev/accounts/%5Baccount%5D/projects/%5Bproject%5D/updates) page. Open the Update Group you published, then select the platform you want to inspect.
2. **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](https://chat.expo.dev/) or through the [website](https://expo.dev/contact).

## 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](https://chat.expo.dev/) or through the [website](https://expo.dev/contact).