Where notifications work
Which browsers can subscribe to push, which need something from you first, and where the bell is not offered at all.
Why you would use it
The bell is missing, or it is there and says you cannot use it yet. This says which of those you are looking at and what to do about it.
How to use it
Nothing to do. The app decides per browser and either hides the bell (#notify)
or shows it with an explanation on tap.

What you see
| Where you are | The bell | What happens |
|---|---|---|
| Android Chrome, https | shown | tapping subscribes |
| Desktop Chrome or Firefox, https | shown | tapping subscribes |
| iPhone or iPad, app installed to the home screen | shown | tapping subscribes |
| iPhone or iPad, Safari tab | shown, not ready | add to the home screen first, then turn notifications on |
| iOS older than 16.4, installed | shown, not ready | this iOS version has no web push — iOS 16.4 or newer is needed |
| Any plain-http origin | hidden | push cannot work there at all |
| A browser with no service worker | hidden | nothing could deliver a push |
| A desktop Mac with no push API | hidden | there is no home screen to add to |
The same table holds for the app on app.v-code.dev, which is served over https. There, one bell covers every box on your account that runs a release with the app's notifications.
Limits and known gaps
- Hidden always means "this browser can never do this", never "not yet". Anything that could work after an install shows the chip and says what is missing.
- An iPad running iPadOS 13 or later reports itself as a Macintosh. The app treats a "Mac" with touch points as an iPad, and a "Mac" without them as a desktop Mac.
- On iOS the check is whether the app is running standalone, not whether
PushManagerexists: newer iOS exposes the API in a tab and then refuses to subscribe from one. - This only decides whether you can subscribe. Whether the phone actually shows a notification is then the operating system's business.
Related
- turn-on-notifications
- install-on-a-phone — the prerequisite on iOS
- thread-finished-notification — what arrives once you can subscribe
- reach-it-from-a-phone — the https origin the table keeps asking for