upgrader is a Flutter package that detects when a new app version is available in the Google Play Store or Apple App Store, then shows a polished native dialog or card — without any backend infrastructure.
With over 247,000 weekly downloads and 150 pub points, this library has become the standard approach for in-app update prompts in the Flutter ecosystem.
UpgradeAlert and you're done. No server, no webhook, no version file to maintain.minAppVersion to make the upgrade mandatory — the dialog becomes non-dismissible so users must update first.dialogStyle parameter.UpgraderMessages and 20+ constructor parameters.
The package uses automatic store lookup on Android and iOS — no configuration needed. It queries the Google Play Store via the web scraping API and the Apple App Store via the iTunes Search API, compares the returned version string against the current package_info_plus version, and shows the dialog only when a newer build is found.
On desktop and web it reads an Appcast XML feed (RSS 2.0) that you host, following the same standard used by the Sparkle framework on macOS. The feed lists available versions with their download URLs, so users on Windows or Linux receive the same prompt as mobile users — you just update the XML file when you ship a new release.
| Platform | Store / Source | Detection | Setup required |
|---|---|---|---|
| Android | Google Play Store | ✓ Automatic | None |
| iOS | Apple App Store | ✓ Automatic | None |
| macOS | Mac App Store | ✓ Automatic | None (App Store build) |
| macOS | Direct distribution | ⚙ Appcast | Host appcast.xml feed |
| Windows | Custom feed | ⚙ Appcast | Host appcast.xml feed |
| Linux | Custom feed | ⚙ Appcast | Host appcast.xml feed |
| Web | Custom feed | ⚙ Appcast | Host appcast.xml feed |
pubspec.yaml manually and run flutter pub get.$ flutter pub add upgrader
UpgradeAlert or UpgradeCard.import 'package:upgrader/upgrader.dart';
UpgradeAlert directly below MaterialApp in the widget tree so it can intercept navigation.home: UpgradeAlert( child: MyHomePage(), ),
dependencies: upgrader: ^13.7.0 # requires Flutter ≥ 3.0.0 and Dart ≥ 3.0.0
Two ready-to-use widgets ship with the package. UpgradeAlert renders as an overlay dialog that appears on top of whatever screen the user is viewing; UpgradeCard renders as an inline Material card that you embed directly into your layout — ideal for settings pages or onboarding flows where a modal would be too disruptive. Both widgets automatically stay hidden when no update is available, so they have zero visual footprint in normal operation.
Column( children: [ UpgradeCard(), // invisible when app is up-to-date MySettingsWidget(), ], )
All parameters are passed to the Upgrader constructor. Both UpgradeAlert and UpgradeCard accept an optional upgrader: argument so you can share a single configured instance across multiple widgets — useful when you want consistent timing and messaging in both your home screen and settings page. Parameters marked with a ? type are optional; omitting them applies the documented default.
| Parameter | Type | Default | Description |
|---|---|---|---|
| durationUntilAlertAgain | Duration | 3 days | How long to wait before re-showing the dialog after the user taps LATER. |
| minAppVersion | String? | null | Semver floor. Below this version the dialog is mandatory — IGNORE and LATER are hidden. |
| dialogStyle | UpgradeDialogStyle | material | Set to cupertino for an iOS-style ActionSheet on all platforms. |
| checkOnResume | bool | true | Re-checks for a new version whenever the app comes back from the background. |
| barrierDismissible | bool | false | Whether tapping outside the dialog dismisses it. Off by default to encourage action. |
| debugLogging | bool | false | Prints detailed version-check logs — useful for tracing store lookup during development. |
| debugDisplayAlways | bool | false | Forces the dialog on every build. Use only in debug mode to verify UI layout. |
| messages | UpgraderMessages? | null | Override button labels, title, body text, or release-notes label for custom copy. |
| storeController | UpgraderStoreController? | null | Plug in UpgraderAppcastStore for Appcast-based desktop and web update detection. |
| shouldPopScope | BoolCallback? | null | Callback that controls whether the system back button can close the upgrade dialog. |
Every string in the update dialog is pre-translated and bundled with the package — no separate localization files to manage. RTL languages (Arabic, Hebrew, Persian, Urdu) render correctly without extra configuration. To display a language not yet included, or to adjust any wording, pass a custom UpgraderMessages instance to the constructor and override only the strings you need.
minAppVersion: '2.0.0' to the Upgrader constructor. When the installed version falls below that value, the library removes the IGNORE and LATER buttons and sets barrierDismissible to false automatically. The user must tap UPDATE NOW to continue. This is useful after a breaking API change or a critical security patch where running an old version would cause data corruption or expose the user to risk.
debugDisplayAlways: true and debugLogging: true on the Upgrader instance. The first flag forces the dialog to render on every build; the second prints all internal lookup steps to the debug console — including which store endpoint was contacted, the raw version string returned, and the comparison result. This makes it straightforward to confirm that the correct store ID is resolved before you release. Remove both flags before shipping to production.
Free, MIT licensed, and actively maintained. One dependency, zero infrastructure, 39 languages ready.