This feature is not Baseline because it does not work in some of the most widely-used browsers.
The beforeinstallprompt event fires when the browser has detected that a website can be installed as a Progressive Web App.
There's no guaranteed time this event is fired, but it usually happens on page load.
The typical use for this event is when a web app wants to provide its own in-app UI inviting the user to install the app, rather than the generic one provided by the browser. This enables the app to provide more context about the app, explaining to the user why they might want to install it.
In this scenario, the handler for this event will:
BeforeInstallPromptEvent object that's passed into itWhen the user uses the in-app installation UI to install the app, the in-app installation UI calls the prompt() method of the retained BeforeInstallPromptEvent object to show the installation prompt.
Use the event name in methods like addEventListener(), or set an event handler property.
addEventListener("beforeinstallprompt", (event) => { })
onbeforeinstallprompt = (event) => { }
A BeforeInstallPromptEvent. Inherits from Event.
Inherits properties from its parent, Event.
BeforeInstallPromptEvent.platforms Read only Non-standard Experimental
Returns an array of string items containing the platforms on which the event was dispatched. This is provided for user agents that want to present a choice of versions to the user such as, for example, "web" or "play" which would allow the user to choose between a web version or an Android version.
BeforeInstallPromptEvent.userChoice Read only Non-standard Experimental
Returns a Promise that resolves to an object describing the user's choice when they were prompted to install the app.
BeforeInstallPromptEvent.prompt() Non-standard Experimental
Show a prompt asking the user if they want to install the app. This method returns a Promise that resolves to an object describing the user's choice when they were prompted to install the app.
In the following example an app provides its own install button, which has an id of "install". Initially the button is hidden.
<button id="install" hidden>Install</button>
The beforeinstallprompt handler:
BeforeInstallPromptEvent object to a variable, so it can be used laterlet installPrompt = null;
const installButton = document.querySelector("#install");
window.addEventListener("beforeinstallprompt", (event) => {
event.preventDefault();
installPrompt = event;
installButton.removeAttribute("hidden");
});
When clicked, the app's install button:
prompt() method of the stored event object, to trigger the installation prompt.installPrompt variable and hiding itself again.installButton.addEventListener("click", async () => {
if (!installPrompt) {
return;
}
const result = await installPrompt.prompt();
console.log(`Install prompt was: ${result.outcome}`);
installPrompt = null;
installButton.setAttribute("hidden", "");
});
| Specification |
|---|
| Manifest Incubations> # onbeforeinstallprompt-attribute> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
beforeinstallprompt_event |
6144–61Theonbeforeinstallprompt event handler property is not supported. |
79 | No | 4831–48Theonbeforeinstallprompt event handler property is not supported. |
No | 6144–61Theonbeforeinstallprompt event handler property is not supported. |
No | 4532–45Theonbeforeinstallprompt event handler property is not supported. |
No | 8.05.0–8.0Theonbeforeinstallprompt event handler property is not supported. |
6144–61Theonbeforeinstallprompt event handler property is not supported. |
No |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeinstallprompt_event