Register devices, build segments, schedule campaigns and measure opens — on your own Firebase project. Five minutes from flutter pub add to your first push.
Free during beta. No credit card.
// one line to register the device
await PushPal.initialize(appKey: 'pk_…');
// your user id, for targeted sends
await PushPal.login(user.id);
await PushPal.setTags({'plan': 'pro'});
// deep link on tap
PushPal.onNotificationOpened.listen((n) {
router.go(n.route ?? '/');
});Born inside Loksewa Tayari, a Nepali exam-prep app, where it sends daily exam and news pushes in production.
One initialize() call registers the device, refreshes tokens, counts sessions, shows foreground notifications and reports taps.
Pushes go out through your own Firebase project. No shared quotas, no vendor lock-in: your FCM tokens stay valid if you ever leave.
Target by platform, app version, country, language, activity, sessions or any data tag you set from the app.
Send now or later. Quiet hours in your timezone hold non-urgent pushes until morning, automatically.
Per-campaign targeted, delivered and opened counts. Dead tokens are cleaned up for you after every send.
Trigger transactional pushes by your own user id with one HTTP call. Idempotency keys stop duplicate sends.
Sign in with Google, name your app, upload your Firebase service-account key.
Add pushpal_flutter to pubspec.yaml and call PushPal.initialize with your app key.
Compose a campaign in the dashboard or call the REST API from your server.
Free
Soon
FCM tokens belong to the Firebase project your app is built with, so pushes must be sent with that project's credentials. You keep full ownership and Google's free FCM quota.
Yes. Upload your APNs key to Firebase once and PushPal delivers to iOS through FCM, including images.
Flutter is first. The device API is plain HTTP, so React Native, native Android/iOS and web SDKs are next on the roadmap.
Encrypted at rest with AES-256-GCM and only decrypted inside the sending worker. The server REST key is stored as a hash and shown once.