# @puppeteer/browsers Manage and launch browsers/drivers from a CLI or programmatically. ## System requirements - A compatible Node version (see `engines` in `package.json`). - For Firefox downloads: - Linux builds: `xz` and `bzip2` utilities are required to unpack `.tar.gz` and `.tar.bz2` archives. - MacOS builds: `hdiutil` is required to unpack `.dmg` archives. ## CLI Use `npx` to run the CLI: ```bash # This will install and run the @puppeteer/browsers package. # If it is already installed in the current directory, the installed # version will be used. npx @puppeteer/browsers --help ``` Built-in per-command `help` will provide all documentation you need to use the CLI. ```bash npx @puppeteer/browsers --help # help for all commands npx @puppeteer/browsers install --help # help for the install command npx @puppeteer/browsers launch --help # help for the launch command npx @puppeteer/browsers clear --help # help for the clear command npx @puppeteer/browsers list --help # help for the list command ``` You can specify the version of the `@puppeteer/browsers` when using `npx`: ```bash # Always install and use the latest version from the registry. npx @puppeteer/browsers@latest --help # Always use a specifc version. npx @puppeteer/browsers@2.4.1 --help # Always install the latest version and automatically confirm the installation. npx --yes @puppeteer/browsers@latest --help ``` To clear all installed browsers, use the `clear` command: ```bash npx @puppeteer/browsers clear ``` To list all installed browsers, use the `list` command: ```bash npx @puppeteer/browsers list ``` Some example to give an idea of what the CLI looks like (use the `--help` command for more examples): ```sh # Download the latest available Chrome for Testing binary corresponding to the Stable channel. npx @puppeteer/browsers install chrome@stable # Download a specific Chrome for Testing version. npx @puppeteer/browsers install chrome@116.0.5793.0 # Download the latest Chrome for Testing version for the given milestone. npx @puppeteer/browsers install chrome@117 # Download the latest available ChromeDriver version corresponding to the Canary channel. npx @puppeteer/browsers install chromedriver@canary # Download a specific ChromeDriver version. npx @puppeteer/browsers install chromedriver@116.0.5793.0 # On Ubuntu/Debian and only for Chrome, install the browser and required system dependencies. # If the browser version has already been installed, the command # will still attempt to install system dependencies. # Requires root privileges. npx puppeteer browsers install chrome --install-deps ``` ## Known limitations 1. Launching the system browsers is only possible for Chrome/Chromium. ## Custom Providers You can implement custom browser providers to download from alternative sources like corporate mirrors, private repositories, or specialized browser builds. ```typescript import { BrowserProvider, DownloadOptions, Browser, BrowserPlatform, } from '@puppeteer/browsers'; class SimpleMirrorProvider implements BrowserProvider { constructor(private mirrorUrl: string) {} supports(options: DownloadOptions): boolean { return options.browser === Browser.CHROME; } getDownloadUrl(options: DownloadOptions): URL | null { const {buildId, platform} = options; const filenameMap = { [BrowserPlatform.LINUX]: 'chrome-linux64.zip', [BrowserPlatform.MAC]: 'chrome-mac-x64.zip', [BrowserPlatform.MAC_ARM]: 'chrome-mac-arm64.zip', [BrowserPlatform.WIN32]: 'chrome-win32.zip', [BrowserPlatform.WIN64]: 'chrome-win64.zip', }; const filename = filenameMap[platform]; if (!filename) return null; return new URL(`${this.mirrorUrl}/chrome/${buildId}/${filename}`); } getExecutablePath(options: DownloadOptions): string { const {platform} = options; if ( platform === BrowserPlatform.MAC || platform === BrowserPlatform.MAC_ARM ) { return 'chrome-mac/Chromium.app/Contents/MacOS/Chromium'; } else if (platform === BrowserPlatform.LINUX) { return 'chrome-linux64/chrome'; } else if (platform.includes('win')) { return 'chrome-win64/chrome.exe'; } throw new Error(`Unsupported platform: ${platform}`); } } ``` Use with the `install` API: ```typescript import {install} from '@puppeteer/browsers'; const customProvider = new SimpleMirrorProvider('https://internal.company.com'); await install({ browser: Browser.CHROME, buildId: '120.0.6099.109', platform: BrowserPlatform.LINUX, cacheDir: '/tmp/puppeteer-cache', providers: [customProvider], }); ``` Multiple providers can be chained - they're tried in order until one succeeds, with a default provider such as Chrome for Testing, as an automatic fallback. :::caution Custom providers are NOT officially supported by Puppeteer. You accept full responsibility for binary compatibility, testing, and maintenance. ::: ## API The programmatic API allows installing and launching browsers from your code. See the `test` folder for examples on how to use the `install`, `canInstall`, `launch`, `computeExecutablePath`, `computeSystemExecutablePath` and other methods.