can1357/oh-my-pi · error · Error
Cannot determine a browser platform for this host
Error message
Cannot determine a browser platform for this host
What it means
computeExecutablePath needs a BrowserPlatform to build the Puppeteer cache-layout path; if none was supplied in options.platform and detectBrowserPlatform() cannot map the current host (OS/arch) to a known platform, this Error is thrown. It signals an unrecognized or unsupported host environment rather than a bad argument.
Source
Thrown at packages/utils/src/browsers.ts:167
}
/** Return the Chrome-for-Testing archive URL for a browser build. */
export function getDownloadUrl(
browser: Browser,
platform: BrowserPlatform,
buildId: string,
baseUrl = CHROME_FOR_TESTING_BASE_URL,
): URL {
if (browser !== Browser.CHROME) throw new Error(`Unsupported browser download: ${browser}`);
const archivePlatform = chromeArchivePlatform(platform);
const root = baseUrl.replace(/\/$/, "");
return new URL(`${root}/${buildId}/${archivePlatform}/chrome-${archivePlatform}.zip`);
}
/** Compute the executable path in Puppeteer's cache layout. */
export function computeExecutablePath(options: ComputeExecutablePathOptions): string {
const platform = options.platform ?? detectBrowserPlatform();
if (!platform) throw new Error("Cannot determine a browser platform for this host");
if (options.browser !== Browser.CHROME) throw new Error(`Unsupported browser executable: ${options.browser}`);
const installDir = installationDir(options.cacheDir, options.browser, platform, options.buildId);
switch (platform) {
case BrowserPlatform.LINUX:
case BrowserPlatform.LINUX_ARM:
return path.join(installDir, "chrome-linux64", "chrome");
case BrowserPlatform.MAC:
return path.join(
installDir,
"chrome-mac-x64",
"Google Chrome for Testing.app",
"Contents",
"MacOS",
"Google Chrome for Testing",
);
case BrowserPlatform.MAC_ARM:
return path.join(
installDir,View on GitHub (pinned to 9690622007)
Solutions
- Pass options.platform explicitly (e.g. BrowserPlatform.LINUX64 equivalent such as BrowserPlatform.LINUX) instead of relying on host detection.
- Map your host manually: detect OS via process.platform and arch via process.arch, then choose the closest BrowserPlatform.
- Run only on the supported matrix (Linux x64/arm, macOS x64/arm, Windows x64).
- Check detectBrowserPlatform() yourself beforehand and fail with a clearer message.
Example fix
// before
const p = computeExecutablePath({ browser: Browser.CHROME, buildId, cacheDir }); // host detection failed
// after
import { detectBrowserPlatform } from './browsers';
const platform = detectBrowserPlatform() ?? (process.platform === 'linux' && process.arch === 'x64' ? BrowserPlatform.LINUX : undefined);
if (!platform) throw new Error(`Unsupported host ${process.platform}/${process.arch}`);
const p = computeExecutablePath({ browser: Browser.CHROME, buildId, cacheDir, platform }); Defensive patterns
Strategy: fallback
Validate before calling
import { detectBrowserPlatform, BrowserPlatform } from './browsers';
const SUPPORTED = new Set(Object.values(BrowserPlatform));
const detected = detectBrowserPlatform();
if (!detected) {
console.warn(`Unrecognized host ${process.platform}/${process.arch}; supply an explicit platform`);
} Type guard
function platformIsKnown(p: ReturnType<typeof detectBrowserPlatform>): p is BrowserPlatform {
return p !== undefined;
} Try / catch
try {
const p = computeExecutablePath({ browser, buildId, cacheDir });
} catch (err) {
if (err instanceof Error && err.message === 'Cannot determine a browser platform for this host') {
// ask user for --platform or fall back to a documented default
} else throw err;
} Prevention
- Always pass options.platform explicitly in non-standard environments (containers, BSDs).
- Fail fast at startup on unsupported platform/arch combinations.
- Keep a mapping table for your deployment matrix (linux x64/arm, mac x64/arm, win x64).
When it happens
Trigger: Calling computeExecutablePath({ browser, buildId, cacheDir }) without options.platform on a host where detectBrowserPlatform() returns undefined — an OS/arch combination not covered by the LINUX/LINUX_ARM/MAC/MAC_ARM/WIN32/WIN64 mapping (e.g. freebsd, linux-riscv, win-arm).
Common situations: Running on FreeBSD, Alpine-on-unusual-arch, WSL quirks, or ARM Windows where process.platform/process.arch fall outside the supported matrix; embedding in a sandbox with an unexpected platform string.
Related errors
- Unable to resolve AWS credentials. Configure static environm
- imageUrls exposure "${name}" requires the ${name} binary on
- blob broker worker requires ${BLOB_BROKER_SOCKET_ENV} and ${
- ssh binary not found in PATH
- `omp gallery --screenshot` requires VHS, which is not instal
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/5cb8b719dfa6a7d4.
Report an issue: GitHub.