WhoBuilt

The OTA Illusion: What No One Tells You About Instant Updates At Scale

Sep 16, 2025· 26 min· 1.9K views·Watch on YouTube

Speaker

Adam Mruk, a senior engineer at Clara, explains the engineering and release challenges of React Native OTA updates at RUC 2025, presented by Callstack.

How OTA updates work

React Native can run JavaScript from a bundle stored on the device, much like a browser runs a web app. An OTA system downloads a new bundle and points the app to it, but this only updates JavaScript; native changes still require a store release.

Building smaller updates

Clara’s system tracks builds and artifacts, stores them on S3, and lets the app check for updates and download them. To reduce bandwidth, the team compares build artifacts and ships only changed chunks. For a single large bundle, Hermes base bytecode can make binary diffs smaller.

Recovering from broken updates

Clara keeps an update in an evaluating state until health checks pass, then can revert to the previous bundle if the app crashes before it is marked applied. The team also checks chunk checksums before applying an update, which can catch damaged downloads or extraction errors. A custom iOS asset resolver fixed image paths that broke when OTA updates moved the main chunk.

Planning releases at scale

Clara merges about 40 changes to main each day and releases to app stores weekly, so its team manually controls OTA updates rather than using continuous delivery. Updates require an app restart and may be delayed by download or extraction failures. Rollout percentages apply to a particular app version, and multiple store and OTA versions complicate monitoring.

Choosing an OTA solution

Mruk advises most teams to use an existing OTA solution because building and maintaining one involves many hidden complexities. He recommends checking whether a tool supports rollback, update health checks, and diffs, and understanding exactly what it ships and how it applies updates. Teams should also plan for analytics and monitoring across multiple native and OTA versions.

Takeaways

  • Treat OTA as a JavaScript delivery path; native changes still need a store release.
  • Use artifact diffs to reduce update size and customer data usage.
  • Add health checks, rollback, and checksum validation to handle failed updates.
  • Track rollout percentages against the specific app version receiving the update.
  • Plan monitoring for the different native and OTA versions users may have installed.

Mentioned in this talk

Search inside this talk

What was claimed 10

  • metric
    Clara: Over 100 million customers
    “We have over 100 million customers all over the world”
    YouTube
    Unverified1 source· Talk
  • role at
    Adam Mruk is senior engineer at Clara
    “I'm a senior engineer at Clara.”
    YouTube
    Unverified1 source· Talk
  • feature
    OTA updates: deliver JavaScript changes to clients without a native release
    deliver JavaScript changes to clients without a native release
    “deploy changes to your clients without doing a native release”
    YouTube
    Unverified1 source· Talk
  • built
    custom OTA solution
    “At Clara, we implemented our own OTA solution completely from scratch”
    YouTube
    Unverified1 source· Talk
  • feature
    Re.Pack: code splitting and programmatic JavaScript bundle loading
    code splitting and programmatic JavaScript bundle loading
    “it lets us do code splitting ... [and] programmatically choose how our JavaScript bundle is loaded”
    YouTube
    Unverified1 source· Talk
  • uses
    “For this, we use Re.Pack.”
    YouTube
    Unverified1 source· Talk
  • uses
    base bytecode when compiling JavaScript
    “Hermes has you covered ... with a special option called 'base bytecode'”
    YouTube
    Unverified1 source· Talk
  • uses
    “It all started with a Sentry error we noticed”
    YouTube
    Unverified1 source· Talk
  • metric
    Clara: Releases a new version to the store every week
    “we release a new version to the store every single week”
    YouTube
    Unverified1 source· Talk
  • metric
    Clara: Around 40 merges to the main branch per day
    “we have around 40 merges to the main branch per day”
    YouTube
    Unverified1 source· Talk

Related talks