{"repo":"saiday/kukuroo","free":true,"listed":false,"github":"https://github.com/saiday/kukuroo","clone":"git clone https://github.com/saiday/kukuroo.git","description":"Self-hosted Web Push on a Cloudflare Worker: iOS and macOS notifications with no server to keep alive, no vendor, and no native app. Safari only, via Declarative Web Push.","language":"JavaScript","stars":112,"topics":["cloudflare-workers","declarative-web-push","ios","push-notifications","pwa","safari","web-push"],"license":"MIT","category":"mobile-apps","readme_excerpt":"Kukuroo Your own Web Push service, on a Cloudflare Worker. There is no server to keep alive, no notification vendor in the path, and no app to install: you hold the keys, and the push service relays ciphertext it cannot read. Kukuroo uses Declarative Web Push , which so far has only shipped in Safari, so receiving needs an iPhone or iPad on iOS 18.4+, or macOS Safari 18.5+. Chrome, Firefox, and Android cannot enroll. Sending works from anything that can make a request: curl, cron, CI, or a backend you already run. Install It asks a few questions, writes a Worker into my-push , generates and uploads every secret, and deploys. One answer is irreversible: where devices enroll, a workers.dev address or a domain you have on Cloudflare, fixed once a device has enrolled. Back up my-push/kukuroo.credentials.json , the only copy of your keys. On the device: open that origin in Safari, Add to Home Screen , and open it from the icon to allow notifications. A Safari tab does not work on iOS; the enrollment guide has the rest. From then on, a notification is one request: That is Kukuroo standalone: its own Worker at its own address, serving the enrollment page it ships with. Your own site needs nothing but the send token and that POST. Answering no to the bundled front end keeps the same shape but routes no enrollment page, so you serve your own UI and add its origin to KUKUROO ALLOWED ORIGINS . Every question also has a flag, including --no-deploy and --resume for setting things up befor","default_branch":null,"files":null,"tree":[],"storefront":"/r/saiday","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/saiday/kukuroo/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}