The upgrade that quietly breaks yesterday's app
Update the OS or a core library and a native app you shipped a year ago can simply stop working. An API is deprecated, a permission model changes, a rendering path is removed — and the build that was fine in production now crashes or refuses to launch. The platform moved on, and your old program did not get the memo.
A mini-program runtime takes the opposite promise. It is versioned, and the contract is that a program shipped against an older base library keeps opening on newer runtimes. The runtime carries the compatibility surface; the program does not have to chase every platform change to stay alive.
What versioned compatibility actually is
The runtime exposes a base library with a major.minor.patch version, and the platform guarantees that newer runtimes still run programs built against older base libraries. WeChat documents this explicitly: new features are gated by minimum base-library version, and developers check compatibility with wx.canIUse or wx.getAppBaseInfo rather than assuming a feature exists. Alipay+'s base library overview and Tuya's changelog state the same principle — basic libraries "maintain backward compatibility" as they add capabilities. WeChat even ships a current and a previous stable base library inside each client release, so older programs keep initializing.
For native apps, none of this is guaranteed: an OS upgrade is a breaking change that lands on users whether the app was ready or not.
Where the gap shows up
| Step | Native app | Mini-program runtime (versioned) |
|---|---|---|
| New platform version | Can break old builds | Old base library still runs |
| Deprecated API | Crash or blocked launch | Feature-detected, graceful |
| Compatibility check | Per-device, manual | canIUse / version compare |
| Stability guarantee | None at OS level | Backward-compatible base library |
| Program lifetime | Tied to OS support | Tied to runtime contract |
The result is that a published program does not have an expiry date tied to the next platform release. It keeps opening until the developer chooses to drop support.
Why a contract beats hope
A versioned runtime means a developer can ship once and trust that the program keeps running as the platform evolves, with feature detection for anything newer. It also means the base-library floor is a setting, not a gamble: developers pick the minimum version and the runtime handles the rest. The same program stays alive across host upgrades, on every host that honors the base-library contract.
How Cross Mini App applies it
Cross Mini App gives programs a versioned runtime with an explicit compatibility contract: a program built against an older base library keeps opening on newer runtimes, with feature detection for what is new. You ship a program; the runtime guarantees it still launches after the next upgrade. You stop re-shipping just to keep yesterday's build alive.
That is the difference between an app that expires with the OS and a program the runtime promises to keep open.