Skip to content

Releases: marcocrupi/react-native-notify-kit

10.4.4

29 May 07:13
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Fixed

  • Android: relaxed the Java runtime guard so JDK versions newer than the validated baselines are no longer blocked before the consumer Gradle/AGP/Kotlin/React Native toolchain can evaluate compatibility. JDK 17 remains the minimum requirement, and JDK 17 and JDK 21 are the validated Android build baselines.

Docs

  • Docs: clarified the Android JDK policy across installation, environment support, and README documentation. JDK 17+ is required, JDK 17 and JDK 21 are the validated baselines, and newer JDKs remain toolchain-dependent.

Tooling

  • Tooling: resolved the repository lockfile alert for xcode's transitive uuid dependency by pinning xcode/uuid to uuid 11.1.1 with a targeted Yarn resolution. This is a repository tooling/compliance fix and does not change notification runtime behavior.
  • Expo smoke app / Tooling: updated the Expo smoke fixture from expo ~55.0.23 to ~55.0.26 so its Expo Metro chain resolves postcss to a patched 8.5.x version. This addresses the repository lockfile alert without adding a PostCSS resolution.
  • Expo smoke app / Tooling: updated the ws lockfile resolution used through @expo/cli from 8.20.0 to 8.20.1. This addresses the repository lockfile alert without changing Expo, React Native, Metro, or adding a ws resolution.

Tests

  • Tests: 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.
  • Tests: made the iOS NSE helper harness executable so it can be run directly as scripts/test-ios-nse-helper.sh.
  • Validation: passed static validation, React Native/server/CLI Jest suites, iOS ObjC helper harnesses, Android core unit tests, Expo config, and CLI tarball E2E validation.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.4

10.4.3

18 May 15:24
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Changed

  • React Native: updated the library and bare smoke app development target to React Native 0.85.3.
  • Smoke app: aligned the bare smoke app tooling with React Native 0.85.3, including React 19.2.3 and @react-native/* packages.
  • Jest: migrated React Native Jest configuration to @react-native/jest-preset for the React Native 0.85 toolchain.
  • Smoke app / Android: aligned the bare smoke Android Gradle wrapper with the React Native 0.85.3 template.
  • Smoke app / iOS: refreshed the bare smoke Podfile.lock to React Native 0.85.3 pods, Hermes 250829098.0.10, and RNNotifee 10.4.2.

Tests

  • 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.
  • Smoke app / iOS: confirmed visible local notification display on a physical iPhone.
  • API: public JavaScript API and runtime notification behavior are unchanged by this maintenance update.

Notes

  • Expo smoke app: remains on Expo SDK 55 / React Native 0.83.x and was intentionally not updated in this step.
  • Expo / React Native 0.85: Expo React Native 0.85 validation remains a separate future track and was not part of this maintenance step.
  • Validation limits: FCM, headless/background flows, EAS, and Expo smoke were not validated as part of this step.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.3

10.4.2

11 May 15:37
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Fixed

  • 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.
  • Expo / iOS: fixed NotifyKitNSE Podfile use_frameworks! inheritance so the extension matches the host target linkage, including static/dynamic frameworks and Expo conditional Podfile properties.
  • Expo / iOS: existing generated NotifyKitNSE targets are normalized for version/build metadata and Podfile linkage instead of requiring manual deletion/regeneration.
  • iOS / EAS: fixed another precompiled-modules header visibility issue by making NotifeeApiModule.mm import NotifeeCore+UNUserNotificationCenter.h through a relative NotifeeCore path. This avoids a reported 'NotifeeCore+UNUserNotificationCenter.h' file not found failure in EAS builds with precompiled modules enabled. Building from source was not affected.
  • Expo smoke app / iOS: configured targeted static linking for the RNFirebase pods used by the fixture (RNFBApp and RNFBMessaging) when ios.useFrameworks: "static" is enabled.

Tests

  • Expo smoke app / iOS: aligned the RNFirebase smoke fixture with Expo static-frameworks builds by adding ios.forceStaticLinking for RNFBApp and RNFBMessaging. The iOS smoke fixture was validated locally with EXPO_USE_PRECOMPILED_MODULES=1, clean Expo prebuild, CocoaPods install, and build/install on a physical iPhone.
  • Validation: reviewed the iOS import graph to ensure RNNotifee no longer uses bare sibling imports for NotifeeCore headers involved in the reported precompiled-modules failure.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.2

10.4.1

11 May 10:38
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Fixed

  • iOS / Expo: fixed a static-frameworks header visibility issue where NotifeeApiModule.h publicly imported NotifeeCore.h, which could fail on clean Expo/EAS or CocoaPods builds with 'NotifeeCore.h' file not found.

Tests

  • Expo smoke app / EAS: hardened the Expo smoke fixture for EAS builds by supporting Firebase file environment variables, enabling Corepack/Yarn 4 on EAS, making the dynamic Expo config compatible with the EAS config reader, and preserving the NotifyKit config plugin build output in the EAS archive.
  • Expo smoke app / Android EAS: 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.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.1

10.4.0

09 May 14:43
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Added

  • Expo: added Expo CNG / prebuild support for development builds. Expo Go is not supported because this library requires native modules and native notification targets/capabilities.
  • Expo / iOS / FCM Mode: added official config plugin automation for the NotifyKitNSE Notification Service Extension used by iOS FCM Mode, including generated Swift service, Info.plist, entitlements, Xcode target wiring, EAS appExtensions metadata, Podfile target, RNNotifeeCore dependency, and .appex embedding.
  • Expo / Android / foreground services: added explicit opt-in config plugin support for NotifyKit foreground service manifest requirements. When configured, the plugin writes app.notifee.core.ForegroundService, android:foregroundServiceType, the base FOREGROUND_SERVICE permission, required type-specific FOREGROUND_SERVICE_* permissions, and the required specialUse subtype property.
  • Expo smoke app: added apps/expo-smoke fixture coverage for development build validation with Expo SDK 55, React Native 0.83.6, expo-dev-client, and react-native-notify-kit resolved from the workspace or a packed tarball.
  • Expo smoke app / Android FCM: added Android FCM smoke support through local google-services.json, RNFirebase data-only receive paths, notifee.handleFcmMessage, and the android-expo-smoke sender scenario.

Fixed

  • iOS / Expo: fixed NSE Podfile integration for Expo prebuild by isolating the generated NotifyKitNSE target as a top-level target instead of inheriting the Expo host target module graph.
  • iOS / Expo / Firebase: aligned the generated NSE Podfile linkage with Firebase static frameworks and use_frameworks! configurations used by Expo development builds.
  • iOS / NSE: fixed a static-framework header import issue involving NotifeeExtensionHelper and NotifeeCore when RNNotifeeCore compiles inside a Notification Service Extension.

Tests

  • Packaging / Expo: validated real npm tarball install from a scratch fixture, plugin resolution from node_modules, Expo config, iOS prebuild, pod install, xcodebuild, NotifyKitNSE.appex generation, and embedding in the app bundle.
  • Expo smoke app: validated development build runtime smoke on iOS and Android, including TurboModule startup and basic notification display/read paths.
  • FCM Mode / iOS: validated foreground delivery on a physical iPhone with real FCM payloads and a generated NSE, including logical iOS attachment metadata in getDisplayedNotifications() and observed NotifyKitNSE process. Visible FCM background delivery and tap-to-open were observed, but JS PRESS marker validation for iOS background tap remains a follow-up. Killed state, visual lock-screen/banner attachment rendering, textual NSE logs, and data-only RNFirebase client-handler paths are not claimed as verified in this release.
  • Expo / Android: validated Expo config, Android prebuild, expo run:android, base NotifyKit 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.
  • FCM Mode / Android / Expo: validated RNFirebase data-only foreground and background receive paths with SMOKE:FCM_ON_MESSAGE, SMOKE:FCM_FOREGROUND_HANDLE_OK, SMOKE:FOREGROUND_EVENT_DELIVERED, SMOKE:FCM_BACKGROUND_MESSAGE, and SMOKE:FCM_BACKGROUND_HANDLE_OK.
  • FCM Mode / Android / Expo: 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 with coherent correlationId and pressActionId=default. The optional foreground tap path was also observed with SMOKE:FOREGROUND_EVENT_PRESS.
  • Expo / Android / foreground services: validated the Android Expo foreground service config plugin with a real prebuild and a runtime shortService smoke on a Pixel 9 Pro XL. The gate covered manifest shortService, displayNotification with asForegroundService, registerForegroundService, stopForegroundService, cancelNotification, and dumpsys confirmation of types=0x00000800 / isShortFgs=true without MissingForegroundServiceTypeException, SecurityException, or AndroidRuntime crash.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.0

10.3.3

07 May 08:56
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Fixed

  • iOS: improved UNUserNotificationCenter delegate chaining reliability. NotifyKit now performs a controlled idempotent rechain when relevant iOS notification APIs or lifecycle hooks run, so if another SDK assigns itself as the notification center delegate after NotifyKit, NotifyKit can capture that delegate as downstream and reinstall itself as the current delegate. The downstream delegate selector flags are refreshed during rechain, NotifyKit-owned notifications remain handled by NotifyKit, and non-NotifyKit notifications continue to be forwarded downstream. This internal fix does not add a public API, does not use method swizzling, does not introduce a general delegate multiplexer, and preserves setNotificationConfig({ ios: { handleRemoteNotifications: false } }) behavior for non-NotifyKit remote notifications while keeping FCM Mode notifications marked with __notifee_notification NotifyKit-owned.
  • iOS: guarded downstream delegate completion handlers for forwarded notification callbacks so duplicate downstream completion calls do not invoke the upstream completion more than once. No timeout or fallback behavior is introduced when a downstream delegate does not call completion.

Tests

  • Tests: added and validated an iOS delegate chaining harness covering 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.

Tooling

  • Packaging/iOS: fixed generated iOS core packaging so the npm tarball is built from a verified NotifeeCore source copy. The package prepack step now regenerates packages/react-native/ios/NotifeeCore from the root ios/NotifeeCore, verifies that all 17 generated files match the source of truth, and the tarball E2E check now asserts that all 17 iOS core files are included. This prevents local ignored files from masking missing package sources in clean clones or release builds, and removes the anomalous generated file from tracking.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.3

10.3.2

06 May 13:58
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Fixed

  • iOS: hardened Notification Service Extension payload handling for FCM Mode. notifee_options is now accepted both as the FCM Mode JSON string and as the legacy/manual APNs dictionary shape. Malformed, unexpected, or non-dictionary payload shapes now fall back safely instead of risking notification delivery failure.
  • iOS: guarded Notification Service Extension delivery so the content handler is called at most once across normal completion and serviceExtensionTimeWillExpire races.
  • iOS: scoped Notification Service Extension helper state per request so overlapping or late attachment completions do not reuse stale singleton state from another notification request.
  • iOS: fixed getNotificationCategories() readback for UNTextInputNotificationAction actions. Text input actions are now detected from the action instance instead of the action class object.
  • iOS: hardened the non-NSE local attachment downloader by applying explicit request/resource timeouts and avoiding invalid "." file suffixes when a downloaded attachment has no usable filename extension. Notifications continue to fall back without the attachment when the file type cannot be determined.

Tests

  • Tests: added a lightweight ObjC harness for Notification Service Extension payload parsing, malformed payload fallback, one-shot delivery, and request-scoped helper behavior.
  • Tests: added a lightweight ObjC harness for the iOS non-NSE local attachment downloader timeout and filename-extension handling.
  • Smoke app: added iOS device automation hooks with deep-link scenarios, stable SMOKE:RESULT / SMOKE:EVENT markers, and a local HTTP callback result channel for script-readable PASS/FAIL results.
  • Smoke app: added iOS device smoke automation for local notification display, displayed-notification verification, FCM minimal delivery, and FCM iOS attachment delivery. The attachment smoke verifies logical notification delivery; visual attachment rendering still requires manual confirmation or future UI automation.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.2

10.3.1

06 May 06:01
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.1

10.3.0

05 May 21:26
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Changed

  • Android: centralized internal Bundle and Parcelable compatibility reads through BundleValueReader and ParcelableCompatReader, cleaning up deprecated Android access paths without changing public APIs, JavaScript payloads, scheduling policy, Room persistence, reboot recovery, foreground service behavior, or PendingIntent behavior.

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() delegating to the channel API instead of the channel group API.

Tests

  • Tests: added Android regression coverage for notification, channel, trigger parser current behavior and manager scheduler paths to preserve existing null, default, coercion, update/delete, and reschedule behavior during the internal reader modernization.
  • 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.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.0

10.2.1

28 Apr 16:31
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.2.1