- Inbox — prebuilt notification center widget with theming and custom rendering
- Push Notifications — automatic token syncing and delivery tracking for APNS and FCM
- Preferences — prebuilt widget for users to manage their notification settings
| Requirement | Value |
|---|---|
| Min iOS version | 15.0 |
| Min Android SDK | 23 |
| Gradle | 8.4+ |
Installation
iOS Setup
Update your deployment target to iOS 15+, then install the CocoaPod:Android Setup
Authentication
All SDK features (Inbox, Push, Preferences) require a signed-in user. Authentication is JWT-based; your backend generates a token and the SDK manages credentials across app sessions.For a full walkthrough of JWT generation, see the Inbox Authentication guide.
Generate a JWT on your backend
Call the Issue Token endpoint from your server:
Sign in the user
Pass the JWT to the SDK where you manage user state. Credentials persist across app sessions. If the token expires, generate a new one from your backend and call
signIn again; the SDK does not handle token refresh automatically.Inbox
Courier Inbox provides a prebuilt notification center widget. It supports theming, custom renderers, and real-time updates. The widget automatically adapts to your app’s FlutterTheme unless you provide a custom CourierInboxTheme.
For an overview of how Courier Inbox works and how to send messages to it from your backend, see Get Started with Inbox and Send an Inbox Message.
Prebuilt Widget


- Button style from
Theme.of(context).elevatedButtonTheme.style - Loading/unread indicator color from
Theme.of(context).primaryColor - Text styles from
Theme.of(context).textTheme
Theming
Pass aCourierInboxTheme to override the default styles. This controls fonts, colors, unread indicators, swipe actions, tab styles, and button styles.


Custom Inbox UI
For full control over rendering, useaddInboxListener to receive raw message data and build your own UI:

Message Actions
Push Notifications
The SDK simplifies push notification setup with automatic token syncing and delivery tracking for both APNS (iOS) and FCM (Android).Push notifications require a physical device. Simulators and emulators do not reliably support push token registration or notification delivery.
| Feature | iOS | Android |
|---|---|---|
| Automatic token management | Yes | Yes |
| Notification tracking | Yes | Yes |
| Permission requests | Yes | No |
Provider Setup
Configure your push provider in the Courier dashboard:For step-by-step provider credential setup, see the APNS integration guide or FCM integration guide.
iOS Push Setup
Enable Push Notifications capability
In Xcode: select your target > Signing & Capabilities > add Push Notifications. Watch the video walkthrough on GitHub for a step-by-step guide.
Add a Notification Service Extension
Follow the iOS SDK Notification Service Extension setup or add the extension manually. This enables delivery tracking when the app is not running.
Android Push Setup
Set up Firebase
Follow the Firebase Android setup guide and add the
google-services.json to your app.Create a notification service
Add a class extending
CourierService and register it in AndroidManifest.xml. See the Android SDK push setup for the full steps. Watch the video walkthrough on GitHub for a step-by-step guide.Token Syncing and Permissions
Request notification permission (iOS shows a system dialog; safe to call on Android where it’s a no-op below API 33) and manually sync tokens if you’re not using automatic syncing.Handling Push Events
Register a listener to respond when notifications are delivered or tapped. This is useful for deep linking, analytics, or showing in-app alerts.Send a Test Notification
Once you’ve completed the setup above, send a test push using the Send API withpush as the routing channel. See the APNS sending guide or FCM sending guide for complete examples.
Preferences
Courier Preferences provides a prebuilt widget for users to manage which notification topics and channels they subscribe to.Topics and sections are configured in the Preferences Editor. See Preferences Overview for how preference enforcement works at send time.

Preference Modes
- Topic mode (
TopicMode()): shows subscription topics the user can toggle on or off - Channels mode (
ChannelsMode(channels: [push, sms, email])): shows per-channel controls for each topic
Theming
Pass aCourierPreferencesTheme to customize fonts, colors, toggle styles, and section headers. Light and dark themes are both supported, and Courier Studio branding is automatically applied when a brandId is provided.

CourierClient
For advanced use cases,CourierClient provides direct access to the Courier API:
