---
title: "Keep old app versions working against the · Agent Wranglers"
url: https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/old-versions-keep-working
updated: 2026-10-21
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Keep old app versions working against the API

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Updates and versions](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers). Updated 2026-10-21.

- ID: MOB-13
- Level: Required
- Chapter: [Updates and versions](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions)
- Rule: Every app version you still support works against every API release. A server change never breaks a supported build that people have not updated.
- Risk: The app down or unusable
- How: People update late or never, so a web-style deploy that changes a response breaks their app. Send the app version and platform in a header on every call, such as `App-Version: ios/3.4.0`. Add fields instead of renaming or removing them, as [version only for breaking changes](https://agentwranglers.se/playbook/api-design/changes-over-time/versioning) says. Keep a contract test suite for the oldest supported build and run it against each API release. Remove an old field only after usage by supported versions drops to zero in the logs. Then retire versions with [stop versions you no longer support](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/minimum-version).
- Check: CI runs the contract tests of the oldest supported app version against every API change, and a failure blocks the deploy. Logs show every API request carries the app version header.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### TypeScript example

```ts
app.use((req, res, next) => {
  const [platform, version] = (req.get('App-Version') ?? '').split('/');
  req.appClient = { platform, version };
  metrics.increment('api.requests', { platform, version });
  next();
});
```

### Kotlin example

```kotlin
class AppVersionHeader : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response =
        chain.proceed(chain.request().newBuilder()
            .header("App-Version", "android/${BuildConfig.VERSION_NAME}")
            .build())
}
```

## Related rules

- [Version only for breaking changes](https://agentwranglers.se/playbook/api-design/changes-over-time/versioning) in API design
- [Stop versions you no longer support](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/minimum-version) in Mobile apps
- [Choose the lowest OS version from your users' data](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/minimum-os-version) in Mobile apps

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/old-versions-keep-working">Agent Wranglers mobile apps playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Stop versions you no longer support](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions/minimum-version)
- [Updates and versions](https://agentwranglers.se/playbook/mobile-apps/updates-and-versions)
