Skip to content

Kukuroo

Self-hosted Web Push for iPhone, iPad and Mac Safari, triggered by one authenticated POST from scripts, cron or CI

Kukuroo homepage with an iPhone lock screen showing a "Task W13 finished" push notification

Kukuroo turns one Cloudflare Worker and a KV namespace into a Web Push endpoint for Apple devices. Devices enroll in Safari through Declarative Web Push, and anything that can send an HTTP request can then notify them.

Safari displays Declarative Web Push notifications without a service worker. Once a device has opened the enrollment page and allowed notifications, a POST to /push/send with a bearer token reaches it. The deployment holds the VAPID keys, and the push service only relays encrypted payloads it cannot read. The npx kukuroo init wizard writes a standalone Worker project and deploys it to a workers.dev address or a custom domain already on Cloudflare. Enrollment requires an invite code by default, and the same CLI later rotates the send token and the invite code. Kukuroo can also be mounted inside an existing Worker, so the push routes share the site's origin and a notification click lands back in that site. The repository itself is a Claude Code plugin marketplace whose plugin lets a coding agent send a notification, for example when tests finish.

Built for: Developers with an iPhone, iPad or Mac who want push notifications from their own scripts, CI or Workers without a push vendor or a native app.

What you can use it for

  • Get a phone alert when a deploy, backup or CI job finishes
  • Send notifications from cron jobs and scripts without a chat bot
  • Add push routes to an existing Worker on the same origin
  • Let a coding agent notify you when a long task is done

Deploy

  • CLI

    Branch main

    The wizard generates the keys, creates the KV namespace and deploys. Back up my-push/kukuroo.credentials.json afterwards.

    npx kukuroo init my-push

Run npx kukuroo init and answer the prompts, then open the enrollment page on each device and allow notifications.

What it needs to run

  • KV namespacesKUKUROO_SUBS

Good to know

Receiving works only in Safari with Declarative Web Push: an iPhone or iPad on iOS 18.4 or later, or Safari 18.5 or later on macOS. Chrome, Firefox and Android cannot enroll. On iOS the page must be added to the Home Screen and opened from its icon. The enrollment origin is fixed once a device enrolls. A custom hostname needs a Worker route or a proxy that rewrites Host; a bare DNS CNAME does not work. kukuroo.credentials.json holds the only copy of the keys, and the VAPID keypair cannot be rotated.

Cost on Cloudflare

Likely fits the free plan

The project documents that Workers Free handles about 20 devices comfortably and 50 per send at most, set by the 50-subrequest limit per invocation with the 10 ms CPU budget close behind. Workers Paid raises the ceiling to 10,000 devices per send.

Source

The estimate is based on Cloudflare’s documented limits and the app’s configuration. What you pay depends on your usage and plan.

Where this comes from

An alternative to Pushbullet, Pushover.

Listing history

  • Oct 2, 2026 · Kukuroo listed
  • Telegram chat where the bot offers Claude models under /models and identifies a dog in an uploaded photo

    Telegram bot that answers private and group chats with OpenAI, Anthropic or Workers AI models, set up in a Mini App

    Deploy
    One-click
    License
    MIT
    GitHub stars
    3.8k stars
    Last commit
  • mail2telegram push notification, Mini App inbox, message reader and iPad split view in Telegram

    Telegram bot that pushes a domain's incoming email to chat, with a Mini App inbox and replies through Resend

    Deploy
    One-click
    License
    MIT
    GitHub stars
    903 stars
    Last commit
  • EdgeChat web demo with the chat list and the General group, showing an admin notice, an image attachment, a voice message and a mention

    Team chat with groups, DMs, voice notes and a Telegram bridge, deployed to your Cloudflare account via GitHub Actions

    Deploy
    Manual
    License
    GPL-3.0
    GitHub stars
    751 stars
    Last commit