Flutter package · MIT · pub.dev

upgrader — Flutter App Update Alert Package

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.

2,400+Pub Likes
247kWeekly DL
39Languages
7Platforms
// benefits

Why developers choose upgrader

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.

⚡
Two-line integration
Wrap your home widget in UpgradeAlert and you're done. No server, no webhook, no version file to maintain.
🌍
39 built-in languages
Dialog text is pre-translated, including full RTL support for Arabic and Hebrew. No extra localization code needed.
🔒
Enforce minimum version
Set minAppVersion to make the upgrade mandatory — the dialog becomes non-dismissible so users must update first.
🖥️
7-platform coverage
Android and iOS use automatic store lookup. macOS, Windows, Linux, and Web add support via the Appcast XML standard.
🎨
Material & Cupertino
Switch between Material-style and Cupertino-style dialogs with a single dialogStyle parameter.
🔧
Deep customization
Override button labels, dialog copy, colors, and timing via UpgraderMessages and 20+ constructor parameters.
// platform matrix

Platform support: automatic vs Appcast

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.

PlatformStore / SourceDetectionSetup required
AndroidGoogle Play Store✓ AutomaticNone
iOSApple App Store✓ AutomaticNone
macOSMac App Store✓ AutomaticNone (App Store build)
macOSDirect distribution⚙ AppcastHost appcast.xml feed
WindowsCustom feed⚙ AppcastHost appcast.xml feed
LinuxCustom feed⚙ AppcastHost appcast.xml feed
WebCustom feed⚙ AppcastHost appcast.xml feed
// quickstart

Installation: Three Steps to Get Started

Add the dependency
Run the command below, or add the entry to pubspec.yaml manually and run flutter pub get.
$ flutter pub add upgrader
Import the package
Add the import to any file that uses UpgradeAlert or UpgradeCard.
import 'package:upgrader/upgrader.dart';
Wrap your home widget
Place 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
// ui components

UpgradeAlert and UpgradeCard widgets

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.

UpgradeAlert
Overlay dialog — shown on top of the current screen.
Update Available
A new version of the app is available! Version 2.1.0 is now available — you have 1.8.0.
  • Material and Cupertino dialog styles
  • IGNORE, LATER, UPDATE NOW buttons
  • Mandatory mode hides IGNORE & LATER
  • Configurable re-prompt interval (default 3 days)
UpgradeCard
Inline card — embed it anywhere in your widget tree.
New version ready v2.1.0
Version 2.1.0 is now available in the App Store. Tap below to upgrade and get the latest improvements.
UPDATE NOW
  • Material design card widget
  • Invisible when no update is available
  • Ideal for settings screens or home dashboards
  • Fully customizable via UpgraderMessages
Column(
  children: [
    UpgradeCard(),  // invisible when app is up-to-date
    MySettingsWidget(),
  ],
)
// api reference

Key parameters and defaults

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.

ParameterTypeDefaultDescription
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.
// i18n

39 languages included out of the box

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.

Arabic (RTL)BasqueBengali Chinese (Simplified)Chinese (Traditional)Croatian CzechDanishDutch EnglishEstonianFarsi (RTL) FilipinoFinnishFrench GermanGreekHebrew (RTL) HindiHungarianIndonesian ItalianJapaneseKazakh KoreanLatvianLithuanian MalayNorwegianPolish PortugueseRomanianRussian SlovakSlovenianSpanish SwedishTurkishUrdu (RTL)
// faq

Frequently asked questions

It is an open-source Flutter library by Larry Aasen that automatically checks whether a newer version of your app is live on Google Play or the App Store. When a newer build is found, it displays a dialog or card widget prompting the user to upgrade — no backend, version file, or server-side work required. The package runs the version check on app start and again each time the app returns from the background, so users are always aware of the latest release without the developer having to manage any infrastructure.
Yes. Version 13 covers Android, iOS, macOS, Windows, Linux, and Web (seven platforms). On Android and iOS the version check is fully automatic through store APIs. On macOS (direct distribution), Windows, Linux, and Web you provide an Appcast XML feed — the same RSS 2.0 format used by the Sparkle framework — and the library reads it to determine the latest available version.
Pass 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.
Set 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.

Add upgrader to your Flutter project today

Free, MIT licensed, and actively maintained. One dependency, zero infrastructure, 39 languages ready.