PushForge

Web Push Notification Playground & Testing Tool

A web-push alternative with zero dependencies, built on the Web Crypto API. Send push notifications from Cloudflare Workers, Vercel Edge, Deno, Bun, and Node.js.

npm install @pushforge/builder

1 Enable Push Notifications

Click to enable push notifications

2 Send Test Notification

Using default settings. Customize notification style
0
Notifications Sent
0
Active Devices
  • Step 1: Enable the toggle above to subscribe your device. Your browser will ask for permission.
  • Step 2: Enter a title and optional message, then click "Send Notification".
  • Broadcast: The notification is sent to all active devices — great for testing across multiple browsers.
  • Auto-expires: Your subscription automatically expires after 5 minutes to prevent spam.
  • For longer testing: Use the Topics tab — subscriptions last 1 hour and you can target specific groups.

1 Subscribe to a Topic

Topics let you group devices. Subscribe multiple devices to the same topic, then send to all of them at once.

Use lowercase letters, numbers, and hyphens only (e.g., "team-notifications")

Your Topic Subscriptions

No topic subscriptions yet. Subscribe above to get started.

2 Send to a Topic

Using default settings. Customize notification style
  • Create a topic: Enter any name (e.g., "my-app-test") and subscribe. Your device joins that topic.
  • Multi-device testing: Open this page on your phone, tablet, and desktop. Subscribe all to the same topic.
  • Send once, reach all: When you send to a topic, every subscribed device receives the notification.
  • 1-hour expiry: Topic subscriptions last 1 hour — longer than Quick Test's 5 minutes.
  • Public topics: Anyone can send to any topic. Use unique names for private testing.

Live Preview

See how your notification will look. Changes are saved and applied to Quick Test and Topics.

Notification icon
Notification Title
Your message appears here...

Notification Images

Displayed as a large image in the notification (not supported on all platforms)
Require interaction: Keeps notification visible until dismissed. Silent: No sound or vibration. Renotify: Alerts again even if a notification with the same tag exists.
Notifications with the same tag replace each other instead of stacking
Action buttons appear below the notification. Limited to 2 buttons on most platforms.
BCP 47 format (e.g., "en", "en-US", "fr-CA")
Urgency hints to the device how to prioritize: "High" wakes device immediately, "Low" may wait for better battery conditions.
How long the push service will retry delivery if the device is offline (max 24 hours)
Comma-separated milliseconds: vibrate, pause, vibrate... (e.g., "200, 100, 200")

Why PushForge?

📦
Zero Dependencies
No node-gyp or native modules
🔐
Web Crypto API
Standard browser cryptography
Edge Ready
Cloudflare, Vercel, Convex, Deno, Bun
🔷
TypeScript Native
Full type definitions included

PushForge vs web-push

Feature PushForge web-push
Dependencies 0 5+
Cloudflare Workers Yes No
Vercel Edge Yes No
Convex Yes* No
Deno / Bun Yes Limited
TypeScript Native @types

* Convex requires "use node"; directive

Frequently Asked Questions

The web-push npm package relies on Node.js-specific APIs like crypto.createECDH that don't work on modern edge runtimes. PushForge is built on the standard Web Crypto API, so it works everywhere: Cloudflare Workers, Vercel Edge Functions, Deno, Bun, and Node.js.

Yes! Unlike web-push which fails with "crypto.createECDH is not a function", PushForge works natively on Cloudflare Workers with zero configuration. Just import and use buildPushHTTPRequest().

Run npx @pushforge/builder vapid in your terminal. This generates a public key for your frontend and a private key (JWK format) for your server.

PushForge was created by David Raphi, a Full Stack Engineer with 3+ years building for US government and election-critical platforms. He also created Nooxy and contributes to Automattic's Harper.

Yes, this playground is completely free. Test push notifications in your browser, customize notification options, and see how they appear on your device. Subscriptions auto-expire after 5 minutes.

Test the full Web Push API: subscribe to notifications, customize titles, body text, icons, images, action buttons, vibration patterns, and more. Works on Chrome, Firefox, Safari 16+, Edge, and Brave.

This error occurs when using web-push on Cloudflare Workers or edge runtimes. The fix is to switch to PushForge, which uses Web Crypto API instead of Node.js crypto. Just replace web-push with @pushforge/builder.

Yes, PushForge works perfectly with Vercel Edge Functions. Unlike web-push which fails because https.request is not available on the edge, PushForge uses the Fetch API.

VAPID (Voluntary Application Server Identification) is a protocol for identifying your push notification server. It's required by push services like FCM and Mozilla to prevent abuse. PushForge includes a CLI to generate VAPID keys.