Eugeny/tabby · warning · Error

Unavailable

Error message

Unavailable

What it means

Thrown by WebHostWindow.minimize(), the web implementation of the abstract HostWindowService.minimize(). A web page cannot minimize the host OS window, so the browser build throws 'Unavailable'. Other methods like setTitle, toggleFullscreen, and close ARE implemented because the browser exposes them; minimize is not.

Source

Thrown at tabby-web/src/services/hostWindow.service.ts:44

    reload (): void {
        location.reload()
    }

    setTitle (title?: string): void {
        document.title = title ?? 'Tabby'
    }

    toggleFullscreen (): void {
        if (this.isFullscreen) {
            document.exitFullscreen()
        } else {
            document.body.requestFullscreen({ navigationUI: 'hide' })
        }
    }

    minimize (): void {
        throw new Error('Unavailable')
    }

    isMaximized (): boolean {
        return true
    }

    toggleMaximize (): void {
        throw new Error('Unavailable')
    }

    close (): void {
        window.close()
    }
}

View on GitHub (pinned to 14e2d60b9b)

Solutions

  1. Hide the minimize button when hostWindow is the Web implementation or platform is Web.
  2. Catch 'Unavailable' and show a tooltip/message that the OS window cannot be minimized from the browser.
  3. Use the desktop build where native window controls are required.
  4. Bind minimize only in the Electron host window service path.

Example fix

// before
this.window?.minimize()
// after
try {
    this.window?.minimize()
} catch {
    // web build: no native minimize available
}
Defensive patterns

Strategy: fallback

Validate before calling

import { Platform } from 'tabby-core'
if (hostApp.platform === Platform.Web) {
    // minimize unavailable in browser; disable the button
} else {
    hostWindow.minimize()
}

Type guard

import { WebHostWindow } from 'tabby-web'
function isWebWindow (w: unknown): w is WebHostWindow {
    return w instanceof WebHostWindow
}

Try / catch

try { this.window?.minimize() } catch (e) {
    if (e.message !== 'Unavailable') throw e
}

Prevention

When it happens

Trigger: hostWindow.minimize() is called in the web build. The window controls (app/lib/window.ts:390) call this when the user clicks a custom 'minimize' titlebar button rendered inside the web app.

Common situations: Custom in-app window controls (frameless-style title bar buttons) are rendered in the web build and the user clicks minimize; shared window-control component runs in both Electron and Web; a plugin triggers minimize programmatically.

Related errors


AI-assisted analysis of Eugeny/tabby@14e2d60b9b (2026-08-12). Data as JSON: /api/errors/730969da7995732e. Report an issue: GitHub.