Eugeny/tabby · warning · Error
Not implemented
Error message
Not implemented
What it means
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.
Source
Thrown at tabby-web/src/services/hostApp.service.ts:25
get platform (): Platform {
return Platform.Web
}
get configPlatform (): Platform {
const os = Bowser.parse(window.navigator.userAgent).os
return Platform[os.name ?? 'Windows'] ?? Platform.Windows
}
// Needed for injector metadata
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
constructor (
injector: Injector,
) {
super(injector)
}
newWindow (): void {
throw new Error('Not implemented')
}
relaunch (): void {
location.reload()
}
quit (): void {
window.close()
}
}
View on GitHub (pinned to 14e2d60b9b)
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.
Example fix
// before
this.hostApp.newWindow()
// after
if (this.hostApp.platform === Platform.Web) {
window.open(location.href)
} else {
this.hostApp.newWindow()
} Defensive patterns
Strategy: fallback
Validate before calling
import { Platform } from 'tabby-core'
if (hostApp.platform === Platform.Web) {
// no native new window; use a browser tab
window.open(location.href)
} else {
hostApp.newWindow()
} Try / catch
try { hostApp.newWindow() } catch (e) {
if (e.message === 'Not implemented') { window.open(location.href) } else throw e
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
AI-assisted analysis of Eugeny/tabby@14e2d60b9b (2026-08-12).
Data as JSON: /api/errors/8ae5eae93d470f60.
Report an issue: GitHub.