Flutter OTA updates,
without the store wait.
Over-the-air (OTA) updates, also called code push, send a fix straight to the Flutter app already installed on your users' phones. Here is what they can do, where the limits are, and how to ship one to iOS and Android today.
What is an OTA update for a Flutter app?
A normal Flutter update is a new build: you change the code, build an app bundle or an IPA, upload it, wait for App Store or Play Store review, and then wait again for users to install it. An over-the-air update skips that loop for Dart code. The app checks for an update when it opens, downloads it in the background, and runs the new code the next time it starts.
For a one-line bug, that is the difference between a fix your users get in minutes and one they get next week, if they update at all.
What a Flutter OTA update can change
- Any Dart code: business logic, API calls, widgets, layouts, text and translations.
- New screens and new classes, not only edits to existing ones.
- Both platforms: iOS and Android release builds from the App Store, TestFlight, Google Play, or sideloaded.
What it cannot change: native code (Swift, Kotlin, Java, Objective-C), plugins, assets such as images and fonts, and app permissions. Those still go through a store release. OverPush checks every patch and tells you when a change needs a store release instead.
Are OTA updates allowed on the App Store and Google Play?
Apple's guidelines allow an app to download code that changes its behaviour, as long as it does not change the app's main purpose. OverPush updates never contain native code. Google Play restricts apps that change their behaviour outside review, and applies that policy differently to different kinds of apps, so read the current policy for yours. On both stores the safe rule is the same: use OTA updates for fixes and improvements, not to turn your app into something reviewers did not see.
How to ship an OTA update to a Flutter app
With OverPush it takes one release and then one command per fix.
1. Install the CLI and connect your project
$ curl -fsSL https://overpush.in/install.sh | bash $ overpush login $ overpush init $ flutter pub add overpush
Your project gets one small config file and one dependency line. No changes to main.dart and no native code.
2. Release to the store once
$ overpush release android $ overpush release ios
Submit those builds the way you always do. Every later fix is checked against exactly what shipped.
3. Fix the bug and push the update
$ overpush patch android --rollout-percent 10 $ overpush patch ios --rollout-percent 10
Start with a share of users, watch installs and failures on the dashboard, and raise the rollout when you're happy. The full walkthrough is in the getting started guide.
Keeping OTA updates safe
- Signed updates: every patch is signed with a key that belongs to your app, and the app only accepts patches signed with it.
- Automatic rollback: if an update stops the app from starting, the device removes it and runs the shipped code again, on its own, even offline.
- Staged rollouts: send an update to 1%, 10% or 50% of devices first.
- Kill switch: roll an update back for everyone with one command.
- A dashboard: see installs and failures for every update, and each device on Business.
Frequently asked questions
Do users have to restart or approve the update?
No. The update downloads in the background and is used the next time the app opens. If you want, your app can show its own "update ready" message using update events.
How big is an OTA update?
Only what changed. On Android a small fix is usually a few hundred KB. On iOS the first update for a release is a couple of MB and later ones are usually tens of KB.
Does it slow the app down?
On Android, updated apps run at full speed. On iOS, code changed in an update can be slightly slower, but for normal UI and business logic you won't notice.
How much does it cost?
Hobby is free for one app and 5,000 update installs a month. Paid plans start at ₹999 / $15 a month. See pricing.
What else does OverPush do?
Team roles, CI, obfuscated builds and your own update UI. See Flutter code push with OverPush for everything it offers.
Ship your next Flutter fix over the air.
Install the CLI, connect a project, and publish your first OTA update in about 15 minutes. Free for one app.