Keel

How do you keep a backend compatible with old mobile app versions?

By the Keel team · Last checked · 4 min read

Short answer

Keep a backend compatible with old mobile app versions by only making additive changes to the API, versioning anything that must break, sending the app version with every request so you know who is still on old builds, and setting a minimum supported version that the app checks at start-up. Remove old behaviour only when your own data shows almost nobody uses it.

  • 7 days

    Time for an iOS phased release to reach all automatic-update users

    Source: App Store Connect Help, Oct 2026

  • 2

    Google Play in-app update flows: flexible and immediate

    Source: Android Developers, Oct 2026

Why do old mobile app versions break when the backend changes?

Old mobile app versions break when the backend changes because, unlike a web app, you cannot replace the code on users' phones: they keep running whatever version they installed until they choose or are prompted to update.

A field you renamed or an endpoint you removed is still called by every phone that has not updated.

Store releases make this slower still. Apple's phased release, for example, takes 7 days to reach all automatic-update users, and users with automatic updates off can stay on old versions indefinitely.

What API changes are safe for old mobile app versions?

API changes are safe for old mobile app versions when they only add things: new endpoints, new optional fields in requests, and new fields in responses that old apps can ignore.

Anything that removes, renames or changes the meaning of existing data is a breaking change.

Which backend changes old app versions survive
ChangeSafe for old apps?Why
Add a new endpointYesOld apps never call it
Add a field to a responseUsuallySafe if the app's parser ignores unknown fields
Add an optional request fieldYesOld apps simply do not send it
Make an optional field requiredNoOld apps send requests without it
Rename or remove a fieldNoOld apps still read or send the old name
Change a value's type or meaningNoOld apps misread it, sometimes silently

Should a small team version its API for mobile apps?

A small team should version its API for mobile apps only for the changes that have to break, and keep everything else additive.

A version in the path, such as /v2/, lets new apps use the new shape while old apps keep calling /v1/, but every version you keep is code you must test and maintain.

The cheapest strategy is the same one used for database migrations: expand first, move clients over, then contract once nobody uses the old shape. Rolling back ECS after a migration explains that pattern for schemas.

How do you know which mobile app versions are still in use?

Know which mobile app versions are still in use by having the app send its version and build number with every request, for example in a header, and logging it on the server.

That gives you a live count per version, which is the only reliable way to decide when an old version can be dropped.

  • Send app version, build number and platform in a header on every request.
  • Log them with each request and chart requests per version each week.
  • Alert if a deploy causes errors concentrated on one app version.
  • Include the version in crash and error reports, so you can tell a backend fault from an app fault.

When should you force users to update the mobile app?

Force users to update the mobile app only when an old version is unsafe or cannot work, such as a security fix or a backend change you cannot keep compatible.

Set a minimum supported version on the server, have the app check it at start-up, and show a blocking update screen only below that version.

On Android, Google Play's in-app updates offer two flows: flexible updates that download in the background while the app is used, and immediate updates, which are full-screen and require the user to update and restart. Use the immediate flow sparingly, because it stops people using the app until they update.

How do over-the-air updates affect backend compatibility with old app versions?

Over-the-air updates, such as Expo's EAS Update, shorten the tail of old JavaScript code but do not remove the problem, because they only reach builds with a matching runtime version and users who open the app.

Native changes still need a store release, and some users will stay on old builds.

Treat over-the-air updates as a way to move most users faster, not as a reason to make breaking API changes. The guide to releasing a mobile app with Expo EAS from CI covers runtime versions and release steps.

Is your backend safe for old versions of your mobile app?

Tick each item that is true today.

  • Every request carries the app version and platform.
  • You can see requests per app version for the last month.
  • API changes are reviewed for whether old apps still work.
  • Breaking changes go into a new API version, not the current one.
  • The app checks a minimum supported version at start-up.

Decision point: Four or five ticks: old apps should keep working through backend releases. Two or fewer: the next API change may break users you cannot see.

Sources

  1. Apple, App Store Connect Help: Release a version update in phases (checked October 2026)
  2. Android Developers, In-app updates (checked October 2026)
  3. Expo docs, Runtime versions and updates (checked October 2026)

Keep reading

Keel is an AWS release and recovery operations service for SaaS teams of 3 to 15 developers, provided by Bargainn Services Ltd, a UK company registered at Companies House (16497746). Registered office: 3rd Floor, 86-90 Paul Street, London, EC2A 4NE, United Kingdom.