---
title: Releases
description: react-native-notify-kit API releases
---

## Unreleased (next release)

## [10.6.0] (2026-08-23)

This 10.6.0 update adds Android full-screen intent access reporting and fixes notification reliability across MessagingStyle person resolution, action validation, Fresco bitmap ownership, PendingIntent identity, and iOS Communication Notification avatar handling.

### Android Notification Settings

- Added `getNotificationSettings().android.fullScreenIntent` reporting for the Android access required to use full-screen intents.
- API < 29 reports `ENABLED`, API 29-33 reflects `USE_FULL_SCREEN_INTENT`, and API 34+ reflects Android's full-screen intent special app access.
- `ENABLED` does not guarantee that a particular notification will be presented full-screen.

### Android Notification Reliability

- Fixed a failure path that could drop `MessagingStyle` notifications when `Person` resolution timed out or an icon could not be loaded or created.
- Recoverable `MessagingStyle` person failures now use an icon-less fallback that preserves the remaining `Person` fields and allows notification construction to continue.
- Fixed notification image handling so Fresco-owned bitmaps are copied before leaving `BaseBitmapDataSubscriber`.
- Fixed `ReceiverService` `PendingIntent` identity collisions across app process restarts that could route action buttons or dismiss/delete intents from older live notifications to another notification's payload.

### Android Action Validation

- Fixed validation in the React Native client and Server SDK so duplicate `pressAction.id` values within a single notification's `android.actions` array are rejected.

### iOS Communication Notifications

- Fixed valid `file://` sender avatars so they display their image instead of a placeholder.
- Materialized HTTPS group avatars before the communication intent is built in both direct and Notification Service Extension (NSE) paths.

### Validation

- Added deterministic regression coverage for `MessagingStyle` `Person` timeouts and icon failures, Fresco bitmap ownership, full-screen intent access reporting, and `ReceiverService` `PendingIntent` identity.
- Added a physical-device smoke harness covering a notification surviving a process restart, a second notification posted from the new process, real action-button presses, and real dismiss routing; the device scenarios were validated on a Pixel 9 Pro XL running Android 17/API 37.
- Added iOS harness coverage for avatar resolution and materialization in Communication Notifications, deadline and media-cutoff handling, and one-shot NSE completion.

## [10.5.0] (2026-07-24)

This 10.5.0 update fixes Firebase Admin compatibility in the Server SDK payload builder while preserving the public TTL input in seconds.

### Server SDK / Firebase Admin

- Fixed `buildNotifyKitPayload()` returning Android fields in raw HTTP v1 form, which caused Firebase Admin to reject messages using `options.ttl`.
- Generated messages now use Firebase Admin-compatible millisecond TTL values, priority values, collapse-key naming, and routing types.

### Validation

- Added local Firebase Admin compatibility coverage for TTL conversion, priority, collapse keys, token/topic/condition routing, APNs expiration, custom data, and non-enumerable payload metadata without credentials or network requests.

## [10.4.9] (2026-07-18)

This 10.4.9 maintenance update fixes Android foreground event delivery during native event relay initialization and React context transitions.

### Android Foreground Events

- Registering `onForegroundEvent()` now initializes the native event relay, preventing foreground events from being missed when no other native API has been called.
- Pending notification events are requeued when the `ReactContext` becomes null or inactive after the flush snapshot, preventing permanent event loss while preserving FIFO ordering, the queue capacity of 10, and drop-oldest behavior.

## [10.4.8] (2026-07-09)

This 10.4.8 update adds an FCM build-only helper so apps can inspect or customize a reconstructed FCM notification before displaying it manually.

### FCM Mode

- Added `buildFcmNotification(remoteMessage)`, a build-only counterpart to `handleFcmMessage()`.
- Reconstructs the FCM `Notification` without displaying it.
- Allows apps to inspect or customize the notification before calling `displayNotification()` manually.

## [10.4.7] (2026-07-07)

This 10.4.7 maintenance update hardens the Android foreground-service STOP/null placeholder path on Android 14+ so defensive cleanup no longer reuses unsafe while-in-use foreground-service types when the app is backgrounded. Public APIs and the normal foreground-service START path are unchanged.

### Android Foreground Services

- Hardened the defensive foreground-service STOP/null placeholder on Android 14+ so it no longer reuses the full manifest-declared foreground-service type mask.
- Avoided reusing while-in-use types such as `microphone` or `camera` for the defensive STOP/null placeholder when a safer declared type such as `shortService` or `dataSync` is available.
- Treated a defensive `SecurityException` in this STOP/null path as non-fatal.

### Validation

- Added foreground-service regression coverage for the defensive STOP/null path, including Robolectric coverage for `microphone|dataSync`, `camera|dataSync`, `shortService|microphone`, `microphone`-only, and defensive `SecurityException` handling.
- Added a smoke harness and script validated on a physical Pixel 9 Pro XL running Android 16/API 36 for the `microphone|dataSync` background STOP scenario.

## [10.4.6] (2026-07-02)

This 10.4.6 maintenance update fixes a React Native New Architecture import-time crash in bridgeless apps by deferring `NotifeeApiModule` TurboModule resolution until the first native access. It also adds regression coverage and an iOS smoke scenario for early listener registration.

### React Native New Architecture

- Fixed an import-time crash in bridgeless apps by deferring `NotifeeApiModule` TurboModule resolution until the first native access.
- Early imports, such as registering `notifee.onBackgroundEvent(...)` in `index.js`, no longer call `TurboModuleRegistry.getEnforcing(...)` during module evaluation.
- Public APIs are unchanged.

### Validation

- Added targeted `NotifeeNativeModule` coverage for constructor-safe lazy TurboModule resolution, idempotent native event listener setup, error propagation, and retry behavior after native emitter/listener setup failures.
- Added a `listener-only` iOS smoke scenario and non-terminating iOS device harness mode for validating early listener registration without invoking notification display APIs in the scenario.

## [10.4.5] (2026-06-25)

This 10.4.5 maintenance update fixes Android background notification action routing and a stale React context recovery edge case in headless background tasks. It also clarifies Android scheduled trigger recovery and Expo CNG/prebuild behavior for local scheduled triggers.

### Android Notification Actions

- Kept Android 12+ notification actions without `launchActivity` or `mainComponent` on the `ReceiverService` path instead of always routing them through the launch-activity `PendingIntent`.

### Android Headless Tasks

- Fixed a `HeadlessTask` stale `ReactContext` edge case where the cached initialized state could remain true while the current `ReactContext` was null.
- Background tasks now treat that state as stale, restart the ReactHost initialization path, and drain queued tasks only after a valid `ReactContext` is available.

### Documentation

- Clarified Android scheduled trigger reboot recovery, exact-alarm fallback behavior, and Expo CNG/prebuild manifest-merge behavior for local scheduled triggers.

### Validation

- Added targeted `HeadlessTask` regression coverage for stale/null `ReactContext` recovery.
- Validated the no-launch notification action background path on a physical Pixel 9 Pro XL running Android 16.

## [10.4.4] (2026-05-29)

This 10.4.4 maintenance update records Android Java guard, documentation, repository tooling, and test harness updates already validated on the maintenance branch. It does not change the public JavaScript API or notification runtime behavior.

### Android Java Guard

- JDK 17 remains the minimum requirement for Android builds.
- JDK 17 and JDK 21 are the validated Android build baselines.
- JDK versions newer than the validated baselines are no longer blocked by NotifyKit before the consumer Gradle, Android Gradle Plugin, Kotlin, and React Native toolchain can evaluate compatibility.
- For Expo/EAS projects, newer JDK compatibility also depends on the consumer Expo/EAS Android toolchain.

### JDK Documentation

- Clarified the Android JDK policy across installation, environment support, README, and package README documentation.
- Documented that Android builds require JDK 17 or newer, that JDK 17 and JDK 21 are the validated baselines, and that newer JDKs remain toolchain-dependent.
- Documented that JDK 8 and JDK 11 are not supported.

### Repository Tooling Advisory Fixes

- Resolved the repository lockfile alert for xcode's transitive uuid dependency with a targeted Yarn resolution for `xcode/uuid` to `uuid` 11.1.1.
- `xcode` remains at 3.0.1. The uuid advisory was not runtime-reachable through NotifyKit notification behavior in this repository usage, and this root lockfile fix does not automatically protect all npm consumers.
- Updated the Expo smoke fixture from `expo` ~55.0.23 to ~55.0.26 so its Expo Metro chain resolves `postcss` to patched 8.5.x. This fixture tooling fix does not add a PostCSS resolution and does not enter the published `react-native-notify-kit` npm package.
- Updated the `ws` lockfile resolution used through `@expo/cli` from 8.20.0 to 8.20.1, within the existing `^8.12.1` range. This did not change `package.json`, Expo SDK, React Native, Metro, or add a `ws` resolution.
- The PostCSS and ws alerts were through Expo smoke fixture tooling, not NotifyKit runtime notification issues.

### Tests And Harnesses

- Moved the xcode-backed Expo config plugin tests to Jest's node environment so `xcode` resolves `uuid` through the Node/CommonJS export path under the React Native Jest preset.
- Made `scripts/test-ios-nse-helper.sh` executable; the script content is unchanged.

### Validation

- Passed `yarn validate:all`, `yarn verify:ios-core`, `yarn smoke:expo:config`, `yarn tests_rn:test`, `yarn tests_rn:test-server`, `cd packages/cli && yarn test`, the iOS delegate/local attachment/NSE helper harnesses, `yarn test:core:android`, and `yarn e2e:cli-tarball`.
- Passed dependency/tooling checks for the advisory follow-ups: `yarn why postcss`, `yarn install --immutable`, `yarn why ws`, `yarn smoke:expo:config`, and `yarn validate:all`.

### Validation Limits

- Expo prebuild, Android runtime smoke, real iOS builds, device smoke, NSE runtime, FCM/Firebase, EAS, release, publish, and tag workflows were not validated as part of this maintenance entry.

## [10.4.3] (2026-05-18)

This 10.4.3 maintenance update realigns the library development target and bare React Native smoke app with React Native 0.85.3. It keeps the minimum supported React Native version at >=0.73.0 and remains New Architecture only.

### React Native 0.85.3 Maintenance

- Updated the current development target to React Native 0.85.3 for the library and bare smoke app.
- Aligned bare smoke tooling with React Native 0.85.3, including `@react-native/*` tooling and `@react-native/jest-preset`.
- Aligned the bare smoke Android Gradle wrapper with the React Native 0.85.3 template.
- Refreshed the bare smoke iOS `Podfile.lock` to React Native 0.85.3 pods, Hermes 250829098.0.10, and RNNotifee 10.4.2.

### Validation

- Validated TypeScript checks, React Native Jest tests, server Jest tests, Android unit tests, iOS core generation verification, bare Android `assembleDebug`, iOS pod install, and physical iPhone build/install.
- Confirmed visible local notification display on a physical iPhone.
- Public JS API unchanged.
- Runtime notification behavior unchanged.

### Limits

- Expo smoke remains on Expo SDK 55 / React Native 0.83.x and was not updated as part of this step.
- Expo React Native 0.85 validation remains a separate future track and was not part of this maintenance step.
- FCM, headless/background flows, EAS, and Expo smoke were not validated as part of this step.
- iOS tap/background/killed press flow is not claimed as fully validated by this step.

## [10.4.2] (2026-05-11)

This 10.4.2 patch hardens Expo CNG iOS `NotifyKitNSE` generation and fixes an iOS precompiled-modules header visibility issue in `RNNotifee`. It does not change the public JavaScript API and does not change runtime notification behavior.

If your app uses Expo CNG and a generated `NotifyKitNSE`, upgrading to 10.4.2 avoids stale `1.0` extension version metadata and CocoaPods host/extension `use_frameworks!` mismatches.

10.4.2 also avoids a reported iOS precompiled-modules build failure where `NotifeeApiModule.mm` could not resolve `NotifeeCore+UNUserNotificationCenter.h`. The import now uses the same relative `NotifeeCore` path style as the existing `NotifeeCore.h` import. This is a compile-time-only fix.

The Expo smoke iOS fixture now uses `ios.forceStaticLinking` for `RNFBApp` and `RNFBMessaging`, because the fixture includes RNFirebase and uses `ios.useFrameworks: "static"`. This avoids the local RNFirebase non-modular-header failure seen under precompiled Expo Modules.

### Expo iOS

