NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A comprehensive Flutter package to check for app updates and display platform-native dialogs. Supports iOS, Android, macOS, Windows, and Linux with release notes, analytics, GitHub releases, Firebase Remote Config, localization, and more.
Last release 7 months ago
12 Feb 2026
Ships unpredictably
gaps range from 8 days to 2.7 years
Nearly every release is documented
notes for 14 of 14 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
14 releases · first in 2023
One column per quarter.
Private GitHub Repository Support : Check for updates from private GitHub repositories
githubToken parameter for simple token-based authentication — just pass your GitHub PATgithubHeaders parameter for custom HTTP headers (GitHub Enterprise, advanced auth)githubToken sets the Authorization header automatically; githubHeaders can override itgithubToken parameter for simple token-based authentication — just pass your GitHub PATgithubHeaders parameter for custom HTTP headers (GitHub Enterprise, advanced auth)githubToken sets the Authorization header automatically; githubHeaders can override it// Simple — just pass your token
final appUpdater = AppUpdater.configure(
githubOwner: 'mycompany',
githubRepo: 'private-app',
githubToken: 'ghp_xxxxxxxxxxxxx',
);
// Advanced — full header control
final appUpdater = AppUpdater.configure(
githubOwner: 'mycompany',
githubRepo: 'private-app',
githubHeaders: {
'Authorization': 'token ghp_xxxxxxxxxxxxx',
'Accept': 'application/vnd.github+json',
},
);
Release Notes Display : Automatically fetch and display release notes/changelogs in update dialogs
Release Notes Display: Automatically fetch and display release notes/changelogs in update dialogs
showReleaseNotes parameter in showUpdateDialog() (enabled by default)Update Frequency Control: Prevent checking for updates too frequently
checkFrequency parameter in AppUpdaterConfig (e.g., Duration(days: 1))checkForUpdate(respectFrequency: false) to bypass frequency checkBackground/Silent Checking: Check for updates without blocking the UI
startBackgroundChecking(Duration interval) method for periodic checksstopBackgroundChecking() method to cancel background checksupdateStream to listen for update notificationsperformBackgroundCheck() for single background checkdispose() method to clean up resourcesForce Update by Minimum Version: Require users to update if below a version
minimumVersion parameter in AppUpdaterConfigminimumVersion in custom JSON/XML endpointsrequiresForceUpdate getter on UpdateInfoisPersistent: true behavior when force update is requiredUpdate Urgency Levels: Communicate update importance to users
UpdateUrgency enum: low, medium, high, criticalurgency field in custom endpoints and Firebase Remote ConfigAnalytics & Callbacks: Track user interactions with update dialogs
onAnalyticsEvent callback in AppUpdaterConfigUpdateAnalyticsEvent class with toMap() for analytics servicesdialogShown, updateAccepted, updateDeclined, etc.UpdatePreferencesGitHub Releases Support: Check for updates from GitHub releases
githubOwner and githubRepo parameters in AppUpdaterConfiggithubIncludePrereleases to include beta/prerelease versionsGitHubRelease class for release metadataTestFlight Support (iOS): Support beta updates via TestFlight
testFlightEnabled parameter in AppUpdaterConfigtestFlightUrl for custom TestFlight URLsopenTestFlight() method to open TestFlightgetTestFlightUrl() methodFirebase Remote Config Integration: Dynamic version control via Firebase
firebaseRemoteConfigEnabled parameterFirebaseRemoteConfigSettings class for key configurationfirebaseConfigFetcher callback to fetch valuesLocalization / i18n: Built-in support for translations
UpdateStrings class with all dialog textstrings parameter in AppUpdaterConfig{currentVersion}, {latestVersion}Enhanced UpdateInfo: More metadata about updates
releaseNotes property for changelog texturgency property for update priorityminimumVersion propertyisMandatory propertyreleaseDate propertyupdateSizeBytes and formattedUpdateSize propertiesrequiresForceUpdate computed propertycopyWith() methodEnhanced UpdatePreferences: New preference methods
getLastCheckTime() / setLastCheckTime() for frequency controlshouldCheckForUpdate(Duration) for frequency checkinggetUpdateImpressions() / incrementUpdateImpressions() for analyticsgetUpdateDismissals() / incrementUpdateDismissals() for analyticsBetter Custom Endpoint Support: Extended JSON/XML schema
releaseNotes / release_notes / changelog fieldsminimumVersion / minimum_version fieldsurgency field (low, medium, high, critical)mandatory / force_update fieldsImproved Dialog UI: Visual enhancements
Code Quality: Internal improvements
dispose() methodFixed an issue where the "Do Not Ask Again" preference was not being saved correctly on some platforms.
Removed outdated migration section from README.
Fixed App Store & Play Store version scraping to handle recent changes in store layouts.
Fixed a bug where the "Do Not Ask Again" preference was not being respected on some platforms.
Replaced checkAppUpdate() function with AppUpdater class for better architecture.
checkAppUpdate() function with AppUpdater class for better architecture.AppUpdater instance and call methods on it.Full Desktop Support:
Platform-Specific Dialog Styles:
UpdateDialogStyle.adaptive - Automatically selects the best style for the current platform.UpdateDialogStyle.material - Material Design 3 style (Android).UpdateDialogStyle.cupertino - Native iOS/macOS style with SF Symbols.UpdateDialogStyle.fluent - Fluent Design style (Windows).UpdateDialogStyle.adwaita - GNOME/Adwaita style (Linux).Persistent Dialogs:
isPersistent: true - Creates a non-dismissible dialog for critical/forced updates."Do Not Ask Again" Feature:
showDoNotAskAgain: true - Shows option to never show update dialog again.SharedPreferences to remember user's choice.UpdatePreferences.clearAll() - Reset all stored preferences.Skip Version Feature:
showSkipVersion: true - Shows option to skip the current version.UpdatePreferences.clearSkippedVersion() - Clear skipped version.Custom Update Endpoints:
customXmlUrl - Fetch version info from custom XML endpoint.customJsonUrl - Fetch version info from custom JSON endpoint.New AppUpdater Class:
AppUpdater.configure() - Factory constructor with individual parameters.AppUpdater(config) - Constructor with AppUpdaterConfig object.checkForUpdate() - Check for updates without showing dialog.showUpdateDialog() - Show update dialog with custom options.checkAndShowUpdateDialog() - Combined check and show dialog.openStore() - Open the appropriate app store.getStoreUrl() - Get the store URL for the current platform.New UpdatePreferences Class:
isVersionSkipped(version) - Check if a version is skipped.skipVersion(version) - Skip a specific version.isDoNotAskAgain() - Check "do not ask again" preference.setDoNotAskAgain(value) - Set "do not ask again" preference.clearAll() - Clear all update preferences.clearSkippedVersion() - Clear only the skipped version.New AppUpdaterConfig Class:
AppUpdater with all platform IDs.iosAppId - iOS App Store app ID.macAppId - macOS App Store app ID.androidPackageName - Android package name (auto-detected if not provided).microsoftProductId - Microsoft Store product ID.snapName - Snap Store package name.flathubAppId - Flathub app ID.linuxStoreType - Choose between LinuxStoreType.snap or LinuxStoreType.flathub.UpdateInfo Class: Returns detailed update information including currentVersion, latestVersion, updateUrl, and updateAvailable.
mounted checks to prevent BuildContext issues.toString() method to UpdateInfo for easier debugging.PackageInfo for better performance.package_info_plus: ^9.0.0flutter_lints: ^6.0.0url_launcher: ^6.3.1shared_preferences: ^2.3.4Bug fixes & improvements.
Dependencies update.
noUpdateCallback parameter added.
- Documentation update.
- Documentation update.
- Documentation update.
- Initial release. - Prebuilt adaptive dialogs. - Customizable adaptive dialogs.
Your coding agent can read these notes before it upgrades. Set up the MCP server →