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
- Ensure the app runs on https:// and in a browser that implements the Window Management API (Chrome/Edge 100+).
- 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.
- Upgrade to a recent Chrome/Edge version; verify the API is not blocked by enterprise policy (WindowManagementAllowed policy).
- 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
- Feature-detect getScreenDetails before showing second-screen UI.
- Request and await the window-management permission early in the flow.
- For iframe embeds, include allow="window-management" on the iframe.
- Always run over https:// (secure context is required).
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.