{"record":{"id":"8ae5eae93d470f60","repo":"Eugeny/tabby","slug":"not-implemented","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"tabby-web/src/services/hostApp.service.ts","lineNumber":25,"sourceCode":"    get platform (): Platform {\n        return Platform.Web\n    }\n\n    get configPlatform (): Platform {\n        const os = Bowser.parse(window.navigator.userAgent).os\n        return Platform[os.name ?? 'Windows'] ?? Platform.Windows\n    }\n\n    // Needed for injector metadata\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n    ) {\n        super(injector)\n    }\n\n    newWindow (): void {\n        throw new Error('Not implemented')\n    }\n\n    relaunch (): void {\n        location.reload()\n    }\n\n    quit (): void {\n        window.close()\n    }\n}\n","sourceCodeStart":7,"sourceCodeEnd":36,"githubUrl":"https://github.com/Eugeny/tabby/blob/14e2d60b9b6dee84a53c37f05eefeb803787de04/tabby-web/src/services/hostApp.service.ts#L7-L36","documentation":"Thrown by WebHostApp.newWindow(), the web implementation of the abstract HostAppService.newWindow(). A browser tab cannot spawn a new native application window the way Electron's BrowserWindow can, so the web build throws 'Not implemented'. relaunch() and quit() are implemented (reload / window.close), but newWindow is not.","triggerScenarios":"hostApp.newWindow() is invoked while running the web build. Callers include the dock menu (dockMenu.service.ts in electron only), CLI new-window path (cli.ts:87), and app lifecycle code (app/lib/app.ts, index.ts) that assume a desktop environment.","commonSituations":"A keyboard shortcut or menu item bound to 'New window' is triggered in the web build; shared app code that opens a new window on startup runs in the browser context; a plugin calls hostApp.newWindow() unconditionally.","solutions":["Gate 'new window' actions on the platform being non-Web, or open a new browser tab via window.open as a web equivalent.","Catch 'Not implemented' and fall back to window.open(location.href) for the web build.","Hide/disable the 'New window' menu entry when hostApp.platform === Platform.Web.","Use the desktop build if native multi-window is required."],"exampleFix":"// before\nthis.hostApp.newWindow()\n// after\nif (this.hostApp.platform === Platform.Web) {\n    window.open(location.href)\n} else {\n    this.hostApp.newWindow()\n}","handlingStrategy":"fallback","validationCode":"import { Platform } from 'tabby-core'\nif (hostApp.platform === Platform.Web) {\n    // no native new window; use a browser tab\n    window.open(location.href)\n} else {\n    hostApp.newWindow()\n}","typeGuard":null,"tryCatchPattern":"try { hostApp.newWindow() } catch (e) {\n    if (e.message === 'Not implemented') { window.open(location.href) } else throw e\n}","preventionTips":["Bind 'New window' actions to platform-aware handlers.","Hide the entry on Platform.Web or map it to window.open.","Use the desktop build when true multi-window is required."],"tags":["web","platform","window-management","unsupported"],"backgroundTag":null,"analyzedSha":"14e2d60b9b6dee84a53c37f05eefeb803787de04","analyzedAt":"2026-08-12T11:46:48.773Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}