Features

Fast to ship.
Safe to undo.

Pushing code to phones is easy. Making sure nothing goes wrong on a device you'll never see is the hard part, and that's what OverPush is built around.

Every patch is verified on the device

A phone only runs a patch after it confirms the patch is genuine and meant for it. If anything doesn't check out, the phone keeps running the code it shipped with.

  • signed with your app's key
  • meant for this app and release
  • not revoked
  • arrived complete and unmodified

Bad patches undo themselves

If a new patch stops your app from starting, the device removes it and goes back to the code it shipped with. It all happens on the phone, so it works even with no network.

Staged rollouts

Send a patch to 10% of devices, watch what happens, then raise it. Devices stay in the rollout once they're in, so users don't flip between versions.

day 1 10%
day 2 50%
day 3 100%

Kill switch

overpush patches revoke 7 stops a patch on every device. It doesn't need the signing key, so anyone on the team can stop a bad release from any laptop.

Small downloads

Patches download in the background, once, so users never wait. On Android, a patch carries only what changed: a small fix is a few hundred KB.

Roll back to any patch

Patch 4 has a problem but patch 3 was fine? Serve patch 3 again with one command.

Nothing to wire up

No changes to main.dart, no native code, no asset entries. Add the package and you're done.

A live dashboard

Daily active devices, patch installs, failures and adoption per release, plus each device's release, patch and errors. You know a fix actually landed.

Dry run first

--dry-run builds and checks a patch without publishing it, and tells you about changes a patch can't carry.

Built for CI

One token for your CI secrets, --yes on every command, and release files kept on the server, so a fresh runner can patch any release.

Built for teams

Put your apps in an organization and add teammates once. Viewer, developer, admin and owner roles decide who can publish, roll back or manage the team.

Activity log

Who published which patch, changed a rollout or rolled something back, and whether from the console or the CLI.

Roll back from the console

Every patch has a menu: change its rollout, roll it back, or roll it forward again. No terminal needed.

Platforms

Release mode, on both stores.

Patches work on real release builds, the ones your users actually install, not just debug builds.

iOS

App Store safe

Built to follow Apple's rules. Patches never contain native code, so your app stays within App Store guidelines.

  • No native code in any patch
  • Everything you need is set up by the CLI
  • Works with TestFlight and App Store builds
  • Works with obfuscated builds

Android

Full speed

Works with your normal Flutter setup. Patched apps run at the same speed as the original release.

  • Nothing extra to install
  • No Android code to add to your app
  • Play Store app bundles (AAB) and APKs
  • Every phone Flutter runs on: 64-bit and 32-bit ARM, x86_64
  • Works with obfuscated builds
Update events

Your app, your update UI.

OverPush puts nothing on screen. It tells your app what's happening, so you can show it in your own design or not at all.

Found, downloading, ready.

Listen to OverPush.events and get every step of an update: a new patch found, the download percent, and when it's ready for the next start. The same events on Android and iOS.

OverPush.events.listen((event) {
  switch (event) {
    case OverPushPatchFound():
      show('New update found');
    case OverPushDownloading(:final percent):
      show('Downloading update · $percent%');
    case OverPushPatchReady():
      show('Restart the app to apply it');
    default:
      break;
  }
});
Get the full code Widget + main.dart, ready to copy. The banner is your app's code, not OverPush.

Everything included, from day one.

Every plan, including the free one, gets signed patches, staged rollouts, and automatic rollback.