Eugeny/tabby · warning · Error
Not supported
Error message
Not supported
What it means
Thrown by `ElectronPlatformService.isProcessRunning` on any platform other than Windows. The implementation uses `windows-process-tree`'s native `getProcessList`, which is Windows-only; on macOS/Linux it has no equivalent and the API explicitly rejects rather than returning a misleading false.
Source
Thrown at tabby-electron/src/services/platform.service.ts:103
}
async installPlugin (name: string, version: string): Promise<void> {
await (promiseIpc as RendererProcessType).send('plugin-manager:install', name, version)
}
async uninstallPlugin (name: string): Promise<void> {
await (promiseIpc as RendererProcessType).send('plugin-manager:uninstall', name)
}
async isProcessRunning (name: string): Promise<boolean> {
if (this.hostApp.platform === Platform.Windows) {
return new Promise<boolean>(resolve => {
windowsProcessTreeNative.getProcessList(list => { // eslint-disable-line block-scoped-var
resolve(list.some(x => x.name === name))
}, 0)
})
} else {
throw new Error('Not supported')
}
}
getWinSCPPath (): string|null {
const key = wnr.getRegistryKey(wnr.HK.CR, 'WinSCP.Url\\DefaultIcon')
if (key?.['']) {
let detectedPath = key[''].value?.split(',')[0]
detectedPath = detectedPath?.substring(1, detectedPath.length - 1)
return detectedPath
}
return null
}
async exec (app: string, argv: string[]): Promise<void> {
await execFile(app, argv)
}
isShellIntegrationSupported (): boolean {View on GitHub (pinned to 14e2d60b9b)
Solutions
- Gate the call on platform: `if (hostApp.platform === Platform.Windows) { return isProcessRunning(name) } else { return false }`.
- Implement a fallback for POSIX using `pgrep`/`ps` if cross-platform support is required.
- Catch the error and degrade to `false` (treat 'not supported' as 'not running') when the result is non-critical.
- Move the call out of platform-agnostic code paths so non-Windows hosts never reach it.
Example fix
// before
async isProcessRunning (name: string): Promise<boolean> {
if (this.hostApp.platform === Platform.Windows) { ... }
else throw new Error('Not supported')
}
// caller guard
if (this.platform.hostApp.platform === Platform.Windows) {
running = await this.platform.isProcessRunning('WinSCP')
} Defensive patterns
Strategy: validation
Validate before calling
function canCheckProcessRunning (hostApp: { platform: Platform }): boolean {
return hostApp.platform === Platform.Windows
}
if (canCheckProcessRunning(this.hostApp)) {
running = await this.platform.isProcessRunning(name)
} else {
running = false
} Type guard
function isWindowsHost (p: { platform: Platform }): boolean {
return p.platform === Platform.Windows
} Try / catch
try {
return await this.platform.isProcessRunning(name)
} catch (e) {
if (e instanceof Error && e.message === 'Not supported') return false // non-Windows: treat as not running
throw e
} Prevention
- Gate platform-specific calls on hostApp.platform before invoking them.
- Hide Windows-only UI affordances on macOS/Linux.
- Provide a POSIX fallback (pgrep/ps) if cross-platform process checks are needed.
- Unit-test platform branches with a fake host whose platform is set per test.
When it happens
Trigger: Calling `isProcessRunning(name)` when `hostApp.platform !== Platform.Windows`. Reachable on macOS/Linux for any feature that checks for a running process (e.g. WinSCP detection, single-instance guards, dependency checks).
Common situations: Cross-platform feature that forgets to gate the call on platform; a Windows-only plugin loaded on Linux; testing on a developer's Mac for code that only runs in prod on Windows.
Related errors
- canceled
- Unsupported vault format version ${vault.version}
- Nothing selected
- Refusing access outside the target directory: ${relativePath
- Unsupported
AI-assisted analysis of Eugeny/tabby@14e2d60b9b (2026-08-12).
Data as JSON: /api/errors/cad963c08bdc64fa.
Report an issue: GitHub.