Open source alpha, free forever

Push notifications at the edge.

Open source alternative to Expo Push Notification Service. Send native iOS and Android pushes through a single API, running on Cloudflare Workers.

server.ts
import { Edgepush } from "@edgepush/sdk";

const client = new Edgepush({
  apiKey: process.env.EDGEPUSH_KEY, // io.akshit.app|...
});

await client.send({
  to: userDeviceToken,
  title: "New order",
  body: "Your coffee is ready ☕",
  data: { orderId: "abc123" },
});
One API

No more separate APNs and FCM integrations.

edgepush abstracts the differences and dispatches to the right platform.

Zero vendor lock-in

Use native tokens, bring your own credentials.

Your APNs .p8 keys and FCM JSONs stay encrypted in D1. Revoke anytime.

How it works

01

Bring your credentials

Upload your APNs .p8 key and Firebase service account JSON in the dashboard. Both are encrypted with AES-GCM before being written to D1.

02

Generate an API key

Keys are scoped to a single app and prefixed with the package name so they self-identify in logs: io.akshit.myapp|abc...

03

Send from anywhere

Use the SDK or POST directly to /v1/send. Dispatched through Cloudflare Queues with automatic retries and a dead letter queue.

Built for production

Fully open source

MIT licensed. Self-host on your own Cloudflare account with one wrangler deploy.

Native tokens

No proprietary token format. You use real APNs device tokens and FCM registration tokens.

Delivery receipts

Every send returns a ticket id. Poll the receipt or subscribe to webhooks for delivered/failed events.

Rate limiting built-in

Per-app token bucket via Durable Objects. No surprise throttling from your own code.

Webhook events

Get HMAC-signed POSTs when a message is delivered or fails. Automatic token invalidation detection.

Encrypted credentials

Your APNs .p8 and FCM service account JSON are encrypted at rest. The raw key is never exposed via the API.

Ship pushes in 5 minutes.

Free forever on the hosted service, or self-host on your own Cloudflare account.