Display Override

circle-exclamation

Overview

The display_override property allows you to specify a preferred display mode with multiple fallbacks for cases where certain display modes are not supported by the platform or browser. This provides graceful degradation and ensures your PWA displays optimally across different environments.

How It Works

The browser evaluates display modes in the display_override array from left to right. The first supported mode is used. If no mode in the array is supported, the browser falls back to the display property.

Evaluation Order:

  1. Try first mode in display_override

  2. If not supported, try next mode

  3. Continue until a supported mode is found

  4. If none supported, use display property

  5. If display not supported, use browser

Configuration

Basic Configuration

/config/packages/pwa.yaml
pwa:
    manifest:
        enabled: true
        display: "standalone"  # Fallback if display_override not supported
        display_override: ["fullscreen", "minimal-ui"]

Fallback chain: fullscreenminimal-uistandalonebrowser

Complete Example

Evaluation:

  1. Try fullscreen (for media/games)

  2. If not available, try window-controls-overlay (for desktop apps)

  3. If not available, try minimal-ui

  4. If not available, use standalone (from display property)

Display Modes

fullscreen

Description: Uses all available display area with no browser UI visible. Ideal for immersive experiences.

Use Cases:

  • Games

  • Video players

  • Image galleries

  • Presentation apps

  • Immersive media experiences

Platform Support:

  • ✅ Android Chrome (full support)

  • ⚠️ Desktop (varies by browser)

  • ❌ iOS Safari (not supported)

Example:

User Experience:

  • No address bar

  • No browser controls

  • No status bar

  • Fullscreen content

  • Exit typically via system gesture

standalone

Description: The application looks and feels like a standalone native application with its own window and app icon.

Use Cases:

  • Most PWAs

  • Productivity apps

  • Social media apps

  • E-commerce apps

  • Default recommended mode

Platform Support:

  • ✅ Android Chrome

  • ✅ iOS Safari

  • ✅ Desktop browsers

  • ✅ Windows (installed PWAs)

Example:

User Experience:

  • Separate window

  • Own app icon

  • System status bar (mobile)

  • No address bar

  • No browser back/forward buttons

minimal-ui

Description: Looks like a standalone app but includes a minimal set of UI elements for navigation (browser-dependent).

Use Cases:

  • Content-focused apps

  • Reading apps

  • News applications

  • Blog platforms

  • When you want minimal browser UI

Platform Support:

  • ✅ Some Android browsers

  • ⚠️ Implementation varies widely

  • ❌ Many browsers treat as standalone

Example:

User Experience:

  • Similar to standalone

  • May include back button

  • May include reload button

  • Varies by browser/platform

browser

Description: Opens in a conventional browser tab or window with full browser UI.

Use Cases:

  • Progressive enhancement

  • Apps that benefit from browser context

  • Default fallback

  • Development/testing

Platform Support:

  • ✅ All browsers (default behavior)

Example:

User Experience:

  • Standard browser tab

  • Address bar visible

  • Browser navigation buttons

  • Browser menu

  • Standard web experience

window-controls-overlay

Description: Desktop-only mode that provides maximum window surface area with window controls (minimize, maximize, close) as an overlay.

Use Cases:

  • Desktop-focused apps

  • Productivity tools

  • Code editors

  • Design tools

  • Apps needing maximum screen space

Platform Support:

  • ✅ Desktop Chrome/Edge (Windows, macOS, Linux)

  • ❌ Mobile (ignored)

  • ❌ iOS (not supported)

Example:

User Experience:

  • Full window surface for content

  • Title bar controls as overlay

  • Custom title bar possible

  • Maximize content area

  • Desktop-optimized

JavaScript Integration:

Browser Support

Display Mode
Chrome
Edge
Safari
Firefox
Samsung Internet

fullscreen

⚠️

standalone

minimal-ui

⚠️

⚠️

⚠️

browser

window-controls-overlay

✅*

✅*

*Desktop only

circle-info

Support Detection: Always include a well-supported fallback in your display property.

Use Cases by Application Type

1. Media/Gaming App

Prioritize immersive fullscreen experience:

