type: service
status: active
timestamp: 2026-06-20
tags: [push, fcm, firebase, web-push, primary]

Firebase Cloud Messaging (FCM)

Web push transport — free unlimited on Spark, Knock on top for multi-channel

Firebase Cloud Messaging (FCM)

Role

Web push transport for every family site + PWA. When a user opts in, the browser registers a Service Worker, requests a token from FCM, and we store the token on the user’s Firebase Auth profile. Worker endpoints (and Knock, see below) deliver to those tokens via the FCM HTTP v1 API.

Free tier

Card / subscription required?

NO. Spark tier — the family’s firebase-spark-forever decision locks Spark forever. No Blaze upgrade.

Knock layered on top

FCM is the transport for browser push. As of 2026-06-20, every notification is orchestrated by Knock — Knock owns the workflow (which channels fire, in what order, with what dedupe window), then dispatches to FCM for the web-push channel and to Resend / SMS providers for email + SMS. The split is documented in the notifications-fcm-plus-knock decision.

Why we keep FCM as the transport instead of letting Knock send web push directly: FCM is free unlimited on Spark, integrates natively with our Firebase Auth user records (token storage on the user profile), and ships first-class iOS PWA support. Knock’s role is orchestration only.

Use cases (transport channel only — Knock owns orchestration)

Alternatives

Swap cost

Low — FCM HTTP v1 API is a thin wrapper over the W3C Web Push protocol; swapping means rewriting the Worker’s send function and re-issuing tokens. Knock’s web-push channel can also be pointed at OneSignal or direct Web Push as a backup.

Why this is our pick

Free unlimited on Spark. First-class web-push + iOS PWA support. Native to the family’s existing Firebase Auth project — no new account, no new SDK, tokens live on the user profile. Knock layers on top for multi-channel orchestration without forcing us to leave Firebase for the actual delivery.

Cross-refs


Edit on GitHub · Back to index