react-native-alarm-scheduler

Installation

Install the package and configure the Expo config plugin.

npm install react-native-alarm-scheduler

Not available in Expo Go

This module ships native code. Use a development build or a prebuilt native app. Bare React Native apps need Expo Modules installed and configured first; Expo apps already include the required runtime.

Add the config plugin

Add the plugin to your app config before running expo prebuild:

app.json
{
  "expo": {
    "plugins": [
      [
        "react-native-alarm-scheduler",
        {
          "alarmKitUsageDescription": "Allow this app to schedule alarms.",
          "addExactAlarmPermission": true,
          "addNotificationPermission": true,
          "iosAlarmSounds": ["./assets/audio/morning-alarm.caf"]
        }
      ]
    ]
  }
}

Then rebuild the native projects:

npx expo prebuild
npx expo run:android
npx expo run:ios

Plugin options

OptionTypeDefaultDescription
alarmKitUsageDescriptionstringAllow this app to schedule alarms that can alert you at the selected time.Adds NSAlarmKitUsageDescription for iOS AlarmKit authorization.
addExactAlarmPermissionbooleantrueAdds android.permission.SCHEDULE_EXACT_ALARM.
addNotificationPermissionbooleantrueAdds android.permission.POST_NOTIFICATIONS.
addUseExactAlarmPermissionbooleanfalseAdds android.permission.USE_EXACT_ALARM, which is granted without prompting. Google Play only allows it for apps whose core function is an alarm clock or calendar.
iosAlarmSoundsstring[][]Adds a developer-owned sound catalog to the iOS app bundle. Runtime user-selected sounds use soundUri and need no config entry.

The plugin also enables NSSupportsLiveActivities for iOS AlarmKit intents and adds com.android.alarm.permission.SET_ALARM for Android system Clock alarm intents. It also bundles the package’s internal iOS silence asset automatically; silent: true needs no plugin option.

What the package adds on its own

You do not need to declare anything else. The package’s own Android manifest contributes the permissions the ringing layer needs — WAKE_LOCK, VIBRATE, RECEIVE_BOOT_COMPLETED, USE_FULL_SCREEN_INTENT, FOREGROUND_SERVICE, FOREGROUND_SERVICE_SPECIAL_USE, DISABLE_KEYGUARD and TURN_SCREEN_ON — plus the ringing service, the lock-screen ring activity, and the boot receiver.

Play Console justification

The foreground service is declared as specialUse with the subtype alarm. Play Console asks for a short justification for that type; “the service plays the alarm and keeps the ringing UI alive until the user completes the wake-up flow” is the honest one.

Requirements

  • Android API 24+.
  • iOS 15.1+ for package compatibility.
  • iOS 26 SDK and iOS 26 runtime for actual AlarmKit scheduling. Older iOS versions report status: 'unavailable'.