Glossary

Definition

Notification permission states

Short definition

Notification.permission returns one of three strings: "default" (the user has not yet decided, so the site may still call Notification.requestPermission() to ask), "granted" (the site may show notifications), or "denied" (the site is blocked from showing notifications and, critically, cannot re-prompt programmatically once denied).

Reviewed August 6, 2026

Once a user denies permission, calling Notification.requestPermission() again resolves immediately with "denied" and shows no browser prompt at all — the only way for the user to change their mind is through the browser's own site-settings UI, which the page cannot open programmatically.

Because a denial is effectively permanent from the page's perspective, requesting permission the moment a page loads (rather than after a relevant user action) is widely discouraged; a rejected prompt at that point burns the one chance to ask.

requestPermission() must be called in response to a user gesture on most modern browsers, and returns a Promise resolving to the same three-value string, replacing the older callback-based signature from early API drafts.

You can check the current state without prompting via Notification.permission directly, which is the right way to decide whether to show your own "Enable notifications" call-to-action button versus assuming the OS prompt is still available.

Related terms
Push API
The Push API lets a service worker subscribe to a browser-run push service and receive encrypted messages from a server at any time, including when no tab or window for the site is open. Subscribing is done with registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey }), and incoming messages arrive in the worker's push event.
requireInteraction (Notification option)
requireInteraction is a boolean option, e.g. showNotification("Incoming call", { requireInteraction: true }), that prevents the browser from automatically dismissing the notification after its default timeout (a few seconds on most desktop platforms). The notification instead stays visible until the user clicks it, clicks an action, or closes it manually.
Declarative Web Push
Declarative Web Push is a format where the push message payload itself is a JSON object describing the notification (title, body, icon, and so on) that the browser displays directly, rather than requiring a service worker's push event handler to run arbitrary JavaScript to call showNotification(). WebKit introduced it partly to allow more efficient and more private push delivery on iOS/Safari.
appinstalled event
appinstalled is a window event, listened for with window.addEventListener("appinstalled", () => { ... }), that fires after the browser has finished installing the PWA — regardless of whether the install was triggered via the native beforeinstallprompt flow or a browser menu item. It fires exactly once per successful install and carries no event detail beyond the fact that installation completed.
Related applications
related_applications is a manifest array such as [{"platform": "play", "id": "com.example.app"}] listing native app store equivalents of the PWA. The companion boolean field prefer_related_applications, when true, tells Chromium to prefer directing the user to install the native app instead of showing the web install prompt.
WebAPK
A WebAPK is a small, real Android application package that Chrome generates and signs on the fly (via a Google-run server) when a user installs a qualifying PWA on Android. It gives the installed site a genuine entry in Android Settings > Apps, its own task-switcher identity separate from Chrome, and the ability to be the registered handler for its own scope's URLs.