NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3137 most downloaded on pub.dev
A simple Flutter alarm manager plugin for both iOS and Android.
Last release 2 days ago
05 Oct 2026
Release timing varies
gaps range from 9 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
144 releases · first in 2022
One column per quarter.
[Android] A non-looping alarm now stops when its audio ends (#449), as on iOS: an alarm queued behind it rings next, and keepNotificationAfterAlarmEnd
keepNotificationAfterAlarmEnds leaves a plain notification behind.[Android] Alarms are now armed with `AlarmManager.setAlarmClock` (#439), which Doze and OEM battery savers exempt. The alarm shows as the system's nex
AlarmManager.setAlarmClock (#439), which Doze and OEM battery savers exempt. The alarm shows as the system's next alarm (status bar icon); set AlarmSettings.androidAlarmClock: false to keep the previous behavior.[Android] Swiping the app away no longer loses an alarm queued behind the ringing one (#454).
[Android] The ring wake lock is released when the alarm stops instead of being held for 5 minutes (#452).
[Android] `Alarm.init()` no longer discards an alarm queued behind a ringing one (#437).
Alarm.init() no longer discards an alarm queued behind a ringing one (#437).[Android] `Alarm.stopAll()` now reaches every actively ringing alarm (#437), even after an earlier stop failure removed it from native storage.
Alarm.stopAll() now reaches every actively ringing alarm (#437), even after an earlier stop failure removed it from native storage.[Android] A non-looping alarm is no longer reported as ringing after its sound has finished. Alarm.isRinging said so until something stopped it, and a
Alarm.isRinging said so until something stopped it, and a later alarm was queued or silently dropped as overlapping.[Android] Fixed a crash when stopping an alarm with `volumeEnforced: true` (#437). A second ring left the previous volume-enforcement runnable queued
volumeEnforced: true (#437). A second ring left the previous volume-enforcement runnable queued and uncancellable, killing the process on stop.Alarm.set no longer reports a stop to Flutter, which deleted the alarm it had just saved and left it armed with no Dart record.Alarm.stop() now actually stops an alarm due within 5 seconds (#440). Those are armed with an uncancellable timer, so one could ring after being stopped, or at its old time after being re-set.volumeEnforced: true now works without a volume (#438). It pins the level read at ring start, so an alarm at the user's own volume can no longer be turned down mid-ring. A muted stream is left alone.Alarm.snoozed is deprecated in favour of Alarm.events filtered on AlarmEventCause.snooze. Same deferrals, plus the recordedAt that Alarm.acknowledgeEv…
Deprecation:
The README snooze example and the example app both moved off the deprecated
call; the example had been demonstrating the exact failure the deprecation
describes. Two tests pin that the filter the docs now prescribe agrees with the
getter, so the advice cannot quietly start losing deferrals.
Also documents that startup navigation can replace the alarm screen on an alarm
cold start, which looks exactly like an alarm that never fired.
No behaviour change: the only executable difference from 5.11.0 is the
annotation itself.
Alarm.snoozed (#435). Listen to Alarm.events and filter on AlarmEventCause.snooze instead: same deferrals, plus the recordedAt that Alarm.acknowledgeEvent() needs. No removal version.Alarm.acknowledgeEvent and Alarm.init(acknowledgeEventsAutomatically: false), so an app can hold a host event's marker until it has durably recorded i
Android behaviour change:
New API:
Verified on a Pixel 8a: stale alarm discarded and reported through
Alarm.events, a non-stale one still ringing through the #424 boot-window
deferral, and an explicit null never discarding.
Alarm.events as an AlarmDropped with cause staleAtBoot.AlarmSettings.androidStaleAfter, the cutoff for that: 15 minutes by default, null never discards.Alarm.acknowledgeEvent() and Alarm.init(acknowledgeEventsAutomatically: false), so an app can keep a host event until it has durably recorded it (#429).Alarm.events, reporting deferrals and discards the host decided on its own.
Android reliability:
New API:
Alarm.events, reporting deferrals and discards the host made on its own.Alarm.snoozed is now buffered, so listeners subscribing after Alarm.init() still get replayed deferrals.Android reliability fixes, all reported by @samyak1409 :
Android reliability fixes, all reported by @samyak1409:
Alarm.init() cancelling an alarm that was due but had not started ringing yet, which silently lost the alarm. Past-due alarms are now left alone for 30 seconds before being stopped.Alarm.set() now throws AlarmException where it previously returned true. A failed re-arm after a reboot keeps the alarm stored instead, so a later Alarm.init() can retry it.NotificationSettings.androidStopAlarmOnDismiss: false now re-posts the notification while the alarm is still ringing, instead of letting the swipe remove the only on-screen control over a sounding alarm.[Android] Added NotificationSettings.androidStopAlarmOnDismiss to control whether swiping the notification away also stops the alarm. Enabled by defau
NotificationSettings.androidStopAlarmOnDismiss to control whether swiping the notification away also stops the alarm. Enabled by default, matching the behavior added in 5.0.3.[Android] Fixed the lock screen asking for authentication before the alarm could be stopped: the keyguard is now only dismissed on devices without a P
[Android] Added a snooze action to the alarm notification, via AlarmSettings.androidSnoozeDuration and NotificationSettings.androidSnoozeButton. Snooz
AlarmSettings.androidSnoozeDuration and NotificationSettings.androidSnoozeButton. Snoozing defers the alarm rather than stopping it, and is reported on the new Alarm.snoozed stream as well as through Alarm.scheduled. A snooze taken with no Flutter engine running is applied on the next Alarm.init().com.gdelataillade.alarm.action.RING, instead of always opening the launcher activity.build_runner being unable to regenerate lib/model/*.g.dart, which also removes the only dart format violation in the package.Fixed AlarmSettings.copyWith not clearing payload, and a debug-mode assert in NotificationSettings.copyWith; deprecated legacy copyWith parameters tha…
AlarmSettings.copyWith not clearing payload, and a debug-mode assert in NotificationSettings.copyWith; deprecated legacy copyWith parameters that were silently ignored.fadeDuration.[iOS] Added Swift Package Manager support.
AlarmSettings.allowSameSecondScheduling to allow multiple alarms to ring in the same second.[Android] Added AlarmSettings.preferConnectedAudioDevice to route alarm audio through connected earphones or Bluetooth.
AlarmSettings.preferConnectedAudioDevice to route alarm audio through connected earphones or Bluetooth.androidStopAlarmOnTermination not persisting across app restarts.[Android] Added VolumeSettings.showSystemUI to suppress the system volume bar when the alarm sets or restores volume.
VolumeSettings.showSystemUI to suppress the system volume bar when the alarm sets or restores volume.[Android] Route alarm audio through the alarm volume stream so it responds to the alarm slider instead of media volume.
[iOS] Added NotificationSettings.keepNotificationAfterAlarmEnds to control whether the notification should stay after alarm ends or not.
NotificationSettings.keepNotificationAfterAlarmEnds to control whether the notification should stay after alarm ends or not.Using device's default alarm sound when assetAudioPath is null.
assetAudioPath is null.[Android] Fixed stream not firing.
[Android] Simplified plugin lifecycle.
[Android] Added androidStopAlarmOnTermination parameter.
androidStopAlarmOnTermination parameter.Updated AlarmSettings.assetAudioPath documentation.
AlarmSettings.assetAudioPath documentation.[Android] Added icon color parameter for notification.
[iOS] Added native refactoring to fix alarm that didn't ring.
Added CodeCanvas diagram to documentation (see here).
[Android] Improved stop alarm process.
* Updated README.
💥 Breaking Changes 🔧 Android installation steps were updated [here](https://github.com/gdelataillade/alarm/blob/main/help/INSTALL-ANDROID.md).
💥 Breaking Changes 🔧 Android installation steps were updated here.
* Added payload parameter. * Updated dependencies. * Improved alarm events streams. * Fixed duplicated alarms issue.
Fixed backward compatibility for v4 Dart JSON structures.
Fixed backward compatibility for v4 Dart JSON structures.
Added debug logs to understand why backward compatibility fails.
[Android] Fixed collition between package and FCM.
* Updated README.
[iOS] Added iOSBackgroundAudio parameter to disable background silent audio player, which is not necessary if your app already has a background proces
iOSBackgroundAudio parameter to disable background silent audio player, which is not necessary if your app already has a background process that keeps app active in the background.Added backward compatibility with package versions below 5.
[Android] Fixed build error & downgrade datastore.
Handles stopAll on the platform side for improved reliability.
stopAll on the platform side for improved reliability.Old alarms (alarms created pre v5) will be deleted and some API parameters have been renamed, this update requires a small amount of refactoring for u
💥 Breaking Changes
isRinging might return FALSE immediately after alarm starts to ring.[Android] Show app on lock screen when alarm rings.
* Migrated to Pigeon.
[iOS] Fixed isRinging method for specific id.
isRinging method for specific id.* [iOS] Fixed isRinging method.
isRinging method.[Android] Fixed androidFullScreenIntent parameter.
androidFullScreenIntent parameter.Added new alarm parameter volumeEnforced.
volumeEnforced.Fixed and improved isRinging method.
[iOS] Added iOS notification category handling.
[iOS] Fixed vibration interruption during overlapping alarms.
[Android] Fixed crash when incoming alarm is ignored.
[Android] Fixed crash on older Android versions.
[Android] Fixed error when rescheduling old version alarm after reboot.
[Android] Add native backward compatibility with older versions.
[iOS] Fixed crash on iOS when setting warning notification on kill.
Added notification action stop button.
💥 Breaking Changes
AlarmSettings model.1.8.0.[iOS] Removed notification permission request. Must be handled in-app to match Android behaviour.
💥 Breaking Changes
[Android] Reschedule alarms after device reboot.
Your coding agent can read these notes before it upgrades. Set up the MCP server →