Kukuroo: self-hosted web push worker for iOS
Self-hosted web push worker,<br>works on iOS.
A push endpoint you own, in one Cloudflare Worker.
Notifications you have to act on should not be buried in a Telegram<br>channel, a Discord server, or email.
The other way onto a lock screen is shipping a native app whose only<br>job is that one line.
Install Kukuroo<br>Try it on your iPhone
Thursday, 7 August
9:41
Task W13 finished W14 is unblocked and ready to start
now
Watchlist Omnium Cargo is down 14%
9m ago
Deploy finished kukuroo.cc is live
25m ago
New post “Moving to the US because I’m too rich”
1h ago
No server to keep alive.<br>A Worker and a KV namespace. Nothing to host, renew, or restart at 3am.
No company in the middle.<br>Your keys stay in your Worker, and the payload is encrypted to the<br>device. Nobody's dashboard sees your alerts.
No app to build.<br>iOS has rendered these natively since 18.4. No App Store, no $99 a<br>year for four words on a lock screen.
Send a push notification in seconds
From the agent you left running, the moment it finishes<br>or stops to ask. From cron, CI, a Raspberry Pi, your backend, a shell<br>alias. Anything that can make an HTTP call can ring your phone.
bash
$ curl -X POST https://push.example.com/push/send \<br>-H "authorization: Bearer $KUKUROO_SEND_TOKEN" \<br>-d '{"notification":{"title":"Task W13 finished",<br>"body":"W14 is unblocked and ready to start",<br>"navigate":"https://push.example.com/"}}'<br>{"delivered":1,"removed":0,"failures":[]}
One-Click Integration
Setup takes less than a minute. One command writes the Worker, generates<br>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<br>the printed URL in Safari on your iPhone, Add to Home Screen, and open it<br>from the icon. Apple's rule, once per device.
Already have a Worker running as your website?
Then Kukuroo mounts into the router you already have, rather than asking<br>for a Worker of its own. Devices enroll on your hostname, which is where<br>a notification tap should land.
The mounted setup, step by step →
Prerequisites
Kukuroo supports a short list, on purpose:
Cloudflare Workers. The only place it runs. No Docker image,<br>no binary, no other host.
Safari. Declarative Web Push has shipped nowhere else yet.<br>Other browsers are turned away at the enrollment page rather than left<br>half working.
iOS 18.4 or later , with the page on your Home Screen and<br>opened from the icon. A Safari tab will not do, and that is Apple's rule<br>rather than ours. macOS Safari 18.5 receives too, if you can think of a<br>reason to want it.
A Cloudflare account. Push and Workers suit each other<br>unusually well, and the free plan carries a personal setup without<br>noticing: 50 devices per send, 100,000 requests a day. If it ever grows<br>past you, $5 a month takes that to 10,000 devices per send and 10<br>million requests.