---
title: Installation
description: Quick start guide for installing and running on React Native.
---

## 1. Install from npmjs.com

Install the package at the root of your React Native project with [npm](https://www.npmjs.com/) or [Yarn](https://yarnpkg.com/):

```bash
# Using npm
npm install --save react-native-notify-kit

# Using Yarn
yarn add react-native-notify-kit
```

## 2. Configuration Changes

### 2a. Android API versions

The library Android module is built against modern Android SDK levels. Consumer apps should follow the SDK values required by their React Native app template and any Android platform APIs they enable. As the current library baseline, do not use values lower than:

- `compileSdkVersion` = **35**
- `targetSdkVersion` = **35**
- `minSdkVersion` = **24** (Android 7.0)

```gradle
buildscript {
  ext {
    compileSdkVersion = 35
    targetSdkVersion = 35
    minSdkVersion = 24
    ...
  }
  ...
}
```

Your Android project may fail to build with missing symbols if you use older values, because the library is compiled against API 35.

The repository's current bare smoke app validation for React Native 0.85.3 uses `compileSdkVersion = 36`, `targetSdkVersion = 36`, and Gradle wrapper 9.3.1. Those values describe the fixture target and are not declared here as universal installation requirements for every consumer app.

### 2b. Gradle versions

- **Android Gradle Plugin**: 8.2.2 or higher for the library/module baseline
- **Gradle**: 8.x for the library/module baseline

These match the versions the library is built with (see [packages/react-native/android/build.gradle](https://github.com/marcocrupi/react-native-notify-kit/blob/main/packages/react-native/android/build.gradle)). Consumer apps should also follow the Gradle and Android Gradle Plugin versions expected by their React Native app template. Older Gradle/AGP combinations can fail with resource-packaging errors.

### 2c. Java version

The library is compiled with Java 17 (`sourceCompatibility = VERSION_17`, `targetCompatibility = VERSION_17`). Android builds require JDK 17 or newer. JDK 17 and JDK 21 are the validated baselines. Newer JDK versions are not blocked by NotifyKit, but compatibility depends on the consumer Android toolchain: Gradle, Android Gradle Plugin, Kotlin, React Native, and Expo/EAS build images where applicable. JDK 8 and 11 are **not** supported.

### 2d. React Native and New Architecture

- **React Native**: `>=0.73` (peer dependency).
- **New Architecture**: required. The bridge is a TurboModule; the library does not support the old bridge. Ensure `newArchEnabled=true` in `android/gradle.properties` and `RCT_NEW_ARCH_ENABLED=1` in your iOS build environment (enabled by default in RN 0.76+).
- **Current development target**: React Native 0.85.3.

### 2e. iOS deployment target

The iOS pod targets **iOS 15.1+** (`RNNotifee.podspec`). Make sure your app's iOS deployment target is 15.1 or higher.

## 3. Autolinking with React Native

React Native 0.60+ provides [autolinking](https://github.com/react-native-community/cli/blob/master/docs/autolinking.md), so no further manual linking is required. Rebuild your project after install:

```bash
# For iOS
cd ios/ && pod install --repo-update
npx react-native run-ios

# For Android
npx react-native run-android
```

## 4. Optional: iOS Notification Service Extension

If you plan to use FCM with remote push, you'll also want a Notification Service Extension (NSE) on iOS so rich payloads (attachments, interruption level, custom actions) render correctly when the app is in the background or killed.

The library ships a CLI command that scaffolds the target for you:

```bash
npx react-native-notify-kit init-nse
```

This patches your `.pbxproj` and `Podfile` automatically and generates a `NotifyKitNSE` target using `NotifeeExtensionHelper` for push enrichment. See [FCM Mode](/fcm-mode) for the full setup and server payload details.

## Miscellaneous

### Expo Support

The library works with Expo via the bare workflow or custom-dev-client (not Expo Go — notifications require native code).

For Android local scheduled triggers, Expo CNG/prebuild projects receive NotifyKit's library
manifest entries through the normal Android manifest merge. That includes
`android.permission.RECEIVE_BOOT_COMPLETED`, `android.permission.SCHEDULE_EXACT_ALARM`,
`app.notifee.core.RebootBroadcastReceiver`, `app.notifee.core.NotificationAlarmReceiver`, and
`io.invertase.notifee.NotifeeInitProvider`. You normally do not need a custom Expo config plugin
for reboot recovery. A custom boot-receiver plugin can be risky if it replaces the library's
receiver declaration or intent filters instead of preserving the merged entries. When diagnosing
scheduled trigger recovery, inspect the final merged manifest generated by the Android build, not
only `app.json`, `app.config.js`, or `android/app/src/main/AndroidManifest.xml`.

Override the Android SDK versions through `expo-build-properties` when your Expo SDK and React Native template require it:

```bash
npx expo install expo-build-properties
```

Then in your `app.json` / `app.config.js`, keep values at or above the library baseline and use newer values when required by your Expo SDK:

```js
{
  "name": "my app",
  "plugins": [
    [
      "expo-build-properties",
      {
        "android": {
          "compileSdkVersion": 35,
          "targetSdkVersion": 35,
          "minSdkVersion": 24
        }
      }
    ]
  ]
}
```

Run `npx expo prebuild` and rebuild your app as described in the ["Adding custom native code"](https://docs.expo.dev/workflow/customizing/) guide.

For EAS Build, use an image that ships a supported JDK, preferably one of the validated baselines (JDK 17 or JDK 21). In `eas.json`:

```json
{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "android": {
        "image": "latest"
      }
    }
  }
}
```

`"image": "latest"` resolves to the current Ubuntu image with JDK 17 as of Expo SDK 50+. See the [EAS Build server infrastructure docs](https://docs.expo.dev/build-reference/infrastructure/) for the full list of images.
