Skip to content
Developers · 8 min read

Firebase web push vs. standard web push

Firebase Cloud Messaging can send to browsers, and it’s free. But for websites, standard Web Push with VAPID does the same job with fewer moving parts. Here’s how to choose.

Updated By the Pusharoo team
In short
  • You don’t need Firebase to send web push; every browser accepts standard VAPID-signed requests.
  • FCM for web adds an SDK, a Firebase project, FCM tokens and a Google-authenticated send API.
  • Firebase’s pricing page lists Cloud Messaging as no-cost (read Nov 12, 2026).
  • FCM makes most sense when you already use Firebase for native apps and want one sender.

Side by side

Standard Web PushFirebase Cloud Messaging (web)
SetupVAPID key pair + service workerFirebase project, JS SDK, config, VAPID key in console, firebase-messaging-sw.js
Subscription identifierPushSubscription (endpoint + keys)FCM registration token
SendingEncrypted POST to each endpoint (library does it)FCM HTTP v1 API with Google OAuth service-account credentials
BrowsersAll with Push APIFCM routes to browsers’ push services
CostFree protocol; your server/tool costsCloud Messaging listed as no-cost (Nov 12, 2026)
Lock-inPortable if you keep your VAPID keysTokens tied to your Firebase project

How FCM for web works

You add the Firebase JS SDK, initialise it with your project config and call getToken() with your web push certificate (a VAPID key from the Firebase console). Firebase registers its own service worker and returns a token. Your server sends to that token through the FCM HTTP v1 API, authenticated with a Google service account. FCM then delivers through each browser’s push service. Google retired the legacy FCM send APIs in 2024, so new code should use HTTP v1.

When FCM is a good fit

  • You already use Firebase for Android/iOS apps and want one API for app and web.
  • You want topic messaging or Firebase’s console for ad-hoc sends.
  • Your backend already authenticates to Google Cloud.

When standard Web Push is simpler

  • You only need to reach websites, not native apps.
  • You don’t want a Google project, SDK and service account in your stack.
  • You want your own subscription data and keys (portable list).
  • You’re on PHP, Ruby, Go or any language with a Web Push library (PHP, Node).

What the FCM client looks like

import { initializeApp } from 'firebase/app'; import { getMessaging, getToken } from 'firebase/messaging'; const app = initializeApp({ /* your Firebase config */ }); const token = await getToken(getMessaging(app), { vapidKey: 'YOUR_WEB_PUSH_CERTIFICATE_KEY' }); // send `token` to your server; it sends via the FCM HTTP v1 API

Compare with the standard approach in the Push API example — no SDK or Google project required.

If you’re still on the legacy FCM API

Google deprecated FCM’s legacy HTTP and XMPP APIs in 2023 and began shutting them down in June 2024; servers that still send with a legacy “server key” will fail. The supported path is the FCM HTTP v1 API, which authenticates with short-lived OAuth tokens from a service account. If you’re rewriting the sender anyway, it’s a good moment to ask whether you need FCM at all: for web-only push, standard VAPID Web Push removes the Google project, service account and token exchange entirely.

FCM tokens vs. standard subscriptions

FCM registration tokenStandard PushSubscription
What you storeAn opaque token stringEndpoint URL + p256dh + auth keys
Who encryptsFCM, on its serversYour server (RFC 8291)
Works withFCM APIs onlyEvery browser’s push service directly
Moving providersTied to the Firebase projectTied to your VAPID key

A quick decision rule

  • Native Android/iOS apps plus web, one backend → FCM is convenient.
  • Website only, any stack → standard Web Push with a library is simpler.
  • Website only, no backend work wanted → a hosted service such as Pusharoo.

Or neither: a hosted tool

FCM and raw Web Push both give you delivery only. You still build subscription storage, a prompt, segments, scheduling, automations and cleanup. Pusharoo provides all of that on standard Web Push — no Firebase project — free with no limits (what a push service does).

Questions

Is Firebase web push free?

Firebase’s pricing page lists Cloud Messaging (FCM) as a no-cost product on both plans (read Nov 12, 2026). You still pay for any servers you run.

Can I send web push without Firebase?

Yes. Generate VAPID keys, subscribe with the Push API and send with a Web Push library. All major browsers accept it.

Can I migrate from FCM tokens to standard subscriptions?

Not directly; FCM tokens and Web Push subscriptions are different identifiers. Browsers resubscribe with the new setup on their next visit.

Is FCM free for web push?

Firebase Cloud Messaging has no per-message charge; you pay for any other Firebase services you use.

Do I need firebase-messaging-sw.js?

With the Firebase SDK, yes by default. With standard Web Push and VAPID, you write your own worker.

More in Developers: Service worker push events, done right · Web push notifications with Node.js · Web push notifications in PHP · Laravel browser push notifications (no Firebase) · Web push notifications in React and Next.js · Declarative Web Push, explained · Web push in Python with pywebpush · Django push notifications to the browser · Web push notifications in Ruby on Rails · Web push in Go with webpush-go · Angular push notifications with SwPush · Push notifications in Vue 3 and Nuxt · Push notifications in SvelteKit · All guides

Free for life. No limits.

Unlimited subscribers, campaigns and automations. No badges. About five minutes to install.