- Fixed generated `NotifyKitNSE` version/build metadata so the extension mirrors the parent Expo app version/build in `Info.plist` and Xcode build settings.
- Existing generated `NotifyKitNSE` targets are normalized for version/build metadata and Podfile linkage instead of requiring manual deletion/regeneration.
- Fixed `NotifyKitNSE` Podfile `use_frameworks!` inheritance so the extension matches the host target linkage, including static and dynamic frameworks.
- Expo conditional `use_frameworks!` Podfile lines are evaluated against `Podfile.properties.json` and `USE_FRAMEWORKS` instead of being treated as always active.
- Fixed an iOS precompiled-modules header visibility issue where `NotifeeApiModule.mm` could fail to resolve `NotifeeCore+UNUserNotificationCenter.h`.

### Validation

- Validated locally with `EXPO_USE_PRECOMPILED_MODULES=1`, clean iOS prebuild, CocoaPods install, and physical iPhone build/install.
- Public JS API unchanged.
- NotifyKit runtime notification behavior unchanged.
- EAS iOS cloud build was not run as part of this validation and remains a separate gate requiring Apple credentials/provisioning.

## [10.4.1] (2026-05-11)

This 10.4.1 patch fixes an iOS static-frameworks header visibility issue and records the latest Expo smoke fixture EAS validation work. It does not change the public JavaScript API.

### iOS

- Fixed a static-frameworks header visibility issue where the public `NotifeeApiModule.h` header imported `NotifeeCore.h`. In clean Expo/EAS or CocoaPods builds using static frameworks, this could surface as `'NotifeeCore.h' file not found` while compiling `RNNotifee`.
- The `NotifeeCore` dependency is now kept private to the implementation file instead of being exposed through the public API module header.

### Expo Smoke EAS

- Hardened the Expo smoke fixture for EAS validation by supporting Firebase file environment variables, enabling Corepack/Yarn 4 for the EAS development profile, making the dynamic Expo config compatible with the EAS config reader, and preserving the NotifyKit config plugin build output in the EAS archive.
- Validated Android EAS Build for the Expo smoke fixture, including Firebase file env secrets, NotifyKit config plugin resolution, RNFirebase config, Gradle build, and APK artifact generation.

### Validation Limits

- Android EAS validation was limited to the Expo smoke fixture and produced an APK artifact.
- The APK artifact was not used for a full runtime FCM smoke in that validation pass.
- EAS iOS cloud build was not part of this validation and remains a separate gate requiring Apple credentials/provisioning.
- Expo Go remains unsupported because NotifyKit requires native modules and native notification targets/capabilities.
- Existing iOS background JS `PRESS` marker and killed-state tap validation limits still apply.

## [10.4.0] (2026-05-09)

Release focused on the first official Expo CNG integration for development builds across iOS and Android. This is support for Expo prebuild and development builds, not Expo Go.

### Expo CNG

- Added an official config plugin entry for `react-native-notify-kit`.
- iOS: the plugin can generate and wire the `NotifyKitNSE` Notification Service Extension during Expo prebuild, so Expo development builds can use the FCM Mode attachment/rich-notification path without manually creating the NSE in Xcode.
- Android: the plugin can configure NotifyKit foreground service manifest requirements when explicitly opted in through `android.foregroundService.types`.
- The plugin supports `ios.notificationServiceExtension: true` and an object form with `enabled`, `targetName`, and `bundleSuffix`.
- The Android foreground service config supports type-specific manifest permissions and requires `specialUseSubtype` when `specialUse` is selected.
- Expo Go is not supported because NotifyKit requires native modules and native notification targets/capabilities.

### iOS

- The Expo prebuild path now creates the NSE files, Xcode target, host app dependency, `.appex` embed phase, bundle identifier, entitlements, and Podfile target.
- The generated NSE Podfile target is isolated from the Expo host target to avoid inheriting host modules that do not belong in the extension.
- Static framework alignment was fixed for Expo projects using Firebase and `use_frameworks!`.
- `NotifeeExtensionHelper` header imports were adjusted so `RNNotifeeCore` can compile inside the generated NSE under static-framework/header-map constraints.

### Android

- Android foreground service manifest configuration is available through the NotifyKit config plugin, but it is opt-in. Android remains no-op by default when `android.foregroundService` is omitted.
- The plugin writes `app.notifee.core.ForegroundService`, `android:foregroundServiceType`, `FOREGROUND_SERVICE`, type-specific `FOREGROUND_SERVICE_*` permissions where Android defines them, and the `specialUse` subtype property when required.
- The plugin does not configure Firebase, does not install RNFirebase, does not add `USE_EXACT_ALARM`, does not add `USE_FULL_SCREEN_INTENT`, and does not add Maven or `extraMavenRepos` workarounds.
- Android FCM Mode in Expo remains data-only: RNFirebase receives the message and the app calls `notifee.handleFcmMessage(remoteMessage)`.

### Validation

- Validated a real npm tarball install from a scratch fixture, plugin resolution from `node_modules`, Expo config, iOS prebuild, `pod install`, `xcodebuild`, `NotifyKitNSE.appex` generation, and app embedding.
- Validated Expo development build runtime smoke on iOS and Android.
- Validated iOS FCM Mode foreground delivery on a physical iPhone with a generated NSE, logical attachment metadata visible through `getDisplayedNotifications()`, and observed `NotifyKitNSE` process.
- Observed iOS visible FCM background delivery and tap-to-open, but the Expo smoke does not currently produce a reliable JS `PRESS` marker for iOS background tap routing.
- Validated Android Expo config, Android prebuild, `expo run:android`, base runtime, FCM token registration, foreground `android-expo-smoke`, background `android-expo-smoke`, visible notification display, and killed-state best-effort delivery without force-stop on a Pixel 9 Pro XL running Android 16 / SDK 36.
- Validated Android RNFirebase data-only foreground and background paths through `SMOKE:FCM_ON_MESSAGE`, `SMOKE:FCM_FOREGROUND_HANDLE_OK`, `SMOKE:FOREGROUND_EVENT_DELIVERED`, `SMOKE:FCM_BACKGROUND_MESSAGE`, and `SMOKE:FCM_BACKGROUND_HANDLE_OK`.
- Validated Android foreground/background delivery and tap routing in the Expo smoke app on a Pixel 9 Pro XL, including background `SMOKE:BACKGROUND_EVENT_PRESS` and optional foreground `SMOKE:FOREGROUND_EVENT_PRESS`.
- Validated the Android Expo foreground service config plugin with a real prebuild and a runtime `shortService` smoke on a Pixel 9 Pro XL.

### Limits

- Expo Go remains unsupported.
- Android background and killed-state data-only delivery depends on FCM priority, device state, Doze, and OEM policy. Force-stop is excluded.
- Android tap validation covers the Expo smoke app on a Pixel 9 Pro XL only. It is not a guarantee for every device, OEM state, or force-stop path.
- iOS JS `PRESS` marker validation for visible FCM background tap remains a follow-up. iOS killed state, visual lock-screen/banner attachment rendering, textual NSE log capture, and iOS RNFirebase data-only/client-handler validation were not completed as release gates for 10.4.0.
- Android foreground service runtime validation covers `shortService` only. Other foreground service types were not runtime-validated, and Google Play foreground service policy compliance remains the app developer's responsibility.
- The Expo smoke app was migrated to React Native Firebase modular APIs to remove the namespaced API deprecation warning from the smoke paths. This is smoke fixture cleanup only and does not change the public NotifyKit API or add a consumer requirement.

## [10.3.3] (2026-05-07)

Patch release focused on iOS notification delegate reliability and generated iOS core packaging. It does not add a public API, change JavaScript payloads, or introduce a breaking change.

### iOS

- Improved `UNUserNotificationCenter` delegate chaining reliability with an internal idempotent rechain path. This helps NotifyKit stay in the notification callback path when another SDK assigns itself as the notification center delegate after NotifyKit, while refreshing downstream selector flags and preserving downstream forwarding for non-NotifyKit notifications.
- Preserved NotifyKit ownership for local, trigger, and FCM Mode notifications marked with `__notifee_notification`, including when `handleRemoteNotifications` is disabled for non-NotifyKit remote notifications.
- Guarded downstream delegate completion handlers so duplicate downstream completion calls do not invoke the upstream completion more than once. No downstream completion timeout or fallback behavior is introduced.
- The delegate reliability fix does not use method swizzling and does not introduce a general delegate multiplexer.

### Packaging

- Regenerated and verified the generated package iOS core before packing.
- Added verification that `packages/react-native/ios/NotifeeCore` matches the root `ios/NotifeeCore` source of truth and that the npm tarball includes all 17 iOS core files.

### Tests

- Added iOS delegate chaining harness coverage for current delegate capture, late delegate override, explicit rechain behavior, downstream forwarding, NotifyKit-owned ownership, selector flag refresh, `handleRemoteNotifications: false`, FCM Mode ownership, and downstream completion one-shot behavior.

## [10.3.2] (2026-05-06)

### Fixed

- **iOS**: hardened Notification Service Extension handling for FCM Mode payloads. The extension now accepts `notifee_options` both as the FCM Mode JSON string and as the legacy/manual APNs dictionary shape, with safe fallback for malformed or unexpected payloads.
- **iOS**: guarded Notification Service Extension delivery against duplicate `contentHandler` calls during normal-completion / timeout races.
- **iOS**: scoped Notification Service Extension helper state per request, reducing the risk of stale state when attachment completions arrive late.
- **iOS**: fixed `getNotificationCategories()` readback for text input notification actions.
- **iOS**: hardened the non-NSE local attachment downloader with explicit timeouts and safer filename-extension handling.

### Tests

- Added ObjC harness coverage for NSE payload parsing/fallback and local attachment downloader behavior.
- Added iOS device smoke automation with callback-based PASS/FAIL results for local notifications, displayed-notification verification, FCM minimal delivery, and FCM iOS attachment delivery.

## [10.3.1] (2026-05-06)

### Fixed

- **Android**: fixed a Kotlin compilation issue in `prewarmForegroundService()` on some React Native/Kotlin toolchains, reported with React Native 0.77.3, where the direct `app.notifee.core.WarmupHelper` reference could fail with `Unresolved reference 'app'`. The bridge now imports `WarmupHelper` explicitly. This is a compile-time fix only with no runtime behavior, public API, JavaScript payload, Gradle, or manifest changes.

## [10.3.0] (2026-05-05)

### Changed

- **Android**: internal Bundle/Parcelable reader modernization and deprecation cleanup. No public API, JavaScript payload, scheduling, Room, reboot recovery, foreground service, or PendingIntent behavior changes are intended.

### Fixed

- **Android**: `pressAction: null` now fully disables notification body taps. The notification body no longer opens the app, emits `PRESS`, or populates `getInitialNotification()` when the press action is explicitly opted out. Action buttons remain unaffected.
- **Android**: fixed `getChannelGroup()` delegation to use the channel group API instead of the channel API.

### Tests

- **Tests**: expanded Android regression coverage around notification, channel, trigger parsing and manager scheduler paths.
- **Tests**: added Android unit and smoke coverage for `PRESS` / `ACTION_PRESS` routing, `InitialNotificationEvent`, Headless JS dispatch, action buttons without `launchActivity`, `pressAction: null`, and default notification body taps.

## [10.2.1] (2026-04-28)

### Changed

- **Android**: `getPowerManagerInfo().activity` now represents a known vendor-settings candidate rather than a `PackageManager`-prevalidated activity.
- **Android**: `openPowerManagerSettings()` now attempts vendor settings intents directly and safely falls back or no-ops when Android cannot resolve or start the intent.

### Fixed

- **Android**: guarded notification posting on Android 13+ when `POST_NOTIFICATIONS` is not granted, avoiding uncontrolled `SecurityException` failures and `DELIVERED` events when `notify()` is not called.
- **Android**: removed the protected `BROADCAST_CLOSE_SYSTEM_DIALOGS` permission from the library manifest so it is no longer propagated to consumer apps.
- **Android**: made the legacy `ACTION_CLOSE_SYSTEM_DIALOGS` path best-effort and `SecurityException`-safe on Android 11 and lower.
- **Android**: removed the `ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS` direct-request path from the Oppo/ColorOS power-manager fallback.
- **Android**: removed package-visibility queries from the power-manager settings helpers; vendor settings now open best-effort without requiring consumer apps to inherit `<queries>` declarations.
- **Android**: cleaned up owned lint warnings after the permission, policy, package-visibility, discouraged API, and obsolete SDK guard fixes.
- **iOS**: made the notification display application-state check app-extension-safe so `RNNotifeeCore` can compile inside a Notification Service Extension target.
- **CLI/iOS**: updated `init-nse` Podfile patching to avoid an Xcode build cycle between an embedded `NotifyKitNSE.appex` and React Native Firebase's `[RNFB] Core Configuration` phase.

### Docs