Reasoning: Games benefit from fullscreen. Falls back to standalone on iOS.

2. Productivity App (Desktop-focused)

Maximize workspace on desktop:

Reasoning: Desktop users get maximum screen space. Mobile users get standalone.

3. Content Reader

Minimal UI for focused reading:

Reasoning: Tries for minimal UI, falls back to well-supported standalone.

4. E-Commerce App

Standard app-like experience:

Reasoning: Standalone is widely supported and provides app-like experience without experimental features.

5. Progressive Enhancement

Start with browser, offer better experiences:

Reasoning: Works everywhere, enhances to standalone where supported.

6. Multi-Platform App

Different experiences for desktop and mobile:

Reasoning: Desktop gets window controls overlay, mobile might get fullscreen, everyone gets at least standalone.

Testing Display Modes

1. Chrome DevTools

2. Install and Check

3. JavaScript Detection

4. Test Across Platforms

Window Controls Overlay (Advanced)

For desktop apps using window-controls-overlay, you can customize the title bar area.

Detecting Window Controls Overlay

Custom Title Bar with WCO

Best Practices

1. Always Provide Fallbacks

2. Order from Most to Least Specific

3. Consider Platform Differences

4. Test on Real Devices

Don't rely solely on DevTools:

  • Install on actual Android device

  • Install on actual iOS device

  • Install on Windows/macOS/Linux desktop

  • Test in different browsers

5. Provide CSS Fallbacks

Common Mistakes

1. No Fallback Display

Problem:

Solution:

2. Wrong Order

Problem:

Solution:

3. Assuming Support

Problem:

Solution:

4. Not Testing iOS

Problem: Assuming fullscreen works like on Android

Solution: Always test on iOS Safari - fullscreen is not supported, falls back to standalone

5. Ignoring Browser Tab Mode

Problem: Only designing for standalone mode

Solution: Ensure app works in browser tab mode too (progressive enhancement)

Troubleshooting

Display Mode Not Applied

Problem: App doesn't use expected display mode

Checklist:

  • ✓ Check browser support for requested mode

  • ✓ Verify manifest is valid JSON

  • ✓ Ensure app is installed, not just bookmarked

  • ✓ Check DevTools → Application → Manifest

  • ✓ Try uninstalling and reinstalling PWA

  • ✓ Clear browser cache

Window Controls Overlay Not Working

Problem: Desktop app doesn't show window controls overlay

Solutions:

  • Verify using desktop Chrome/Edge

  • Check that PWA is installed (not running in tab)

  • Ensure display_override includes "window-controls-overlay"

  • Check DevTools console for errors

  • Verify CSS uses correct environment variables

Fullscreen Mode Issues on Mobile

Problem: App doesn't go fullscreen on mobile

Solutions:

  • Check if platform supports fullscreen (Android: yes, iOS: no)

  • Verify manifest has display_override: ["fullscreen"]

  • Ensure app is launched from home screen

  • Some browsers require user gesture for fullscreen

Platform-Specific Behavior

Android

  • fullscreen: Fully supported, hides system UI

  • standalone: Full support, standard app mode

  • minimal-ui: May fallback to standalone

  • browser: Standard browser tab

iOS (Safari)

  • fullscreen: Not supported, falls back to standalone

  • standalone: Full support, hides Safari UI

  • minimal-ui: Not supported, falls back to standalone

  • browser: Standard Safari tab

Desktop (Chrome/Edge)

  • window-controls-overlay: Full support on Windows/macOS/Linux

  • fullscreen: Supported (F11 equivalent)

  • standalone: Creates separate window

  • minimal-ui: Usually falls back to standalone

Desktop (Firefox)

  • Limited PWA support overall

  • standalone: Some support

  • Other modes: Limited or no support

Resources

  • MDN display_override: https://developer.mozilla.org/en-US/docs/Web/Manifest/display_override

  • Window Controls Overlay: https://developer.chrome.com/docs/web-platform/window-controls-overlay/

  • Display Modes Spec: https://w3c.github.io/manifest/#display-modes

  • Can I Use: https://caniuse.com/mdn-html_manifest_display_override

Last updated

Was this helpful?