OpenAIExpoFeb 27, 2026, 7:15 PM

Ship smaller OTA updates: bundle diffing comes to EAS Update in SDK 55

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

openaienmodel: gpt-5-mini-2025-08-07

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.

Full Translation

Translations

A translation section that keeps the flow of the original article.

openaijamodel: gpt-5-mini-2025-08-07

より小さなOTAアップデートを配信:SDK 55のEAS Updateにbundle diffingが登場

EAS UpdateがSDK 55でバンドル差分(bundle diffing)をサポートするようになりました。デバイスはフルバンドルを毎回ダウンロードする代わりに、変更分のみを含む小さなパッチを取得できるため、ダウンロードサイズが最大で約75%削減されます。

概要

これまで、EAS Updateでアップデートを公開するとユーザーは新しいフルバンドルをダウンロードしていました。多くのリリース(バグ修正、文言変更、軽微なUIの調整など)は実際に変更されるコードがごく一部であるにもかかわらず、数メガバイト単位の転送が発生していました。SDK 55から、EAS Updateはバンドル差分をサポートします。フルバンドルの代わりに、デバイスは既にある更新と新しい更新の差分を表す小さなバイナリパッチを受け取り、ローカルで適用します。

当社のテストでは、パッチはフルバンドルと比べてダウンロードサイズを約75%削減しました。具体例として、通常3MBのアップデートが約0.75MBまで小さくなる可能性があります。ユーザーはより速く更新を受け取り、ネットワーク帯域の消費も削減されます。

バンドル差分はベータかつオプトインです。以下で動作の仕組みと有効化方法を説明します。

bundle diffingとは?

bundle diffingでは、expo-updatesクライアントがデバイス上に既にある内容を基準に新しい更新との差分(diff)を要求し、そのパッチをローカルで適用します。Hermes bytecodeおよびJavaScriptのダウンロード時間が、AndroidおよびiOSの両方で約75%短縮されると見込まれています。

バンドル差分の動作原理

EAS Updateはbsdiffアルゴリズムを使ってパッチを生成します。デバイスが更新を要求したとき、EAS Updateは以下の条件を満たす場合にのみパッチを配信します:

  • パッチがフルバンドルに比べて実質的に小さいこと。そうでない場合はデバイスはフルバンドルを受け取ります。
  • 効率良く計算できること。パッチ生成がリソース集約的すぎる場合はフォールバックしてフルバンドルを配信します。

パッチ生成や適用が明らかにメリットにならない場合は、従来通りフルバンドルを配信します。

アプリでの有効化方法

  • 前提条件:アプリはExpo SDK 55以降を使用している必要があります。

  • 次に、アプリ設定で有効にします:

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

有効化確認方法

  • Expoウェブサイト:Update Detailsページでバンドル差分が配信されているか確認できます。公開したUpdate Groupを開き、確認したいプラットフォームを選択してください。
  • アプリ内ログ:Updates.readLogEntriesAsync()を呼び出し、パッチが適用されたことを示すログエントリ(例: “patch successfully applied”)を探してください。

問題が発生した場合は、Discordまたはウェブサイトを通じてご連絡ください。

バンドル差分の制限事項

バンドル差分はSDK 55でベータ段階です。現時点の制限事項は以下の通りです:

  • Embedded bundlesは対象外です。埋め込みバンドルはパッチのベースとして使われません。
  • デバイスは既に公開された更新を実行中である必要があります。パッチを受け取るには、デバイスが公開済みの更新を既に実行している必要があります。
  • すべての更新ペアに対して即座にパッチが保証されるわけではありません。更新が公開されると、EAS Updateはチャンネル上の「2番目に新しい更新」に対してのみ事前にパッチを計算します。デバイスが別の公開済み更新を実行中に新しい更新を要求した場合、そのデバイスは最初はフルバンドルを受け取ります。その特定のベース更新に対するパッチはオンデマンドで生成され、以降の同様のリクエストに対して配信されます。
  • パッチは公開後すぐに生成されるわけではありません。公開からパッチ準備完了まで数分かかることがあり、その間はデバイスがフルバンドルを受け取る可能性があります。

フィードバック

バンドル差分は、ユーザーの帯域コストを下げ、更新配信の効率化を図るために開発しました。将来的には埋め込みバンドルに対する差分適用のサポートも検討しています。バンドル差分の利用感やご要望があれば、Discordまたはウェブサイト経由でぜひお知らせください。