microsoft/playwright · error · Error
Chromium distribution '${name}' is not supported on ${proces
Error message
Chromium distribution '${name}' is not supported on ${process.platform} What it means
Thrown by the executable-path resolver inside _createChromiumChannel when a system-installed Chromium-channel browser (e.g. 'chrome', 'chrome-beta', 'msedge') is requested on a platform for which no lookup path was registered. The lookAt map keyed by 'linux'|'darwin'|'win32' returns a falsy suffix for process.platform, so Playwright has no known location to probe. It surfaces via executablePathOrDie, which ChromiumType.launch calls when channel is set and the bundled chromium is not used.
Source
Thrown at packages/playwright-core/src/server/registry/index.ts:819
executablePath: () => undefined,
executablePathOrDie: () => '',
installType: 'download-on-demand',
_validateHostRequirements: () => Promise.resolve(),
downloadURLs: this._downloadURLs(android),
title: android.title,
revision: android.revision,
_install: force => this._downloadExecutable(android, force),
_dependencyGroup: 'tools',
_isHermeticInstallation: true,
});
}
private _createChromiumChannel(name: string, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise<void>): ExecutableImpl {
const executablePath = (sdkLanguage: string, shouldThrow: boolean) => {
const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32'];
if (!suffix) {
if (shouldThrow)
throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
return undefined;
}
const prefixes = (process.platform === 'win32' ? [
process.env.LOCALAPPDATA,
process.env.PROGRAMFILES,
process.env['PROGRAMFILES(X86)'],
// In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
process.env.HOMEDRIVE + '\\Program Files',
process.env.HOMEDRIVE + '\\Program Files (x86)',
].filter(Boolean) : ['']) as string[];
for (const prefix of prefixes) {
const executablePath = path.join(prefix, suffix);
if (canAccessFile(executablePath))
return executablePath;
}
if (!shouldThrow)
return undefined;View on GitHub (pinned to c8fc3bf8d3)
Solutions
- Omit the channel option so Playwright falls back to the hermetically-installed bundled chromium.
- Run 'npx playwright install <channel>' on the target OS to register and install the channel before launching.
- Gate the channel value on process.platform in your launch config so an unsupported platform uses bundled chromium instead.
- Upgrade Playwright — newer versions add platform paths for additional channels.
Example fix
// before
const browser = await chromium.launch({ channel: 'chrome' });
// after
const browser = await chromium.launch({
channel: ['win32','darwin'].includes(process.platform) ? 'chrome' : undefined,
}); Defensive patterns
Strategy: validation
Validate before calling
import { registry } from 'playwright-core/lib/server/registry';
const channel = 'chrome';
const exec = registry.findExecutable(channel);
// Non-throwing probe: returns undefined instead of throwing
const path = exec?.executablePath();
if (!path) {
// fall back to bundled chromium — do not call executablePathOrDie
} Type guard
function isChannelSupportedOnPlatform(channel: string): boolean {
const exec = registry.findExecutable(channel);
if (!exec) return false;
try { exec.executablePath(); return true; } catch { return false; }
} Try / catch
try {
browser = await chromium.launch({ channel });
} catch (e) {
if (/not supported on/.test(e.message))
browser = await chromium.launch(); // bundled fallback
else throw e;
} Prevention
- Make the channel option conditional on process.platform.
- Probe executablePath() (non-throwing) before launching with a channel.
- In CI, install the channel on every OS in the matrix before running tests.
When it happens
Trigger: Calling chromium.launch({ channel: 'chrome' }) (or 'chrome-beta','msedge','msedge-beta','msedge-dev') on an OS where that channel's lookAt entry is undefined or empty; or invoking executablePathOrDie on the registry Executable for that channel. The error fires only in the shouldThrow=true branch (executablePathOrDie), not in the non-throwing executablePath() probe.
Common situations: Running a CI matrix that sets a fixed channel name but executes on an OS that does not ship that channel; using a Playwright version that predates a channel's platform support; assuming 'chrome' is resolvable on a minimal Linux container that only has the bundled chromium.
Related errors
- Chromium distribution '${name}' is not found${location}${ins
- Browser is not supported on current platform
- Failed to launch ${this._name} because executable doesn't ex
- Firefox distribution '${name}' is not supported on ${process
- Cannot launch Firefox with relative home directory. Did you
AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12).
Data as JSON: /api/errors/6faf4e106484d94e.
Report an issue: GitHub.