Available on
GitHub
and pub.dev.
The SDK’s
intl dependency (>=0.19.0 <1.0.0) is incompatible with Flutter 3.32+ (Dart 3.7+), which ships intl 1.0. On dependency resolution errors, pin intl: ^0.19.0 in your pubspec.yaml or wait for an SDK update that widens the constraint.Installation
iOS setup
Update your deployment target to iOS 15+, then install the CocoaPod:ios/Runner/AppDelegate.swift, inherit from CourierFlutterDelegate. It is what carries the APNs token and the push callbacks into Dart.
Android setup
1
Add the Jitpack repository
In your
android/build.gradle:2
Set minimum SDK version
In your Your app must support at least Gradle 8.4.
app/build.gradle:3
Extend CourierFlutterActivity
In
MainActivity. This is what lets the SDK persist user state across app sessions.Authentication
Courier authenticates with a JWT that your backend mints with your Courier API key, never in client code. covers the token flow, scope strings, reading auth state, signing out, and token refresh. Using the EU datacenter? See . Credentials persist across app sessions, so you sign in once per user rather than on every launch.Inbox
is the setup flow. These are the types it uses on Flutter.
Every callback and action these expose is documented per platform in .

A list item rendered by the app instead of the prebuilt widget
Inbox theme
With noCourierInboxTheme, the widget takes its styling from your app’s Flutter Theme:
- Button style from
Theme.of(context).elevatedButtonTheme.style - Loading and unread indicator color from
Theme.of(context).primaryColor - Text styles from
Theme.of(context).textTheme


Default Inbox on iOS and Android


Styled Inbox on iOS and Android
Push notifications
is the setup flow, from connecting APNs and FCM to a device that receives push. It covers the native wiring above,setTokenForProvider, permission, and reading the payload on tap.
Push notifications require a physical device. Simulators and emulators don’t reliably support push token registration or notification delivery.
On iOS, add a to track delivery while your app is closed.
Preferences
is the setup flow. These are the types it uses on Flutter.Topics and sections are configured in the . See for how preference enforcement works at send time.
Preferences theme
Light and dark themes are separate, and applies automatically when you supply abrandId.
Default and 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.