- **Docs**: made reference generation self-contained by generating `src/version.ts` before TypeDoc.
- **Docs**: guarded reference generation against running without Git metadata, preventing degraded `Defined in` links.
- **Docs**: upgraded TypeDoc reference tooling for TypeScript 5.9 compatibility.
- **Docs**: included previously missing referenced API types in the generated reference: `ModuleWithStatics` and `WebNotificationSettings`.
- **Docs**: formatted manual MDX documentation pages.

### Tests

- **Tests**: added an iOS/NSE hardware automation script for `init-nse`, `pod install`, RNFB cycle checks, iOS builds, FCM scenario sending, logs, reports, and cleanup.
- **Tests**: validated Android hardware E2E, including foreground/background FCM, killed rerun without force-stop, tap `PRESS`, action buttons, and BigPicture notifications.
- **Tests**: validated iOS/NSE hardware E2E on physical device, including foreground/background/killed FCM, NSE processing, attachment handling, and tap flow.
- **Smoke app**: cleaned up Android manifest lint warnings for redundant labels and data extraction rules.

## [10.2.0] (2026-04-27)

### Added

- **React Native**: `TimestampTrigger.repeatInterval` for calendar-based custom repeat intervals on timestamp triggers. Timestamp triggers now support custom repeat intervals such as every 2 days, every 2 weeks, and every 3 months from the selected start timestamp.
- **React Native**: `RepeatFrequency.MONTHLY` for monthly timestamp trigger recurrence. Yearly recurrence is not supported.
- **iOS**: custom repeat intervals are implemented with a bounded rolling schedule of one-shot local notifications, with top-up when the app becomes active, when the user interacts with a notification, or when a rolling notification is delivered in foreground.

### Changed

- **iOS**: removed the legacy `UILocalNotification` launch-options fallback from the initial-notification path. Supported iOS versions use the modern `UNUserNotificationCenterDelegate` / `UNNotificationResponse` path for notification taps and `getInitialNotification()`.
- **iOS**: migrated deprecated SiriKit call intent identifiers to Apple's unified `INStartCallIntentIdentifier`. The public `IOSIntentIdentifier.START_CALL` should be used for notification category intent identifiers. Legacy `START_AUDIO_CALL` and `START_VIDEO_CALL` values remain accepted for compatibility, but now map to the unified call intent identifier. `getNotificationCategories()` can return `START_CALL` when reading back call intent categories from iOS.
- **iOS**: deprecated announcement and notification-summary options are now treated as compatibility no-ops on supported iOS versions. Explicit announcement authorization requests are no longer needed because announcement authorization is included by iOS on supported versions, while notification summary arguments are ignored by iOS 15+. The JS fields remain available for backward compatibility and are marked as deprecated in the TypeScript reference.
- **iOS**: `foregroundPresentationOptions.alert` is now implemented with the modern banner/list presentation options on supported iOS versions instead of calling the deprecated `UNNotificationPresentationOptionAlert`. The JS option remains available for backward compatibility.
- **iOS behavior change**: repeating `TimestampTrigger` notifications now use a bounded rolling schedule of one-shot local notifications instead of a native repeating `UNCalendarNotificationTrigger`. This makes custom repeat intervals (`repeatInterval`) and `RepeatFrequency.MONTHLY` possible, respects the selected start timestamp, and rebalances the rolling pending-notification budget across active series. Apps that relied on iOS native repeating calendar triggers being scheduled indefinitely should review the new iOS rolling-window behavior: the library keeps upcoming occurrences scheduled and tops them up when the app becomes active, when the user interacts with a notification, or when a rolling notification is delivered in foreground. iOS does not wake an app merely because a local notification was delivered while the app is killed or suspended, so the rolling window cannot be extended indefinitely unless the app runs again.
- **Android**: timestamp trigger recurrence now advances by `repeatFrequency * repeatInterval` using calendar-aware scheduling. Existing triggers without `repeatInterval` keep the previous behavior with interval `1`.
- **Tooling**: `yarn gen:reference` now formats generated reference docs with Prettier so repeated runs are idempotent. The smoke app also has a dedicated Jest setup for a lightweight import/render gate, with owned iOS build warnings cleaned up.

### Fixed

- **iOS**: rolling timestamp triggers now rebalance the bounded pending-notification window across all active rolling series. This prevents earlier recurring triggers from consuming the entire iOS pending budget and blocking later triggers such as `DAILY + repeatInterval: 2`, `WEEKLY + repeatInterval: 2`, and `MONTHLY + repeatInterval: 3` from coexisting.
- **Android**: cleaned up owned build/lint warnings by modernizing Gradle assignment syntax, replacing deprecated React Native activity access in the Kotlin bridge, adding an explicit action guard to `RebootBroadcastReceiver`, using `Locale.ROOT` for resource-name normalization, and removing the invalid smoke-app `FOREGROUND_SERVICE_SHORT_SERVICE` permission.

### Notes

- **Android**: `RepeatFrequency.MONTHLY` is supported with AlarmManager. It is not supported with `alarmManager: false`, because WorkManager uses duration-based intervals and does not provide calendar-month recurrence semantics.
- **iOS**: custom repeat intervals cannot be extended indefinitely while the app remains killed/suspended and the user never interacts with notifications, because iOS does not wake the app merely when a local notification is delivered.

## [10.1.0] (2026-04-17)

### Added

- **Android**: `ResourceUtils.getFallbackSmallIconId(Context)` — new public static helper that returns a resource ID guaranteed to be valid for a smallIcon. Three-layer fallback: `applicationInfo.icon` → `applicationInfo.logo` → `android.R.drawable.ic_dialog_info`. Never returns `0`, never throws, catches any exception and falls through to the system default. Reusable from any code path that needs an emergency icon.

- **Tests**: `ResourceUtilsFallbackIconTest` — six Robolectric + Mockito unit tests covering each of the three fallback tiers, the exception-swallow branch, the null-context branch, and a "never returns 0" invariant guard across all five paths. `NotificationAndroidModelSmallIconFallbackTest` — three Robolectric unit tests covering the `getSmallIcon()` return contract when the `smallIcon` key is missing, unresolvable, or empty.

- **Tests**: `validateTrigger.test.ts` cases covering the three new small-timestamp error paths and a regression guard for the existing "must be in the future" message on valid-but-past epoch-ms values.

- **Tests**: new instrumented `RebootRecoveryTest` case covering the non-repeating future TIMESTAMP happy path (trigger with `repeatFrequency: -1` and `timestamp > now` must survive a simulated reboot with its fire time preserved and the `AlarmManager` PendingIntent re-registered at the original timestamp). Complements existing coverage of past-stale non-repeating (within/beyond grace) and DAILY/WEEKLY repeating paths.

