A push endpoint you own, in one Cloudflare Worker.
No server to keep alive.
A Worker and a KV namespace. Nothing to host, renew, or restart at 3am.
No company in the middle.
Your keys stay in your Worker, and the payload is encrypted to the device. Nobody's dashboard sees your alerts.
No app to build.
iOS has rendered these natively since 18.4. No App Store, no $99 a year for four words on a lock screen.
From the agent you left running, the moment it finishes or stops to ask. From cron, CI, a Raspberry Pi, your backend, a shell alias. Anything that can make an HTTP call can ring your phone.
bash
$ curl -X POST https://push.example.com/push/send \ -H "authorization: Bearer $KUKUROO_SEND_TOKEN" \ -d '{"notification":{"title":"Task W13 finished", "body":"W14 is unblocked and ready to start", "navigate":"https://push.example.com/"}}' {"delivered":1,"removed":0,"failures":[]}
Setup takes less than a minute. One command writes the Worker, generates every key, installs them, provisions storage, and deploys.
bash
$ npx kukuroo init my-push
That's it. You now have a push server of your own. Open the printed URL in Safari on your iPhone, Add to Home Screen, and open it from the icon. Apple's rule, once per device.
Then Kukuroo mounts into the router you already have, rather than asking for a Worker of its own. Devices enroll on your hostname, which is where a notification tap should land.
The mounted setup, step by step →
Kukuroo supports a short list, on purpose: