microsoft/playwright · error · Error
ERROR: Playwright does not support ${descriptor.name} on ${h
Error message
ERROR: Playwright does not support ${descriptor.name} on ${hostPlatform} What it means
Thrown by _downloadExecutable when _downloadURLs returns an empty array — no download path template exists in DOWNLOAD_PATHS for the host platform (hostPlatform). This means Playwright has no build of the requested browser (chromium, firefox, webkit, ffmpeg, etc.) available to download for the current OS/architecture combination.
Source
Thrown at packages/playwright-core/src/server/registry/index.ts:1100
let downloadHostEnv;
if (descriptor.name.startsWith('chromium'))
downloadHostEnv = 'PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST';
else if (descriptor.name.startsWith('firefox'))
downloadHostEnv = 'PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST';
else if (descriptor.name.startsWith('webkit'))
downloadHostEnv = 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST';
const customHostOverride = (downloadHostEnv && getFromENV(downloadHostEnv)) || getFromENV('PLAYWRIGHT_DOWNLOAD_HOST');
if (customHostOverride)
mirrors = [customHostOverride];
return mirrors.map(mirror => `${mirror}/${downloadPath}`);
}
private async _downloadExecutable(descriptor: BrowsersJSONDescriptor, force: boolean, executablePath?: string) {
const downloadURLs = this._downloadURLs(descriptor);
if (!downloadURLs.length)
throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${hostPlatform}`);
if (!isOfficiallySupportedPlatform)
logPolitely(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${hostPlatform}.`);
if (descriptor.hasRevisionOverride) {
const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${hostPlatform}. Please update to the latest version of your operating system to test up-to-date browsers.`;
if (process.env.GITHUB_ACTIONS)
console.log(`::warning title=Playwright::${message}`); // eslint-disable-line no-console
else
logPolitely(message);
}
const title = this.calculateDownloadTitle(descriptor);
const downloadFileName = `playwright-download-${descriptor.name}-${hostPlatform}-${descriptor.revision}.zip`;
// PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT is a misnomer, it actually controls the socket's
// max idle timeout. Unfortunately, we cannot rename it without breaking existing user workflows.
const downloadSocketTimeoutEnv = getFromENV('PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT');
const downloadSocketTimeout = +(downloadSocketTimeoutEnv || '0') || NET_DEFAULT_TIMEOUT;
await downloadBrowserWithProgressBar(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadSocketTimeout, force).catch(e => {
throw new Error(`Failed to download ${title}, caused by\n${e.stack}`);View on GitHub (pinned to c8fc3bf8d3)
Solutions
- Upgrade Playwright to a version that publishes builds for your platform/arch.
- Run on an officially supported platform (see isOfficiallySupportedPlatform).
- Use a system-installed browser via channel instead of the hermetic download.
- Set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD and supply a compatible browser manually.
Defensive patterns
Strategy: validation
Validate before calling
// Before scripting an install, confirm the platform has a download path
const supported = ['linux','darwin','win32'].includes(process.platform)
&& ['x64','arm64'].includes(process.arch);
if (!supported) throw new Error(`No Playwright browser build for ${process.platform}/${process.arch}`); Type guard
function isDownloadSupportedPlatform(): boolean {
// Mirror Playwright's isOfficiallySupportedPlatform heuristic
return ['darwin', 'linux', 'win32'].includes(process.platform);
} Try / catch
try {
await registry.install(executables);
} catch (e) {
if (/does not support .* on/.test(e.message)) {
// fall back: use a system browser via channel, or skip
} else throw e;
} Prevention
- Run installs on officially supported OS/arch combinations.
- Upgrade Playwright to pick up newly published platform builds.
- Set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD on unsupported archs and supply a compatible browser manually.
When it happens
Trigger: Running 'playwright install <browser>' (or triggering _downloadExecutable via npm postinstall) on a platform/arch for which DOWNLOAD_PATHS has no entry and no '<unknown>' fallback — e.g. an unsupported architecture like linux-arm64 on older Playwright, or a niche OS.
Common situations: Building on linux-arm64 / alpine / freebsd where no prebuilt binary is published; running inside an emulated QEMU build; using a frozen Playwright revision whose browsers.json dropped support for the host.
Related errors
- Unsupported platform: ${process.platform}
- ${name} is not supported on ${hostPlatform}
- webkit-wsl is only supported on Windows
- WebKit via WSL is only supported on Windows
- Failed to download ${title}, caused by ${e.stack}
AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12).
Data as JSON: /api/errors/7673211117f4af6d.
Report an issue: GitHub.