jitsi/jitsi-meet · warning

window-management-unavailable

window-management-unavailable

Error message

Window Management API unavailable; cannot place second-screen window "${id}"

What it means

This warning fires in the multi-screen (second screen) flow when the browser's Window Management API cannot resolve a target screen for the newly opened second-screen window. The code first checks whether the window handle is still owned (e.g., not closed by the user) and, if it is gone, silently returns; only when the handle exists but screen resolution failed does it log this and abort via failSecondScreenOpen. It is a graceful degradation path, not a crash.

Source

Thrown at react/features/multi-screen/functions.web.ts:1132

        handle: ISecondScreenHandle,
        pending: Promise<ScreenDetails>,
        screenId?: number): Promise<void> {
    let error: unknown;
    const resolved = await pending.then(details => details, e => {
        error = e;

        return undefined;
    });

    if (getHandle(store.getState(), id) !== handle || handle.win.closed) {
        logger.debug(`Dropping the window-management answer for second screen "${id}": `
            + 'it no longer owns that window');

        return;
    }

    if (!resolved) {
        logger.warn(`Window Management API unavailable; cannot place second-screen window "${id}"`, error);
        failSecondScreenOpen(store, id, 'window-management-unavailable', handle.win);

        return;
    }

    placeSecondScreenWindow(handle.win, resolved, screenId);
    await fullscreenSecondScreen(handle.win, id);
}

/**
 * Opens and sets up the window for an id, having established that it has no live
 * window and no other open in flight (see {@link openOrUpdateSecondScreen}).
 *
 * @param {IStore} store - The redux store.
 * @param {string} id - The window id.
 * @param {number} screenId - Optional target screen index.
 * @returns {Promise<void>}
 */

View on GitHub (pinned to 98de6219cc)

Solutions

  1. Ensure the app runs on https:// and in a browser that implements the Window Management API (Chrome/Edge 100+).
  2. Request the window-management permission before opening the second screen (navigator.userRequiresPermission / getScreenDetails() must be awaited and granted); for iframe embeds add allow="window-management" to the iframe element.
  3. Upgrade to a recent Chrome/Edge version; verify the API is not blocked by enterprise policy (WindowManagementAllowed policy).
  4. If support cannot be guaranteed, detect API availability up front and hide/disable the second-screen UI instead of attempting placement.

Example fix

// before
openSecondScreenWindow(store, id, screenId); // warns: window-management-unavailable

// after
if (typeof window !== 'undefined' && 'getScreenDetails' in window) {
    openSecondScreenWindow(store, id, screenId);
} else {
    logger.warn('Window Management API not available; second screen disabled');
}
Defensive patterns

Strategy: validation

Validate before calling

const canPlaceWindows = typeof window !== 'undefined'
    && 'getScreenDetails' in window
    && window.isSecureContext;

Type guard

const hasWindowManagement = (w: Window & { getScreenDetails?: unknown }): w is Window & { getScreenDetails: () => Promise<ScreenDetails> } =>
    typeof w.getScreenDetails === 'function' && window.isSecureContext;

Try / catch

try { await placeSecondScreen(...); } catch (e) { /* fall back to opening in a regular window */ failSecondScreenOpen(store, id, 'window-management-unavailable'); }

Prevention

When it happens

Trigger: Calling openSecondScreenWindow / placeSecondScreenWhenPermitted on a browser without the Window Management API (window.getScreenDetails / getCurrentScreens not available or not permitted), denying the 'window-management' permission prompt, running over http:// (API requires a secure context), or the API being disabled by enterprise policy. The placement promise rejects or resolves undefined while the popup handle is still alive.

Common situations: Firefox/Safari (no Window Management support), Chrome without the window-management permission granted, iframe embeds without allow="window-management" in the iframe allow attribute, http:// dev environments, headless/older Chrome versions.


AI-assisted analysis of jitsi/jitsi-meet@98de6219cc (2026-08-28). Data as JSON: /api/errors/3619c2df752d1e14. Report an issue: GitHub.