Skip to content

manifest: display_override "tabbed" mode

Published

manifest: display_override “tabbed” mode — Adding "tabbed" to a manifest’s display_override array, together with the optional tab_strip member, lets a PWA open a single app window that shows a tab strip for switching between documents inside the app’s scope, instead of one window per document.

  • Legend
  • Yes
  • Partial
  • Flag
  • No
  • Unknown
Browser / PlatformSupportVersionsConfidenceSourceNotes
Chrome (Desktop)Yes126highsource—
Chrome (Android)Yes126highsource1
Edge (Desktop)Yes126highsource2
Firefox (Desktop)No—highsource3
Firefox (Android)No—highsource45
Safari (macOS)No—highsource6
Safari (iOS)No—highsource78
Samsung InternetYes28.0highsource9
WebView (Android)No—highsource10
  1. Derived by browser-compat-data mirroring from Chrome.
  2. Derived by browser-compat-data mirroring from Chrome.
  3. No Firefox support is recorded in browser-compat-data.
  4. No Firefox for Android support is recorded in browser-compat-data.
  5. Derived by browser-compat-data mirroring from Firefox.
  6. No Safari support is recorded in browser-compat-data.
  7. No Safari on iOS support is recorded in browser-compat-data.
  8. Derived by browser-compat-data mirroring from Safari.
  9. Derived by browser-compat-data mirroring from Chrome Android.
  10. No WebView Android support is recorded in browser-compat-data.

Source data: /compatibility/manifest-tabbed-display.json · Global usage: 72 % (StatCounter 2026-05)

Source: spec · MDN · Last verified 2026-10-03 · Confidence: high (computed from sources)

Per Chrome for Developers, tabbed application mode “is part of the capabilities project and has shipped on ChromeOS.” MDN’s compatibility data records the tabbed value as experimental and unsupported in Firefox and Safari.

Per Chrome for Developers, "tabbed" must be requested through display_override, not display, because it is not backward compatible with browsers that do not implement it:

{
"display": "standalone",
"display_override": ["tabbed"],
"tab_strip": {
"new_tab_button": {
"url": "/new"
}
}
}

If tab_strip is omitted, Chrome for Developers documents that it defaults to a new_tab_button whose url is the manifest’s start_url.

Per the WICG tabbed-mode explainer, apps detect the tab strip with the display-mode media feature’s tabbed value, the same mechanism used for other display modes:

function hasTabStripEnabled() {
if (!('matchMedia' in window)) {
// No matchMedia support — assume the tab strip is not present.
return false;
}
return window.matchMedia('(display-mode: tabbed)').matches;
}
if (hasTabStripEnabled()) {
// Running with a tab strip — skip any in-page tab UI.
} else {
// No tab strip: render the app's own document-switching UI instead.
}
  • Do not put "tabbed" directly in display: per the WICG explainer, it is only valid inside display_override, and browsers that support neither fall back to the next entry (or to display).
  • Chrome for Developers reports that tabbed application mode has shipped on ChromeOS — design the app to work correctly when the tab strip does not appear.
  • Per Chrome for Developers, separate browser tabs provide resource isolation. With developer-built tabs, browser affordances such as navigation history and “copy this page URL” apply to the tabbed-interface page rather than the selected document page.
  • The home_tab (if configured) should never navigate; Chrome for Developers says links clicked from it should open in a new app tab.

← Back to the Compatibility explorer.