- 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
Installation
iOS Setup
Update your deployment target to iOS 15+, then install the CocoaPod:Android Setup
Add the Jitpack repository
android/build.gradle:Set minimum SDK version
app/build.gradle:Gradle sync
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.Generate a JWT on your backend
Sign in the user
signIn again; the SDK does not handle token refresh automatically.Sign out when done
Authentication state
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.
Prebuilt Widget


Default Inbox on iOS and Android
- 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.


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

Custom Inbox list item rendering
Message Actions
Track every event a Courier message can receive:Reading the feed
Push Notifications
The SDK simplifies push notification setup with automatic token syncing and delivery tracking for both APNS (iOS) and FCM (Android).Provider Setup
Configure your push provider in the Courier dashboard:iOS Push Setup
Set the iOS deployment target
Extend CourierFlutterDelegate
ios/Runner/AppDelegate.swift, import the SDK and inherit from CourierFlutterDelegate. This automatically syncs APNS tokens to Courier and forwards delivery / click events to Dart.Enable the Push Notifications capability
Add a Notification Service Extension (recommended)

Reorder build phases so Embedded Foundation Extensions runs before Run Scripts
Android Push Setup
Add Firebase to your app
google-services.json, and place it in android/app/.In android/app/build.gradle:Extend CourierFlutterActivity
MainActivity (Kotlin) to extend CourierFlutterActivity (or CourierFlutterFragmentActivity if you use a FragmentActivity). This lets the SDK forward push delivery and click events into Flutter.Create a FirebaseMessagingService
FirebaseMessagingService directly and forward both callbacks to Courier. The SDK caches the FCM token, uploads it to Courier when a user is signed in, and broadcasts delivery events through its event bus.Register the service in AndroidManifest.xml
Manual Token Syncing
Use this when you don’t want automatic syncing or when you’re integrating with a non-FCM provider.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.Requesting Permission
Prompt the user to allow notifications (iOS shows a system dialog; on Android the call is a no-op below API 33).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.Default Preferences on Flutter
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.
Styled Preferences on Flutter
CourierClient
For advanced use cases,CourierClient is a low-level wrapper around the Courier API. Each client holds its own credentials, so you can spin up as many as you need.