- **Docs**: new "Small icon not showing in Android release builds" subsection in the Troubleshooting section of both root `README.md` and `packages/react-native/README.md`, documenting the three common causes (asset only in `src/debug/res/`, R8 resource shrinking, naming mismatch) with recipes for each. New bullet in the "Behavior changes from upstream" section covering the fallback. New row in the "Bugs Fixed from Upstream Notifee" table referencing upstream [invertase/notifee#733](https://github.com/invertase/notifee/issues/733).

- **Docs**: New README subsection under "Quick Start > Handle events" clarifying iOS event-handler routing — tap from foreground fires `onForegroundEvent`, tap from background/killed fires `onBackgroundEvent` (because iOS reports `UIApplication.applicationState == Inactive` at the moment of the tap delivery, not `Active`). Resolves the confusion reported in upstream [invertase/notifee#1155](https://github.com/invertase/notifee/issues/1155). New Troubleshooting subsection "Silent pushes and background fetch — handled by Firebase, not by this library" clarifying that the library does not hook `application:didReceiveRemoteNotification:fetchCompletionHandler:` and that silent-push JS execution in killed state is Firebase's responsibility, referencing upstream [invertase/notifee#597](https://github.com/invertase/notifee/issues/597). New callout at the top of `docs/fcm-mode.mdx` pointing users hitting upstream [invertase/notifee#1133](https://github.com/invertase/notifee/issues/1133) ("onBackgroundEvent not triggered on iOS for remote notifications") to FCM Mode as the end-to-end resolution. Added explicit iOS tap-routing note (foreground/background) to `docs/react-native/events.mdx`; added SEO cross-reference to upstream [invertase/notifee#1155](https://github.com/invertase/notifee/issues/1155) in the existing `docs/react-native/ios/interaction.mdx#foreground-vs-background-routing` section. Applied identically to root `README.md` and `packages/react-native/README.md`. Motivation: upstream repo archived April 7, 2026; README/npm/docs-site SEO is now the only discovery path for users still blocked by these upstream issues.

### Changed

- **Android**: **Behavior change** — when `android.smallIcon` does not resolve to a valid resource ID at runtime (asset only in `src/debug/res/`, R8 resource shrinking, naming mismatch), the library now falls back to the app's launcher icon instead of letting `NotificationCompat.Builder.build()` throw `IllegalArgumentException: Invalid notification (no valid small icon)`. The resolution failure is logged at level `w` (previously `d`, invisible in release logcat) with the original icon name, the three typical causes, and a pointer to the README Troubleshooting section. The log stays internal to logcat — `LogEvent` is not propagated to the JS layer (pre-existing architectural choice, unchanged here). Addresses the fragile code path behind upstream [invertase/notifee#733](https://github.com/invertase/notifee/issues/733).

- **Android**: removed spurious `BOOT_COMPLETED` intent-filter from `NotificationAlarmReceiver` in `AndroidManifest.xml`. The receiver does not handle boot — reboot recovery is owned exclusively by `RebootBroadcastReceiver` (already present and correct). The removed filter previously caused no-op wakeups on every device boot with a null-extras Intent that early-returned at `NotificationAlarmReceiver.java:43`. No behavior change for notification delivery.

- **TypeScript**: `validateTrigger` now produces targeted error messages when `trigger.timestamp` is suspiciously small (< 1e12 ms). Three cases are distinguished: day-of-month values (1–31) suggest `date.getDate()` usage, values in the 1e9–1e12 range suggest seconds since epoch instead of milliseconds, and other small values produce a generic "too small" message. All three messages recommend `Date.now()` or `date.getTime()`. Addresses upstream [invertase/notifee#872](https://github.com/invertase/notifee/issues/872). Previously these cases all emitted the generic "'trigger.timestamp' date must be in the future." which did not help users diagnose the root cause — a confusion between `.getDate()` / seconds / milliseconds.

- **Docs**: Linked upstream Notifee issues [#1079](https://github.com/invertase/notifee/issues/1079), [#1226](https://github.com/invertase/notifee/issues/1226), and [#1262](https://github.com/invertase/notifee/issues/1262) to the existing 9.2.0 architectural fix entry in the "Bugs Fixed from Upstream Notifee" table (previously marked `N/A (architectural)`). All three are the same root cause — the pre-compiled AAR distributed via a bundled Maven repo at `node_modules/@notifee/react-native/android/libs/` — and are all resolved by the single-module compile-from-source architecture introduced in 9.2.0. Added a new Troubleshooting subsection ``#### `Could not resolve app.notifee:core:+` — does not apply to this fork`` to capture direct Google searches for the error string. Applied identically to the root `README.md` and `packages/react-native/README.md`. Motivation: the upstream repo was archived on April 7, 2026 and issue commenting is no longer possible, so README/npm SEO is now the only discovery path for users still blocked by these issues.

- **Docs**: Added two rows to the "Bugs Fixed from Upstream Notifee" table in both `README.md` and `packages/react-native/README.md` linking upstream issues [invertase/notifee#601](https://github.com/invertase/notifee/issues/601), [#1063](https://github.com/invertase/notifee/issues/1063), and [#991](https://github.com/invertase/notifee/issues/991) to the fork releases that resolved them (9.1.12 + 9.1.14 + 9.5.0 + 9.6.0 cumulative). Updated the "33 upstream bugs fixed" header counter to 35. Motivation: the upstream repo was archived on April 7, 2026, so README/npm SEO is now the only discovery path for users googling these issues.

## [10.0.0] (2026-04-17)

### Added

- **FCM Mode**: end-to-end Firebase Cloud Messaging integration — a data-only Android payload plus an iOS alert + Notification Service Extension payload, built from a single server call. Introduces `notifee.handleFcmMessage(remoteMessage)` (one-liner client handler), `notifee.setFcmConfig(config)` (optional startup config with `defaultChannelId`, `defaultPressAction`, `fallbackBehavior`, and `ios.suppressForegroundBanner`). See the [FCM Mode guide](/fcm-mode) for the full architecture.
- **Server SDK**: new `react-native-notify-kit/server` subpath export — a zero-runtime-dependency Node.js / Firebase Cloud Functions helper that builds FCM HTTP v1 message payloads. Public API: `buildNotifyKitPayload`, `buildIosApnsPayload`, `buildAndroidPayload`, `serializeNotifeeOptions`. 100% unit-test coverage.
- **CLI `init-nse`**: `npx react-native-notify-kit init-nse` scaffolds an iOS Notification Service Extension target, patching `.pbxproj` and `Podfile` automatically. Ships in the main package — no extra install. Supports `--dry-run`, `--force`, `--target-name`, `--ios-path`, `--bundle-suffix`. Atomic writes with rollback on failure.
- **Package exports**: `packages/react-native/package.json` now declares a formal `exports` map. Public entries: `.`, `./server`, `./jest-mock`, `./react-native.config.js`, `./package.json`.
- **Docs**: new [docs/fcm-mode.mdx](https://github.com/marcocrupi/react-native-notify-kit/blob/main/docs/fcm-mode.mdx) — comprehensive FCM Mode guide covering architecture, server SDK reference, client API reference, iOS NSE setup, Android specifics, payload schema, migration from the manual pattern, troubleshooting, and known limitations.

### Fixed

- **Client**: `handleFcmMessage` filters out iOS attachments with missing/empty `url` instead of propagating to the validator.
- **Client**: `reconstructNotification` emits a `console.warn` when a recognized Android style type (`BIG_TEXT` / `BIG_PICTURE`) is present but the required sub-field is missing.
- **Client**: `setFcmConfig` and `handleFcmMessage` deep-copy the nested `ios` sub-object, preventing caller mutation.
- **CLI**: Podfile patching rolls back atomically when it cannot locate the app target's closing `end`.
- **CLI**: `--bundle-suffix` is validated against `/^\.[A-Za-z0-9\-.]+$/`.
- **CLI**: bundle-ID detection is scoped to the app target's own `buildConfigurationList`, not all targets globally.
- **CLI**: `$(PRODUCT_NAME)` / `$(TARGET_NAME)` variables are expanded when deriving the NSE bundle ID.
- **CLI**: RNFB-style `INFOPLIST_FILE` input path is stripped from the host target after adding the NSE to avoid an Xcode build cycle.
- **CLI**: Swift NSE template uses the correct `with:` selector label when calling `NotifeeExtensionHelper.populateNotificationContent`.
- **iOS**: `RNNotifeeCore.podspec` declares `DEFINES_MODULE = YES` so the NSE target can `import RNNotifeeCore` as a Swift module.

## [9.7.0] (2026-04-15)

### Added

- **android:** `getDisplayedNotifications()` now exposes custom keys from `Notification.extras` as a top-level `data` field on the result, matching iOS behavior. Reserved keys (`android.*`, `google.*`, `gcm.*`, `fcm.*`, `notifee*`, plus `from`, `collapse_key`, `message_type`, `message_id`, `aps`, `fcm_options`) are filtered out. Note: this cannot surface custom `data` for FCM-auto-displayed push notifications because FCM routes those fields exclusively to the tap-action `PendingIntent` — use data-only messages and `notifee.displayNotification()` for full control on Android. (upstream: [invertase/notifee#393](https://github.com/invertase/notifee/issues/393))
- **tests:** `GetDisplayedNotificationsDataTest` — 17 Robolectric tests covering the denylist filter, prefix precision, non-string value coercion, and `fcm_options` exact-match parity.

## [9.6.0] (2026-04-15)

### Fixed

- **android:** fixed `ObjectAlreadyConsumedException: Map already consumed` crash in `HeadlessTask.TaskConfig` when the same `WritableMap` instance is reused across headless events. `TaskConfig.init` now copies the map before mutating it. (upstream: [invertase/notifee#266](https://github.com/invertase/notifee/issues/266))
- **android:** `RebootBroadcastReceiver`, `NotificationAlarmReceiver`, and `AlarmPermissionBroadcastReceiver` now wrap their synchronous section in a try/catch/finally so `PendingResult.finish()` is always called, even when a failure occurs before the async callback is registered. (upstream: [invertase/notifee#734](https://github.com/invertase/notifee/issues/734))
- **android:** stale non-repeating trigger notifications (timestamp in the past at reboot time) no longer become "zombie" alarms that re-fire on every reboot. Within a 24-hour grace period the trigger fires once and the Room row is deleted; beyond the grace period the row is deleted silently. (upstream: [invertase/notifee#734](https://github.com/invertase/notifee/issues/734))

### Added

- **android:** cold-start self-healing for scheduled alarms on OEM devices that suppress `BOOT_COMPLETED` (Xiaomi MIUI, Oppo ColorOS, Huawei EMUI, Vivo FuntouchOS). `InitProvider` reads `Settings.Global.BOOT_COUNT` on every app init and triggers a full alarm reschedule when a boot delta is detected. A process-wide `AtomicBoolean` race guard prevents double-advancement when both `BOOT_COMPLETED` and the cold-start path race. (upstream: [invertase/notifee#734](https://github.com/invertase/notifee/issues/734))
- **android:** regression tests for DAILY/WEEKLY/HOURLY trigger rescheduling, including DST spring-forward and fall-back edge cases. (upstream: [invertase/notifee#839](https://github.com/invertase/notifee/issues/839), [#875](https://github.com/invertase/notifee/issues/875))
- **tooling:** `scripts/smoke-test-734.sh` — composable manual smoke-test harness for #734 covering build, Room DB dump, BOOT_COUNT reads, logcat capture, reboot, state wipe, and the destructive `RebootRecoveryTest` suite (gated behind `--i-know`).
- **docs:** new "OEM Background Restrictions" and expanded "Foreground Service Setup (Android 14+)" sections in the READMEs, plus a new "AlarmType guide" covering `AlarmType.SET_ALARM_CLOCK` — the strongest reliability guarantee Android exposes for a scheduled notification. (upstream: [invertase/notifee#410](https://github.com/invertase/notifee/issues/410), [#655](https://github.com/invertase/notifee/issues/655))

## [9.5.0] (2026-04-14)

### Fixed

- **android:** resolved upstream issue [invertase/notifee#549](https://github.com/invertase/notifee/issues/549) — `cancelTriggerNotifications()` and `createTriggerNotification()` JS Promises resolved before the underlying Room database write completed, causing a race where a cancel-then-create pattern could leave inconsistent state. All five `WorkDataRepository` mutation methods now return `ListenableFuture<Void>` and are chained into the outer future at every call site. Empirical reproduction rate before fix: ~3.3% per attempt, <50 ms window. Post-fix: 0 inconsistencies across 150 attempts.
- **android:** fixed a reboot-recovery data-loss bug surfaced by the read-only caller audit. `NotifeeAlarmManager.rescheduleNotification` (invoked on `BOOT_COMPLETED`) fire-and-forgot the `WorkDataRepository.update(...)` that persists the next-fire timestamp for each recurring alarm. If Android killed the receiver's process before Room drained, the updated anchors were lost and the next reboot rescheduled from stale timestamps. The receiver now collects all per-entity update futures, combines them with `Futures.allAsList`, waits with an 8-second `Futures.withTimeout` ANR safety net, then calls `pendingResult.finish()`.
- **android:** fixed an ordering bug in `NotificationManager.doScheduledWork` where `completer.set(Result.success())` was called before the one-time trigger row was deleted from Room. The delete future now completes first.
- **android:** `NotifeeAlarmManager.displayScheduledNotification` now awaits the Room update / delete before calling `BroadcastReceiver.PendingResult.finish()`.
- **android:** `WorkDataRepository.insertTriggerNotification(...)` helper cleanup — explicit `Context` parameter, removing a fragile dependency on `NotifeeInitProvider` having populated the singleton before the first trigger creation.

### Changed

- **android:** **BEHAVIOR CHANGE** — errors from `WorkDataRepository` mutations (e.g. `SQLiteFullException`, SQLite corruption, schema migration failures) now propagate as rejections on the JS Promises for `cancelTriggerNotifications`, `cancelTriggerNotification`, `createTriggerNotification`, and `cancelAllNotifications(ids)`. Previously these exceptions were silently swallowed.
- **android:** **LATENCY CHANGE** — `cancelTriggerNotifications()` and `createTriggerNotification()` Promises now resolve only after the Room write has completed. On a warm database this adds roughly 5–15 ms on a Pixel 9 Pro XL.

### Added

- **android:** `WorkDataRepositoryFutureContractTest` — JVM unit test (Mockito + `CountDownLatch`) verifying all five mutation methods return non-null futures that only complete after the underlying DAO call has returned. 13 tests.
- **android:** `WorkDataRepositoryRaceTest` — instrumented test under `androidTest/` with 100-iteration race scenarios. Not wired into CI yet; run manually via `./gradlew :react-native-notify-kit:connectedDebugAndroidTest`.
- **tooling:** `scripts/verify-549-fix.sh` — automated 5-run harness verification script that writes `post-fix-549-verification.md` with a strict PASS/FAIL verdict.
- **tooling:** `TriggerRaceTestScreen.tsx` harness emits one compact JSON line per scenario plus a `-DONE` terminator.

## [9.4.0] (2026-04-10)

### Fixed

- **android:** foreground service notifications on Android 12+ (API 31+) were subject to a system-imposed display delay of up to 10 seconds because the library never called `setForegroundServiceBehavior(FOREGROUND_SERVICE_IMMEDIATE)`. This is now set by default when `asForegroundService: true`. Opt out via `foregroundServiceBehavior: AndroidForegroundServiceBehavior.DEFERRED`. (upstream: [invertase/notifee#272](https://github.com/invertase/notifee/issues/272), [invertase/notifee#1242](https://github.com/invertase/notifee/issues/1242))
- **android:** ANR-proofed the foreground service STOP path. When a `ForegroundService` instance receives a STOP intent without `startForeground()` having been called, the service now emits a minimal placeholder via `startForeground()` before `stopSelf()`, preventing `ForegroundServiceDidNotStartInTimeException`. The placeholder is immediately torn down and not visible to the user.
- **android:** reset stale `mCurrentNotification`, `mCurrentHashCode`, and `mCurrentForegroundServiceType` on the foreground service NONE early return path (API 34+).
- **android:** empty `foregroundServiceTypes` arrays that bypass the TypeScript validator (e.g. trigger notifications restored from the Room database after a library upgrade) are now treated as absent at the native layer.
- **android:** `ForegroundService` defensive STOP path fails fast with a clear error message and documentation URL when the consumer's manifest is missing required `foregroundServiceType` declarations on API 34+.
- **android:** `ForegroundService` NONE early return path honors Android's 5-second `startForeground()` contract via the same tracked-boolean defensive pattern as the STOP path.
- **android:** `ForegroundService.stop()` now logs a warning via `Logger.w` when `startService()` throws `IllegalStateException` and falls back to `stopService()`.
- **android:** `getLights()` and `cancelAllNotificationsWithIds()` preserve exception stack traces in their error logs.
- **typescript:** numeric enum validators now correctly reject reverse-mapped string keys across all numeric enum types (`AndroidBadgeIconType`, `AndroidDefaults`, `AndroidFlags`, `AndroidGroupAlertBehavior`, `AndroidImportance`, `AndroidVisibility`, `AndroidForegroundServiceType`, `AndroidForegroundServiceBehavior`, `RepeatFrequency`, `AlarmType`). Previously, strings like `importance: "HIGH"` passed validation but were silently ignored by `Bundle.getInt()`.
- **tests:** `setPlatform` test helper no longer fails silently on repeated calls within a single test block.
- **ios:** `didReceiveNotificationResponse:withCompletionHandler:` now calls the completion handler immediately after emitting the PRESS/ACTION_PRESS event, instead of delaying it by 15 seconds via `dispatch_after`.
- **ios:** `requestPermission:` propagates the `NSError` from `requestAuthorizationWithOptions:completionHandler:` to the JS promise. Previously the error was silently swallowed.
- **ios:** `displayNotification:` and `createTriggerNotification:` now capture and log errors from `contentByUpdatingWithProvider:error:`. On failure, the notification is displayed with the original content rather than potentially nil content.
- **ios:** `getBadgeCount:` calls the completion block with `(nil, 0)` when running in an app extension, preventing the JS promise from hanging.
- **ios:** fixed a race in `NotifeeCoreDelegateHolder.didReceiveNotifeeCoreEvent:` where a notification event could be silently dropped when the weak delegate reference was zeroed while the `delegateRespondsTo` bitfield still indicated it was available. Locked path now checks the resolved delegate for nil and falls back to buffering.
- **ios:** added `@synchronized(self)` guards around all access to `hasListeners` and `pendingCoreEvents` in `NotifeeApiModule.mm`.
- **ios:** replaced placeholder `// update me with logic` comment on the empty `messaging_didReceiveRemoteNotification:` handler with documentation explaining the intent.
- **ios:** Notification Service Extension attachment downloads now cap the `NSURLSession` request and resource timeouts at 25 seconds, leaving a 5-second margin before the NSE budget expires.

### Added

- **android:** new `AndroidForegroundServiceBehavior` enum (`DEFAULT`, `IMMEDIATE`, `DEFERRED`) and `foregroundServiceBehavior` property on `NotificationAndroid`.
- **android:** `android.os.Trace` instrumentation on the foreground service notification path — custom trace sections visible in Perfetto traces.
- **android:** `notifee.prewarmForegroundService()` opt-in API for manual warmup control. Idempotent, safe to call multiple times. Resolves immediately as a no-op on iOS.
- **android:** Baseline Profile shipped in the library AAR covering the foreground service notification cold-start path. AGP 8.3+ merges it automatically.

### Changed

- **android:** `InitProvider` now pre-loads critical foreground service classes and pre-warms the `INotificationManager` Binder proxy on a low-priority background thread during app startup. Opt out via `<meta-data android:name="notifee_init_warmup_enabled" android:value="false" />`.
- **android:** `androidx.profileinstaller:profileinstaller:1.4.1` is now a transitive (`api`) dependency of the library.

## [9.3.0] (2026-04-09)

### Changed

- **android:** `pressAction` now defaults to `{ id: 'default', launchActivity: 'default' }` when omitted. Previously, notifications without an explicit `pressAction` displayed correctly but tapping them did nothing. Apps that want a non-tappable notification can pass `pressAction: null` explicitly. Implemented via a reserved sentinel id (`__NOTIFEE_OPT_OUT__`) at the TS→native boundary.
- **ios:** **BEHAVIOR CHANGE** — `EventType.DELIVERED` is now emitted to `onForegroundEvent` for **all** Notifee-owned notifications displayed in foreground, not just trigger notifications. Previously the `willPresentNotification:` guard suppressed DELIVERED for immediate-display notifications. Android already behaved this way, so this also closes a long-standing iOS/Android asymmetry. DELIVERED emission in `displayNotification:withBlock:` is now gated to non-foreground states. Known limitation: trigger notifications firing in background/killed still do not emit DELIVERED on iOS (platform limitation).

### Fixed

- **android:** fixed `NotificationManager.displayNotification()` producing a tap-less PendingIntent when `pressAction` is absent from the notification bundle. Native path now synthesizes the default press action bundle.
- **ios:** fixed potential loss of notification events at cold start when the RN bridge takes longer than 1 second to initialize. Replaced `dispatch_after(1 sec) + dispatch_once` with an event-driven synchronous flush triggered when `setDelegate:` installs a valid delegate.
- **ios:** corrected error message in `validateIOSPermissions` for the `badge` field (was `'alert' badge a boolean value.`).

### Removed

- Removed unused `.buckconfig` (Buck no longer used by RN since 0.74).
- Removed unused `.flowconfig` (project is TypeScript-only).
- **android:** removed unused EventBus annotation processor and `eventBusIndex` build option.

## [9.2.1] (2026-04-08)

### Fixed

- **ios:** PRESS events from notification taps while the app was in background were incorrectly routed to `onForegroundEvent` instead of `onBackgroundEvent`. Three issues were addressed: a leftover `dispatch_after(1 second)` from the TurboModule migration (9.1.0), an incorrect `== UIApplicationStateBackground` check (iOS reports `Inactive` at the moment of tap — changed to `!= UIApplicationStateActive`), and a main-thread violation where `applicationState` was being read on a background thread. (#5)

## [9.2.0] (2026-04-08)

### Changed

- **android:** **internal architecture change** — collapsed the standalone NotifeeCore AAR into the React Native bridge as a single Android library module. The bundled local Maven repo at `packages/react-native/android/libs/` and the frozen coordinate `app.notifee:core:202108261754` are gone. Core Java sources now live at `packages/react-native/android/src/main/java/app/notifee/core/` and are compiled from source. **No public API changes.** Migration from 9.1.x requires zero code changes.

### Fixed

- **android:** `FAIL_ON_PROJECT_REPOS` rejection on React Native 0.74+. The library no longer injects a Maven repository into the consumer's `rootProject.allprojects`.
- **android:** stale Gradle cache serving outdated bytecode after `yarn upgrade`. With the frozen Maven coordinate gone, the bytecode is rebuilt from source on every consumer build.

## [9.1.22] (2026-04-08)

### Fixed

- **ios:** fixed duplicate symbols linker error when using Notification Service Extension (`$NotifeeExtension = true`) with static frameworks (`use_frameworks! :linkage => :static`). Added `s.exclude_files` in the `$NotifeeExtension` branch of `RNNotifee.podspec` so `NotifeeExtensionHelper.{h,m}` is compiled only by `RNNotifeeCore`.

## [9.1.21] (2026-04-07)

### Changed

- Updated README (root and npm) to reflect upstream archival: the original `invertase/notifee` repository was officially archived on April 7, 2026, and its README now recommends `react-native-notify-kit` as a community-maintained drop-in replacement.

## [9.1.20] (2026-04-07)

### Fixed

- **ios:** `willPresentNotification:` fallback no longer silently drops foreground notifications when no original `UNUserNotificationCenterDelegate` was captured. Previously the fallback path called `completionHandler(UNNotificationPresentationOptionNone)`, which told iOS to display nothing. It now returns the platform default presentation options (banner, sound, list, badge on iOS 14+). Affects apps using `react-native-notify-kit` without a library that also sets a `UNUserNotificationCenter` delegate — e.g. apps without `@react-native-firebase/messaging`, or apps using a different push provider. Apps using RN Firebase are unaffected.
- **ios:** resolved upstream issue [invertase/notifee#828](https://github.com/invertase/notifee/issues/828) — "All notifications are dismissed when the app is opened". Verified on a real device with four FCM pushes sent in sequence; all four remained after app tap and backgrounding.

## [9.1.19] (2026-04-07)

### Fixed

- **android:** `pressAction.launchActivity` now defaults to `'default'` at the native layer when `pressAction.id === 'default'` and `launchActivity` is not explicitly set. Closes a gap where native code paths bypassing the JS validator (trigger notifications restored from Room after reboot, headless tasks, future bridge changes) could reach native with `launchActivity` unset. No user-facing behavior change for apps using the standard JS API.
- **android:** fixed a pre-existing upstream bug in `NotificationPendingIntent` where String comparisons on line 155-157 used `!=` (reference equality) instead of `.equals()`. Dormant before this release because the null guard above always short-circuited — surfaced by the new native-layer default for `launchActivity`.

## [9.1.18] (2026-04-07)

### Fixed

- **android:** fixed `AbstractMethodError` on `RoomDatabase.createOpenHelper` when consumer apps resolved `androidx.room:room-runtime` < 2.6.0. Root cause: the core AAR's Maven POM was empty (published via raw `artifact()` instead of `from(components.release)`), so Room and all other core dependencies were invisible to Gradle dependency resolution. The fix:
  - Core AAR publishes a proper POM via `from(components.release)` with `android.publishing.singleVariant("release")`, exposing Room 2.8.4 and all runtime dependencies.
  - React Native bridge module declares `room-runtime:2.8.4`, `sqlite:2.6.2`, and `sqlite-framework:2.6.2` as `api` dependencies.
  - Fixed `fresco` incorrectly scoped as `api` in core `build.gradle` — changed to `implementation`.
  - Aligned `guava` (33.3.1 → 33.5.0) and `work-runtime` (2.8.0 → 2.11.1) versions between core and bridge.

  **Note for consumers with custom dependency pinning:** the core AAR POM now exposes its runtime dependencies. If you have `resolutionStrategy.force` or `strictly` constraints on any of these, verify compatibility after upgrading.

## [9.1.17] (2026-04-06)

### Changed

- Softened tone in "Why this fork" README section.
- Added Trademark Notice section to README.

## [9.1.16] (2026-04-06)

### Changed

- Synced npm README with changelog formatting updates.

## [9.1.15] (2026-04-06)

### Changed

- **android:** update Room 2.5.0 → 2.8.4, WorkManager 2.8.0 → 2.11.1, Guava 33.3.1 → 33.5.0.
- **android:** cleaned up ProGuard rules — removed redundant entries, consolidated keep rules, suppressed pre-existing build warnings with targeted `@SuppressWarnings` annotations.
- **android:** fixed raw `Class` type usage in `NotificationManager` (now `Class<?>`).
- **ios:** align NotifeeCore Xcode project deployment target from iOS 10.0 to iOS 15.1, matching the podspec.

### Fixed

- **android:** fixed ProGuard keep rules using `{ <init>(...); }` (constructor-only) instead of `{ *; }` (all members) — classes annotated with `@Keep` or `@KeepForSdk` could have non-constructor members stripped by R8.
- **android:** fixed WakeLock leak in `PowerManagerUtils.lightUpScreenIfNeeded` — `acquire()` without timeout or `release()` prevented the device from sleeping; now uses `acquire(3000L)`.
- **android:** fixed potential NPE in `NotificationAndroidModel.getDefaults` when the `defaults` array is present but empty.
- **android:** added `-keeppackagenames app.notifee.core.**` to ProGuard rules to prevent `-repackageclasses` from relocating `InitProvider` and sub-package classes.
- **android:** fixed missing `return` after null context check in `IntentUtils.startActivityOnUiThread`.

## [9.1.14] (2026-04-06)

### Changed

- **android:** `ongoing` now defaults to `true` when `asForegroundService: true` and `ongoing` is not explicitly set. Prevents foreground service notifications from being dismissed on Android 13, matching pre-Android 13 behavior. (upstream: [invertase/notifee#1248](https://github.com/invertase/notifee/issues/1248))
- **android:** on Android 14+, foreground service notifications are automatically re-posted when dismissed by the user. Android 14 ignores `FLAG_ONGOING_EVENT` for most foreground service types (except `mediaPlayback`, `phoneCall`, and enterprise DPC); the library detects the dismissal and immediately re-displays the notification. (upstream: [invertase/notifee#1248](https://github.com/invertase/notifee/issues/1248))

### Fixed

- **android:** fixed DST (daylight saving time) shifting repeating notifications by ±1 hour — replaced fixed-millisecond arithmetic with `Calendar.add()`. (upstream: [invertase/notifee#875](https://github.com/invertase/notifee/issues/875))
- **android:** fixed repeating trigger timestamp not persisted to database after recalculation — after reboot, notifications could fire at stale times.

## [9.1.13] (2026-04-05)

### Changed

- **android:** **BREAKING** — removed hardcoded `foregroundServiceType="shortService"` from the library's `AndroidManifest.xml`. Apps using `asForegroundService: true` on Android 14+ must now declare their own `foregroundServiceType` on `app.notifee.core.ForegroundService` in their app manifest. See the "Foreground Service Setup" section in the README for migration instructions. (upstream: [invertase/notifee#1108](https://github.com/invertase/notifee/issues/1108))

### Fixed

- **android:** implemented `onTimeout(int)` (API 34) and `onTimeout(int, int)` (API 35+) in `ForegroundService` to gracefully stop the service when Android's foreground service timeout fires. Previously the missing handler caused an ANR crash when using `shortService`. (upstream: [invertase/notifee#703](https://github.com/invertase/notifee/issues/703))
- **android:** added early abort with clear error logging when `foregroundServiceType` is not declared on Android 14+, preventing Android's cryptic `MissingForegroundServiceTypeException` crash.
- **android:** fixed bitwise `&` used instead of logical `&&` in `ForegroundService.onStartCommand()` null check.
- **android:** replaced deprecated `stopForeground(boolean)` with `stopForeground(STOP_FOREGROUND_REMOVE)` on API 33+ via compat helper.
- **android:** added `synchronized` blocks around `ForegroundService` static field cleanup to prevent races between the STOP handler, headless task completion callback, and `onTimeout()` paths.
- **android:** `ForegroundService.onTimeout()` now emits a `TYPE_FG_TIMEOUT` (9) event via `EventBus` with the notification data, `startId`, and `fgsType` — previously the service died silently with no event reaching JS.

## [9.1.12] (2026-04-05)

### Changed

- **android:** changed default AlarmType from `SET_EXACT` to `SET_EXACT_AND_ALLOW_WHILE_IDLE` for better Doze mode compatibility. (upstream: [invertase/notifee#961](https://github.com/invertase/notifee/issues/961))
- **android:** AlarmManager is now the default backend for trigger notifications instead of WorkManager, ensuring reliable delivery when the app is killed. Developers can opt out with `alarmManager: false` in the trigger config. (upstream: [invertase/notifee#961](https://github.com/invertase/notifee/issues/961))

### Fixed — Android

- fixed `getNotificationSettings()` returning `DENIED` instead of `NOT_DETERMINED` on Android 13+ before the user has responded to the `POST_NOTIFICATIONS` permission dialog — now uses `SharedPreferences` to track whether `requestPermission()` has been called. (upstream: [invertase/notifee#1237](https://github.com/invertase/notifee/issues/1237))
- fixed trigger notifications not firing on Android 14-15 when app is killed — added `goAsync()` to `NotificationAlarmReceiver`, `RebootBroadcastReceiver`, and `AlarmPermissionBroadcastReceiver`. (upstream: [invertase/notifee#1100](https://github.com/invertase/notifee/issues/1100))
- fixed `ContextHolder` not initialized in `NotificationAlarmReceiver`, causing potential `NullPointerException` on OEM Android 14+ implementations.
- fixed `SCHEDULE_EXACT_ALARM` permission denial silently dropping scheduled alarms — now falls back to inexact alarm via `setAndAllowWhileIdle` with a warning log.
- added `SecurityException` catch around `AlarmManager` scheduling — if exact alarm permission is revoked between check and call, falls back to inexact alarm instead of crashing.
- fixed potential NPE in alarm scheduling when `PendingIntent` creation fails.
- fixed `getInitialNotification()` returning `null` when notification has no `pressAction` configured — `InitialNotificationEvent` sticky event is now posted regardless. (upstream: [invertase/notifee#1128](https://github.com/invertase/notifee/issues/1128))
- added event buffering in `NotifeeReactUtils` to prevent foreground press events from being silently dropped when the React instance is not yet ready. (upstream: [invertase/notifee#1279](https://github.com/invertase/notifee/issues/1279))
- fixed `AlarmType.SET` using `RTC` instead of `RTC_WAKEUP`, which prevented the device from waking to show the notification. (upstream: [invertase/notifee#961](https://github.com/invertase/notifee/issues/961))

### Fixed — iOS

- fixed `getInitialNotification()` returning `null` on cold start due to deprecated `UIApplicationLaunchOptionsLocalNotificationKey` check. (upstream: [invertase/notifee#1128](https://github.com/invertase/notifee/issues/1128))
- added `setNotificationConfig({ ios: { handleRemoteNotifications: false } })` opt-out flag to prevent Notifee from intercepting remote notification tap handlers — restores `onNotificationOpenedApp()` and `getInitialNotification()` for React Native Firebase Messaging. (upstream: [invertase/notifee#912](https://github.com/invertase/notifee/issues/912))
- fixed `completionHandler` not being called on notification dismiss path in `didReceiveNotificationResponse:`, preventing potential handler leaks.
- fixed `completionHandler` not being called in `willPresentNotification:` fallback path when no original delegate is available.
- added missing `return` after forwarding to `_originalDelegate` in `didReceiveNotificationResponse:`.

## [9.1.11] (2026-04-04)

### Fixed

- fixed Maven metadata checksums for published Android artifacts.

### Added

- added compatibility section to README documenting supported React Native versions.

## [9.1.10] (2026-04-04)

### Fixed

- fixed Maven metadata checksums for published Android artifacts.
- aligned package LICENSE with root repository LICENSE.

## [9.1.9] (2026-04-04)

### Changed

- Renamed package from `@notifee/react-native` to `react-native-notify-kit` across all source, configs, and documentation.
- **android:** replaced deprecated Kotlin APIs with current equivalents — `currentActivity` → `getCurrentActivity()`, `TurboReactPackage` → `BaseReactPackage`, `hasActiveCatalystInstance()` → `hasActiveReactInstance()`.
- Moved Jest tests from `tests_react_native/` into `packages/react-native/__tests__/`.
- Renamed `tests_react_native_new/` to `apps/smoke/`.
- Simplified GitHub Actions CI by removing stale workflows.

### Fixed

- Removed `--provenance` flag from `publishConfig` to allow local `npm publish`.
- Excluded test files from root `tsconfig.json` and fixed lint formatting.

### Removed

- Removed `notifee_platform_interface` package and its associated tests and dependencies (Flutter support dropped).

## [9.1.8-rn084.0] (2026-03-30)

Initial fork release targeting React Native 0.84 with TurboModule (JSI) architecture.

### Added

- **android:** migrated React Native bridge from legacy NativeModule to Kotlin TurboModule with JSI bindings.
- **ios:** migrated React Native bridge from legacy NativeModule to TurboModule with JSI bindings.
- Added React Native 0.84 smoke-test app with updated Jest configuration.

## [9.1.8](https://github.com/invertase/notifee/compare/@notifee/react-native@9.1.7...@notifee/react-native@9.1.8) (2024-12-20)

### Bug Fixes

- **android:** prevent headless task double-invocation ([a799167](https://github.com/marcocrupi/react-native-notify-kit/commit/a79916748f53ea7cdd66d60ba9054472aabc050b))

## [9.1.7](https://github.com/invertase/notifee/compare/@notifee/react-native@9.1.6...@notifee/react-native@9.1.7) (2024-12-17)

### Bug Fixes

- **ios:** copy iOS NotifeeCore library more carefully during build ([68f230f](https://github.com/marcocrupi/react-native-notify-kit/commit/68f230f32ec75e993521b0feb8f9358fb008d3e5))

## [9.1.6](https://github.com/invertase/notifee/compare/@notifee/react-native@9.1.5...@notifee/react-native@9.1.6) (2024-12-17)

### Bug Fixes

- **android:** remove semantic-release test commit ([0b4ecdf](https://github.com/marcocrupi/react-native-notify-kit/commit/0b4ecdf30f7336f4bcfb8b25a07b0044a2943504))

## [9.1.5](https://github.com/invertase/notifee/compare/@notifee/react-native@9.1.4...@notifee/react-native@9.1.5) (2024-12-17)

### Bug Fixes

- **android:** semantic-release test commit ([cf5c7a9](https://github.com/marcocrupi/react-native-notify-kit/commit/cf5c7a9b5b9c14046ffa6e5ea04c54157e9aff42))

## 9.1.4

- fix(android): fix another new architecture issue via elimination of race condition between headlessJS task and react-native background startup that resulted in null ReactContext (#1176)

## 9.1.3

- fix(android): preserve new-arch classnames used in backwards-compat logic (#1149 special credit to @mbpictures)

This fixes Notifee when used in react-native 0.76 in new architecture + release mode when
used in an android background headlessJS context

## 9.1.2

This the minimum version that supports upcoming react-native 0.76 by default.

Older notifee versions will only work if you disable disable New Architecture / disable bridgless mode

- fix(android): forward-port getReactContext to new arch bridgeless mode (#1127 Thanks @Eclipses-Saros!)
- fix(jest): add missing createChannels method to official mock definitions (#1123)
- docs(android): clarify foregroundServiceType AndroidManifest example

## 9.1.1

- fix(android): add guava transitive dep to module deps (#1116)

## 9.1.0

Notifee no longer uses the GMS libraries and thus should be compatible
with open source distribution channels like F-Droid now. Thanks @meypod!

- feat(android): Remove all gms usages and use guava instead (#510)
- test(ci, ios): simplify simulator / app interaction
- test(ci, ios): try more powerful runner, possible de-flake
- test(ci, ios): allow more time for e2e test

## 9.0.3

- fix(ios): use new icon badge APIs / correctly clear badge
- test(ci): use current path to ccache
- test(ci, ios): increase yarn install timeout to stop flakes
- test(ios): commit current pod lockfile
- style(lint, ios): fix various lint warnings
- style(lint): clean up warnings from `yarn validate:all:js`
- test(ci): use iPhone 16 now, 15 does not exist for Xcode 16
- test(ci): use hashFiles with specific paths vs globs
- docs: fix typo "AlarmManger" to "AlarmManager" (#1101)

## 9.0.2

- fix(android): rn74 compatibility support invalidate alongside deprecated onCatalystInstanceDestroy

## 9.0.1

improperly released, 9.0.2 released immediately after

## 9.0.0

BREAKING CHANGES!

Android 14+ requires two changes to avoid crashes or Play Store rejection

1. The USE_FULL_SCREEN_INTENT permission is not longer included by default as most apps do not need it. If you need it you must now manually add the permission to AndroidManifest.xml

2. Foreground Service Types are a strict requirement for Android 14 and require Play Store approval. You must use compileSdk 34 or higher for this release. If you need foreground service types you will need to specify the exact foreground service type permissions in your AndroidManifest.xml and you must replace the service definition in AndroidManifest.xml and you must use the new optional foregroundServiceTypes parameter in the foreground service API call

Thanks to all the contributors that proposed these fixes so that Notifee continues to work well on Android 14 - handling the platform security changes as Google makes new releases is not easy, and they _always_ change the Nofitication API surface API. Notifee would not work without the community contributions.

Note, v8.0.0 was published 2 years ago as an alpha on npmjs.com but is unused. However, the version number was consumed by that alpha publish so we have skipped to v9.

- fix(android)!: Remove USE_FULL_SCREEN_INTENT permission from package manifest for Android 14 compat (#1027)
- feat(android)!: allow adding foreground service types dynamically
- feat(android): add Android 15 FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
- fix(types): add cancelAllNotifications optional android tag property (#1087)
- build(android): minimal set of changes for compileSdk 34
- test(lint): check native code formatting in CI
- style(lint): result of auto-formatting `yarn format:all`
- style(lint): constrain formatting globs, add formatting check run scripts
- docs(android): note apps must now manually add USE_FULL_SCREEN_INTENT if needed

## 8.0.0

Unreleased

alpha publish from 2022, never made non-alpha, never in use, but version number
consumed

## 7.9.0

- feat: group support to communication push [#1017](https://github.com/invertase/notifee/issues/1017)
- fix(iOS): Allow the original delegate to handle non-Notifee notifications first [#985](https://github.com/invertase/notifee/issues/985)
- fix: Remove EventSubcriptionVendor type usage as it's removed in RN0.73 [#1001](https://github.com/invertase/notifee/issues/1001)
- fix(android): fix an issue when using inexact alarms [#981](https://github.com/invertase/notifee/issues/981)
- style(lint): fix lint errors from previous commits [#1073](https://github.com/invertase/notifee/issues/1073)
  q- test(ci, ios): ios build behaving strangely - tune timeouts
- test(example): minimum changes to get example working
- test(ci): remove log compression pre-artifact upload
- test(ci): use codecov action vs bash uploader
- test(ci, ios): switch to macos-14 / apple silicon, iPhone 14
- test(ci, android): use ubuntu+nested-virt+reactive-circus for emulator tests
- test(ci): forward port from GITHUB_OUTPUT vs set-output
- test(ci): bump actions to current versions
- test(ci): use github built-in concurrency controls
- style(lint): ignore pubspec.lock files when looking for changes
- test(android): two alarm manager tests hanging
- build(deps, ios): Podfile.lock version bumps in test app
- build(deps): yarn includes information about itself in package.json
- docs(CONTRIBUTING): auto tag for gh release, point to repo for changelog

## 7.8.2

- Fix packaging error / missing `dist/version.js` [#934](https://github.com/invertase/notifee/issues/934)

## 7.8.1

- **[Android]**: Fix compatibility with android-gradle-plugin 8 (reat-native 0.73+) [#907](https://github.com/invertase/notifee/pull/907)
- Dev and Test: lots of CI and test updates so all checks are green again and current versions of developer tools work while developing in the repository

## 7.8.0

- **[Android]**: Adds the ability to create all types of alarms with Android, affects the `TimestampTriggerAlarmManager` API type and deprecates property `allowWhileIdle` (Addresses issue [#655)](https://github.com/invertase/notifee/issues/655))).
- **[iOS]**: Fixes an issue where the UI thread was getting blocked when creating a notification with attachments (Fixes [#234)](https://github.com/invertase/notifee/issues/234))).
- **[Android/iOS]: BREAKING CHANGE**: For Expo, there is no config plugin anymore, please remove the plugin from `app.config.js` (See issue [#799](https://github.com/invertase/notifee/issues/799) for more info).

## 7.7.1

- **[iOS]**: Adds image caching for the avatar for Communication Notifications (PR [#742)](https://github.com/invertase/notifee/pull/742))).

## 7.7.0

- **[Android]**: Fixes an issue with foreground `PRESS` event being treated as a background event (Fixes [#621](https://github.com/invertase/notifee/issues/621)).
- **[Android]**: Fixes an issue where the event details of a notification were incorrect and were from another notification (Fixes [#637](https://github.com/invertase/notifee/issues/637) and [#651](https://github.com/invertase/notifee/issues/651)).

## 7.6.1

- No changes, used to force `npm` registry to update for the previous version to appear.

## 7.6.0

- **[Android]**: Fixes an issue with interval triggers firing immediately (Fixes [#696](https://github.com/invertase/notifee/issues/696)).
- **[Android]**: Fixes an issue with progress notification with `indeterminate` set to `true` (Fixes [#682](https://github.com/invertase/notifee/issues/682)).
- **[Android]**: Android flag `Flag_NO_CLEAR` is now supported but can get the same behaviour with `ongoing` set to `true` (Fixes [#674](https://github.com/invertase/notifee/issues/674)).
- **[Android/iOS]**: Fixes a ts error with latest React Native version 0.71+ (Fixes [#708](https://github.com/invertase/notifee/issues/708)).
- **[Android]**: Fixes an issue where if `autoCancel` is set to `false`, for Android actions this was ignored for Android 12 and above (Fixes [#697](https://github.com/invertase/notifee/issues/697)).
- **[Android]**: Remove unused android dependenecy `okhttp3` which was reported to have been causing a problem (Fixes [#699](https://github.com/invertase/notifee/issues/699)).

## 7.5.0

- **[Android]**: Updates the Android EventBus dependency to comply with the Google Play Store requirements (Fixes [#668](https://github.com/invertase/notifee/issues/668)).

## 7.4.0

- **[Android]**: Fixes an issue when setting a custom launchActivity to ensure the correct activity is launched when a notification is pressed when app is closed (Fixes [#646](https://github.com/invertase/notifee/issues/646)).
- **[Android]**: Fixes an issue with Android `lights` when parsing colors as strings for trigger notifications (Fixes [#618](https://github.com/invertase/notifee/issues/618)).
- **[Android]**: Fixes an issue with jest mock where some mocks were not returning the correct type (Fixes [#636](https://github.com/invertase/notifee/issues/636)).
- **[Android]**: Adds a new `TYPE_FG_ALREADY_EXIST` event type for foreground services (PR [#634](https://github.com/invertase/notifee/pull/634)).
- **[iOS]**: Removes a debug console.log statement that was commited to the main branch (PR [#617](https://github.com/invertase/notifee/pull/617)).

## 7.3.0

- **[Android]**: Fixes an issue for Android 11 and lower to ensure notification drawer is closed when a quick action is pressed. (Fixes [#614](https://github.com/invertase/notifee/issues/614)).
- **[Android]**: Fixes an issue where the initial notification was not set if the app opened via a quick action (PR [#605](https://github.com/invertase/notifee/pull/605)).

## 7.2.0

- **[Android]**: Fixes an issue for Android 12 with quick actions when the app is in the background (Fixes [#404](https://github.com/invertase/notifee/issues/404)).
- **[Android]**: Prevents a NullPointerException to occur when a background service is triggered (Fixes [#592](https://github.com/invertase/notifee/issues/592)).

## 7.1.0

- **[iOS]**: Supports communication notifications on iOS (PR [#526](https://github.com/invertase/notifee/pull/526)).

## 7.0.4

- **[Android]**: Fixes an issue when calling requestPermissions for Android 12 or lower (Fixes [#555](https://github.com/invertase/notifee/issues/555)).

## 7.0.3

- **[Android]**: Fixes an issue that was introduced in v6.0.0 to support targetSdkVersion 33 (Fixes [#547](https://github.com/invertase/notifee/issues/547)).

## 7.0.1

- **[Android]**: Fixes an issue that was introduced in v6.0.0 (Fixes [#528](https://github.com/invertase/notifee/issues/528)).

## 7.0.0

- **[iOS]: BREAKING CHANGE**: Notifee now handles response events (PRESSED, ACTION_PRESSED, DISMISSED) for remote notifications on iOS (PR [#236](https://github.com/invertase/notifee/pull/236)).
  - This allows quick actions from remote notifications to be supported without the need of a NSE [[Learn More]](https://notifee.app/react-native/docs/ios/remote-notification-support)

  **`onNotificationOpenedApp` and `getInitialNotification` from `RNFB Messaging` will no longer trigger as notifee will handle the event. Should not require any code changes to these `RNFB` event handlers, as events on Android will continue to work as normal**

## 6.0.0

- **[Android] BREAKING CHANGE**: Added support for requesting permission on Android 13 via `requestPermission`, the minimum compileSdkVersion required has increased to 33. And, to support this feature, the targetSdkVersion must also be increased to 33.

## 5.7.0

- **[iOS]**: Adds new `interruptionLevel` property to `NotificationIOS` which provides the option to display time-sensitive notifications (Fixes [#287](https://github.com/invertase/notifee/issues/287)).

## 5.6.0

- **[Android]**: Adds new `loopSound` and `flags` properties to `NotificationAndroid` to support custom flags and to loop the sound when a push notification is displayed (Fixes [#454](https://github.com/invertase/notifee/issues/454)).

## 5.5.0

- **[Android]**: Fixes a compile issue for monorepos where sometimes `app.notifee:core:+` cannot be found (Fixes [#350](https://github.com/invertase/notifee/issues/350)).
- **[iOS]**: Adds new `list` and `banner` options to `IOSForegroundPresentationOptions` on iOS. These new options should be used as a replacement for the `alert` option which is now deprecated in notifee; notifee will fallback to using Apple's `UNNotificationPresentationOptionAlert` option for iOS 13 when either `banner` or `list` is set to true. There are no breaking changes, but we encourage you to update your project as soon as you can if you set custom `IOSForegroundPresentationOptions`. To learn more, view the [Foreground Notifications](/react-native/ios/appearance#foreground-notifications) documentation (Enhancement [#382](https://github.com/invertase/notifee/issues/382)).

## 5.4.1

- **[Android]**: Fixes an issue when creating a one-time trigger notifications with AlarmManager (Fixes [#445](https://github.com/invertase/notifee/issues/445)).

## 5.4.0

- **[Android]**: Fixes an issue when recreating the trigger notifications after a reboot with AlarmManager (Fixes [#422](https://github.com/invertase/notifee/issues/422)).
- **[Android]**: Fixes an issue around displaying a heads-up notification on Xiaomi devices by adding the permission `ACCESS_NOTIFICATION_POLICY` to the `AndroidManifest` (Fixes [#296](https://github.com/invertase/notifee/issues/296)).

## 5.3.0

- **[Android]**: Elimates the need to add the local maven repository manually to your project (PR [#414](https://github.com/invertase/notifee/pull/414)).
- **[Android]**: Implements support to light up the screen when a notification is displayed. Introduces a new property `lightUpScreen` on the `NotificationAndroid` interface (PR [#403](https://github.com/invertase/notifee/pull/403)).

## 5.2.2

- **[Android]**: Allows `repeatFrequency` to be set to -1 when creating notifications (Fixes [#384](https://github.com/invertase/notifee/issues/379)).
- **[Android]**: Fixes an issue with rescheduling notifications with alarm manager (Fixes [#384](https://github.com/invertase/notifee/issues/248)).

## 5.2.1

- **[Android]**: Fixes a build issue introduced in version 5.2.0 (PR [#384](https://github.com/invertase/notifee/pull/384)).

## 5.2.0

- **[Android]**: Fixes a compiling issue for some project configurations with error message "Project with path ':app' could not be found in project ':notifee_react-native'" (Fixes [#288](https://github.com/invertase/notifee/issues/288)).
- **[Android]**: Fixes an issue where the current version of Notifee does not build when using an expo managed app with the expo plugin (Fixes [#314](https://github.com/invertase/notifee/issues/314)).
- **[Web]**: Basic support for react-native-web - notifications do not work on web yet, but the package is now compatible with web (PR [#369](https://github.com/invertase/notifee/pull/369))

## 5.1.0

- **[Android]**: Introduces new APIs to help manage Android 12 limitations when creating trigger notifications:
- `canScheduleExactAlarms`
- `openAlarmPermissionSettings`

And, the ability to check if your app has permissions to create trigger notifications by calling `getNotificationSettings()`.

To learn more, see Triggers documentation for [Android](https://notifee.app/react-native/docs/triggers#android-12-limitations).

## 5.0.3

- **[Android]**: Fixes an issue when canceling trigger notifications created via AlarmManager to prevent "Maximum limit of concurrent alarms 500 reached for uid" error being thrown (Fixes [#349](https://github.com/invertase/notifee/issues/349)).

## 5.0.2

- **[iOS]**: Fixes an issue with `NotificationSettings` returning the wrong property name for `authorizationStatus` on iOS (Fixes [#333](https://github.com/invertase/notifee/issues/333)).

## 5.0.1

- **[Android]**: Fixes an issue where quick actions always opens the app on Android 12 (Fixes [#315](https://github.com/invertase/notifee/issues/315)).
- **[Android]**: Fixes an issue where a quick action with an id of `default` failed to open the app.

## 5.0.0

- **[Android/iOS] BREAKING CHANGE**: Added support for checking permissions on Android which introduces a breaking change to `requestPermission` and `getNotificationSettings` APIs.

Both APIs have been updated to return an object of type `NotificationSettings`, in replace of `NotificationSettingsIOS`.

`NotificationSettings` consists of two properties `authorizationStatus` and `ios`, where `ios` is a nested object of type `NotificationSettingsIOS`.

To learn more, see Permissions documentation for [iOS](https://notifee.app/react-native/docs/ios/permissions), and [Android](https://notifee.app/react-native/docs/android/permissions).

## 4.1.0

- **[Android]**: Add support to set `largeIcon` for `AndroidStyle.BIGPICTURE` to null (Fixes [#270](https://github.com/invertase/notifee/issues/270))
- **[Android]**: Fixes an issue with Android 12 when tapping on a notification (Fixes [#250](https://github.com/invertase/notifee/issues/250))
- **[Android]**: Fixes an issue when an action is pressed where the notification drawer would remain open with the notification (Fixes [#268](https://github.com/invertase/notifee/issues/268))

## 4.0.1

- **[Android]**: Fixes an issue with repeating trigger notifications where the next notification was scheduled at the incorrect time, causing the notification to infinitely display (Fixes [#252](https://github.com/invertase/notifee/issues/252)).

## 4.0.0

- **[Android]: BREAKING CHANGE** : the minimum compileSdkVersion required has increased to 31, to fix an issue with Android 12 where the app will crash due to a missing Intent immutability flag (Fixes [#238](https://github.com/invertase/notifee/issues/238)). You do not need to alter targetSdkVersion or anything else - but you _must_ increase compileSdkVersion to 31. **Please note, JDK11 is strongly recommended when using compile or target sdk 31**. **Please note, we do not correctly handle the new "exact alarm" Android 12 restrictions so we recommend staying on targetSdkVersion 30 for now.**

## 3.0.4

- **[Android]**: Fixes an issue with buildtools to support gradle plugin 4.2+ (Fixes [#211](https://github.com/invertase/notifee/issues/211))
- **[iOS]**: Fixes an issue that was introduced in the previous patch when calling `setBadgeCount` with 0 (Fixes [#212](https://github.com/invertase/notifee/issues/212))

## 3.0.3

- **[iOS]**: Fix iOS API availability guards, and all compile warnings (Fixes [#204](https://github.com/invertase/notifee/issues/204))

## 3.0.2

- **[Android]**: Include support for expo managed projects [[Learn More]](/react-native/installation#miscellaneous)]
- **[Android]**: Adds support for Android 12

## 3.0.1

- **[Android]**: Fixes an issue where the wrong quick action was triggered when fired in quick succession (Fixes [#121](https://github.com/invertase/notifee/issues/121))
- **[Android]**: Fixes an issue where notifications created by FCM were not being removed from the notification tray when cancelled (Fixes [#120](https://github.com/invertase/notifee/issues/120))
- **[iOS]**: Compiled module no longer depends on a XCFramework, as part of the migration to fully open source the library. [[Learn More]](https://invertase.io/blog/open-sourcing-notifee)

## 3.0.0

- **[Android]: BREAKING CHANGE** - the minimum SDK version has been updated from 16 to 20, providing backwards notification compatibility up to Android 4.4W.
- **[Android]**: Fixes an issue with `getDisplayedNotifications` where the id returned is not the original notification id. (Fixes [#381](https://github.com/notifee/react-native-notifee/issues/381))
- **[Android]**: Fixes an issue with displaying a notification with `android.tag` (Fixes [#382](https://github.com/notifee/react-native-notifee/issues/382))
- **[Android]**: Introduces support to cancel a notification with a `tag`
- Removed licensing validation and related code - Notifee is now free and fully open source. [[Learn More]](https://invertase.io/blog/open-sourcing-notifee)

## 2.0.0

- **[Android]: BREAKING CHANGE** - you must add a new maven local repository to your `android/build.gradle` file. (Fixes [#151](https://github.com/notifee/react-native-notifee/issues/151)). See step #2 in [the installation guide](https://notifee.app/react-native/docs/installation)

## 1.11.0

- **[Android]**: Fixes an issue where `getInitialNotification` was sometimes throwing an error leading to a crash if activity was null. (Fixes [#374](https://github.com/notifee/react-native-notifee/issues/374))

## 1.11.0

- **[Android]**: Fixes an issue where the initial notification wasn't being populated for full-screen actions.
- **[iOS]**: Introduces a new method signature for `NotifeeExtensionHelper.populateNotificationContent` where the `request` is passed down as well as the `bestAttemptContent`. View the [Remote Notification Support](https://notifee.app/react-native/docs/ios/remote-notification-support) documentation for more information.
- **[iOS]**: Adds a note in the reference documentation that `getInitialNotification()` for iOS is deprecated in favour of `onForegroundEvent`.

## 1.10.1

- **[Android]**: Fixes an issue on Android to prevent `cancelDisplayedNotifications` cancelling trigger notifications. (Fixes [#349](https://github.com/notifee/react-native-notifee/issues/349))

## 1.10.0

- **[Android/iOS]**: Introduces the following APIs:
  - `getDisplayedNotifications`
  - `getTriggerNotifications`
  - `isChannelBlocked`
  - `isChannelCreated`
  - `cancelAllNotifications(ids)`
  - `cancelDisplayedNotifications(ids)`
  - `cancelTriggerNotifications(ids)`
- **BREAKING**: Fixes an issue when setting a custom sound on a notification channel (Fixes [#341](https://github.com/notifee/react-native-notifee/issues/341)). Sounds now must be specified without the file extension, previously it was optional. **If you were using custom sounds on Android>7 prior to this, you will need to create a _new_ notification channel or the reference to your custom sound on the channel will likely not survive app updates. We apologize for the inconvenience**

## 1.9.2

- **[Android]**: Fixes an issue where an error is thrown when the intent was null in rare cases for foreground service events.

## 1.9.1

- **[Android]**: Fixes an issue where an error is thrown when using trigger notifications with AlarmManager on Android 8 & 7

## 1.9.0

- **[Android]**: Support Alarm Manager for trigger notifications.
- **[iOS]**: Xcode 12.4 and above is now supported

## 1.8.1

- **[Android/iOS]**: Fix npm bundle to exclude example app

## 1.8.0

- **[Android/iOS]**: Include support for jest tests by including a `jest-mock.js` file.
- **[Android]**: Add an extra safety check to prevent app from crashing if a `launchActivity` property is set to an invalid activity class.

## 1.7.0

- **[Android/iOS]**: Allows title, body, and subtitle to be set to undefined in addition to string values to prevent an empty space on Android.
- **[Android/iOS]**: Updated validation to only throw an error for platform-specific properties if the app is running the same platform (Feature enhancement [#297](https://github.com/notifee/react-native-notifee/issues/297)).
- **[iOS]**: Xcode 12.5 is required on iOS.

## 1.6.0

- **[Android]**: Fixed an issue with jwt gradle build dependency.

## 1.5.0

- **[Android]**: Implemented support for `notifee.hideNotificationDrawer` (Feature enhancement [#200](https://github.com/notifee/react-native-notifee/issues/200)).

## 1.4.0

- **[Android]**: Added support for `fullScreenAction` on `NotificationAndroid` (Feature enhancement [#45](https://github.com/notifee/react-native-notifee/issues/45)).

## 1.3.1

- **[Android]**: Fixed an issue where sometimes the app would throw an exception when the user changes the notification blocked state for either a channel or the entire application (Fixes [#237](https://github.com/notifee/react-native-notifee/issues/237)).

## 1.3.0

- **[Android]**: Fixed an issue where sometimes the foreground service failed to stop when calling `resolve` due to an issue with hot reloading. It can be stopped by `notifee.stopForegroundService()`. To learn more, view the [Foreground Service](/react-native/android/foreground-service) documentation.

## 1.2.1

- **[Android]**: Fixed an issue with Notifee's build script where sometimes an error would occur that the target variant task already existed.

## 1.2.0

- **[iOS]**: Includes a Notification Service Extension Helper to take advantage of Notifee with remote notifications. To learn more, view the [Remote Notification Support](/react-native/ios/remote-notification-support) documentation.

## 1.1.2

- **[iOS]**: Enforce v1.10+ of CocoaPods (Fixes [#230](https://github.com/notifee/react-native-notifee/issues/230)).

## 1.1.1

- **[Android]**: Includes a solution to fix an error due to a potential race condition that occurs when the user changes the notification blocked state for either a channel or the entire application (Fixes [#237](https://github.com/notifee/react-native-notifee/issues/237)).

## 1.1.0

- **[Android]**: Implemented support for `circularLargeIcon` on `NotificationAndroid` (Feature enhancement [#199](https://github.com/notifee/react-native-notifee/issues/199)).
- **[iOS]**: Prevent badge count from clearing notifications from the tray when it reaches 0 (Fixes [#214](https://github.com/notifee/react-native-notifee/issues/214)).

## 1.0.0

- **NOTE**: Version bump.

## 0.16.0

- **[Android]**: Fixed an issue with license validation on Android 6 (Fixes [#87](https://github.com/notifee/react-native-notifee/issues/87))
- **[iOS]**: Added support for Apple Silicon (arm64) and Mac Catalyst builds (Fixes [#162](https://github.com/notifee/react-native-notifee/issues/162), [#215](https://github.com/notifee/react-native-notifee/issues/215))

## 0.15.2

- **[Android]**: Added additional logs to help with debugging license validation issues.
- **[Android/iOS]**: Fixed an issue where sometimes the `NotifeeApiModule` would fail to resolve `this.native` due to the context changing.

## 0.15.1

- **[Android]**: Fixed an issue where sometimes the `largeIcon` wouldn't show when the app is closed.
- **[Android/iOS]**: Fixed an issue to show a more descriptive warning if the background event handler isn't set via `onBackgroundEvent`.

## 0.15.0

- **[Android]**: Implemented additional support to help with background restrictions on Android, includes two new methods `getPowerManagerInfo` and `openPowerManagerSettings`.
- **[Android]**: Fixed an issue with subtitle where the default value was causing two dots on some devices.
- **[Android/iOS]**: Added support to cancel either a displayed or a trigger notification.

## 0.14.0

- **[Android]**: Fixed an issue where `isBatteryOptimizationEnabled` was returning the result as an object instead of a boolean.
- **[Android]**: Fixed an issue where `openBatteryOptimizationSettings` was sometimes throwing an exception for Samsung and Oppo phones on Android versions 6.0.
- **[iOS]**: Fixed an issue when a notification is pressed while the app is in the background on iOS 14, which sometimes would cause the app to crash.

## 0.13.2

- **[Android]**: Fixed an issue where trigger notifications created with v0.12.x and below would cause the app to crash when upgrading to v0.13.x.

## 0.13.1

- **[iOS]**: Added support to handle remote urls for [Attachments](https://notifee.app/react-native/docs/ios/appearance#attachments).
- **[iOS]**: Added iOS support for `repeatFrequency` on `TimestampTrigger`. See [Triggers](https://notifee.app/react-native/docs/triggers).

## 0.13.0

- **[Android]**: Added support for `repeatFrequency` on `TimestampTrigger` to be able to create hourly, daily or weekly trigger notifications. See [Triggers](https://notifee.app/react-native/docs/triggers).
- **[Android]**: Implemented support to help with background restrictions on Android, includes two methods `isBatteryOptimizationEnabled` and `openBatteryOptimizationSettings`. See [Background Restrictions](https://notifee.app/react-native/docs/android/behaviour#background-restrictions).
- **[Android]**: Fixed an issue when creating a trigger notification, where sometimes the input data would reach the maximum number of bytes allowed.

## 0.12.3

- **[Android]**: Fixed an issue where `pressAction` with the `default` id failed to open the app when the notification was pressed.
- **[Android]**: Fixed an issue with gradle plugin 4.1 and `Build.VERSION_NAME` which prevented the app from building.

## 0.12.2

- **[iOS]**: Fixed an issue where the `DELIVERED` foreground event wasn't being sent for trigger notifications.
- **[iOS]**: Fixed an issue with the iOS module that sent events before the JS bundle was ready.

## 0.12.1

- **[iOS]**: Fixed an issue with the iOS module that prevented the library from compiling.

## 0.12.0

- **[Android]**: `lightColor` and `sound` are now returned when calling `getChannel` or `getChannels`.
- **BREAKING**: `TimeTrigger` has been removed, in favour of `TimestampTrigger` and `IntervalTrigger`.
- **[iOS]**: Trigger Notifications are now supported on `iOS`. See [Triggers](https://notifee.app/react-native/docs/triggers).

## 0.11.1

- **[Android]**: Fixed an issue with `cancelNotification` for trigger notifications.
- **[Android]**: Fixed an issue with remote verification on devices less than or equal to 20
- **[iOS]**: Call original delegate when intercepting notification response on iOS

## 0.11.0

- **[Android]**: Add support for Trigger Notifications on Android. See [Triggers](https://notifee.app/react-native/docs/triggers).
- **[Android]**: Fixed an issue with `getChannels` and `getChannelGroups` where the methods were throwing an error
- **[iOS]**: Fixed an issue with iOS 14 where sometimes the app would freeze briefly when receiving an push notification

## 0.10.0

- **[Android]**: Fixed an issue with sounds for Android versions < 8.0 (API level 26)
- **[Android]**: Fixed an issue with `notifee.config.json` where sometimes the script could not find the 'app' gradle project automatically.

## 0.9.0

- **[iOS]**: Add support for iOS `onBackgroundEvent`.
- **[iOS]**: Pool JS events until RN Bridge is ready.
- **[Android]**: Allow multiple `onBackgroundEvent` observers when inside a foreground service task.

## 0.8.0

- **[iOS]**: Add support for iOS notification attachments. See [iOS Attachments](https://notifee.app/react-native/docs/ios/appearance#attachments).

## 0.7.2

- **[iOS]**: Fixed an issue where notifications would sometimes not appear in the foreground.

## 0.7.1

- **[Android]**: Fixed an issue where the Headless task key was incorrect for the foreground service task.update

## 0.7.0

- **[Android]**: Implemented support for [`launchActivityFlags`](https://notifee.app/react-native/reference/notificationpressaction#launchactivityflags) - allowing you to customise the launch behaviour of your activities.
  - See [`AndroidLaunchActivityFlag`](https://notifee.app/react-native/reference/androidlaunchactivityflag) for supported flags.

## 0.6.1

- **[Android]**: Fixed an issue with Android proguard rules that may have prevented the library from being used when minified.

## 0.6.0

- **[Android]**: `notifee.config.json` now supports specifying options for build flavours & types.
  - See [this comment](https://github.com/notifee/react-native-notifee/pull/67#issuecomment-640136025) comment for an example.
- **[TypeScript]**: Reworked type definitions to fix minor definition issues.
- **BREAKING**: `Importance` has now been renamed to `AndroidImportance` and is no longer supported on `iOS` (replaced with `foregroundPresentationOptions`).
- **[iOS]**: Implemented support for `ios.foregroundPresentationOptions` to control foreground notification behaviour on iOS
  - See the [iOS appearance guide](https://notifee.app/react-native/docs/ios/appearance) for more information.
- **[Android]**: Fixed an issue where creating multiple `channel` or `channelGroups` would fail to create.
- **[Android]**: `requestPermission` now correctly resolves a dummy instance of `IOSNotificationSettings` (previously `null` on Android) for cross-platform compatibility.
- **[Android]**: `largeIcon` & `picture` (from big picture style) now supports React Native asset loading, e.g. `largeIcon: require('./image.png')`.

## Pre-launch versions (0.0.1 – 0.5.1)

Versions 0.0.1 through 0.5.1 were published to npm between 2020-01-27 and 2020-05-08 as private / early-access iterations and never received public release notes. Notifee was publicly launched with **0.6.0** on 2020-06-07 — that is why the history on this page starts there.

For the authoritative record of those early publications, see the npm version list on the [package registry](https://www.npmjs.com/package/@notifee/react-native?activeTab=versions). Neither the upstream [`invertase/notifee`](https://github.com/invertase/notifee) repository nor this fork carries release notes for that window; no GitHub releases or git tags exist for versions older than 3.0.1.
