Skip to content

Platforms · Platform

PWAs on Windows

Published Updated

On Windows 10 and 11, Microsoft Edge installs a PWA from an address-bar icon or a menu item, and the installed app then runs like other Windows apps: it has its own window with a title-bar app menu, appears in the Taskbar, the Start menu, and Alt+Tab, and is listed with the rest of the installed apps in Windows Settings.

Microsoft documents the user-facing flow on Microsoft Learn (Use Progressive Web Apps in Microsoft Edge, dated 2025-10-15) and on Microsoft Support; the labels below are quoted from those pages (English UI).

When Edge judges a site installable, an App available icon appears in the address bar; clicking it opens a flyout with an Install button. Any site, installable or not, can be installed through Settings and more (…) > More tools > Apps > Install this site as an app. After installation a post-install dialog offers a Pin to Start checkbox and an Auto-start on device login checkbox, and the app opens in its own window. Many PWAs are also listed in the Microsoft Store, where the Get button installs them without opening Edge.

An installed PWA’s window has a title bar with a Settings and more (…) button that opens the App info menu: the app icon, name, and publisher (the server’s domain), the commands Pin to taskbar, Pin to Start, and App settings, and the submenus Privacy (including the number of cookies in use), Extensions, and More tools. Shortcuts declared in the manifest appear in the Taskbar icon’s right-click menu.

Installed apps are listed at edge://apps, where Details on a card exposes the Auto-start on device login toggle, Pin to taskbar, Pin to Start, Create Desktop shortcut, and Uninstall; uninstalling asks whether to delete the app’s history and data as well. The same apps appear in Windows Settings under Add or remove programs (shown as Apps & features on older builds), so an administrator can remove them like any other app.

Microsoft lists one known restriction: PWAs are not supported in FSLogix environments. The install succeeds, but after the user logs off and back on the installed PWA is gone. Virtual-desktop deployments that rely on a persistent Windows install should warn users or distribute through the Microsoft Store instead.

The checks below use the standard display-mode media feature, which is not Edge-specific; Edge is where the installed window appears on Windows.

Skipping the install pitch inside the installed window

Section titled “Skipping the install pitch inside the installed window”

(display-mode: standalone) matches when the page runs in the installed window and not in a browser tab.

function isStandaloneDisplayMode() {
if (typeof window.matchMedia !== 'function') {
return false; // no matchMedia: treat as an ordinary tab
}
return window.matchMedia('(display-mode: standalone)').matches;
}
if (isStandaloneDisplayMode()) {
document.getElementById('install-cta').hidden = true;
} else {
document.getElementById('install-cta').hidden = false;
}

The fallback returns false so that an engine without matchMedia sees the install call-to-action rather than an error.

Reacting when the user switches between tab and app

Section titled “Reacting when the user switches between tab and app”

The same origin can be open in the installed window and in a tab at once, and a MediaQueryList reports a change if the presentation of a page changes, so the mode is worth watching rather than reading once.

const standalone = window.matchMedia('(display-mode: standalone)');
function applyMode(matches) {
document.body.classList.toggle('installed', matches);
}
applyMode(standalone.matches);
standalone.addEventListener('change', (event) => applyMode(event.matches));

Use the class for layout only (hiding a duplicate title, tightening padding under the title bar); features should stay identical in both modes.

The App info menu is the quickest way to confirm, from inside the window, that a page is running as an installed PWA and which origin it was installed from.

The publisher line shows the origin the app was installed from, which is the quickest check that a staging and a production install are not being confused on a test machine.

Specifications

SpecificationStatus
None.