Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set PUPPETEER_SKIP_DOWNLOAD=true before installing puppeteer only if your environment already provides a Chrome or Chromium executable compatible with your Puppeteer version. The setting skips Puppeteer’s installation-time browser download; it does not install a browser. When you launch, provide the browser’s path with executablePath (or use a supported channel). If you want Puppeteer to manage its browser, leave the setting unset and install the browser with npx puppeteer browsers install if it was not downloaded during package installation.

What PUPPETEER_SKIP_DOWNLOAD does

PUPPETEER_SKIP_DOWNLOAD controls browser downloading during Puppeteer’s installation process. Set it to true and Puppeteer skips that download. Environment variables take precedence over configuration-file options, and browser-specific download overrides also exist.

This setting acts before your application launches. Passing an option to puppeteer.launch() cannot undo a skipped installation download. If you change the setting after installing the package, rerun the relevant installation step or install the browser explicitly.

  • Use it when your image, host, or deployment environment already installs a compatible browser and you want to manage that browser yourself.
  • Do not use it as a way to make Puppeteer run without Chrome or Chromium.
  • If you want Puppeteer’s managed browser, leave the variable unset and ensure the browser installation step runs successfully.

Choose who manages the browser

Approach Browser owner Install-time network Version and runtime responsibility
Puppeteer-managed browser Puppeteer downloads a compatible Chrome for Testing build during installation, or through its browser installer. Browser download requires network access unless the browser is already available through another supported setup. Puppeteer selects a compatible build; the installer and cache must be available to the runtime user.
Preinstalled browser with PUPPETEER_SKIP_DOWNLOAD You or the container image installs Chrome or Chromium. You avoid Puppeteer’s browser download, though your own system package installation may need network access. You must keep the browser compatible with Puppeteer, supply its executable path or channel, and provide its OS dependencies.
puppeteer-core You manage the browser entirely. The package does not download Chrome. Configuration defaults from Puppeteer are not applied; provide a path or supported channel yourself.

Skipping Puppeteer’s download can suit a container that deliberately installs its own browser. It also transfers responsibility for browser version, location, system libraries, and runtime access to the image or application operator. The Puppeteer-managed route is simpler when you want Puppeteer to select and store a compatible browser. The installation guide documents the default cache location as $HOME/.cache/puppeteer from Puppeteer v19.0.0.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use a preinstalled Chrome or Chromium

Set the variable in the same environment that runs the package installation. This example uses npm and a common Linux path; change the path to the actual executable in your environment.

  1. Install Chrome or Chromium first. Confirm the executable exists in the build or host environment, and check that it is compatible with the Puppeteer version you install.
  2. Skip Puppeteer’s download during installation:
    PUPPETEER_SKIP_DOWNLOAD=true npm install puppeteer
  3. Launch with the installed executable:
    import puppeteer from 'puppeteer';
    
    const browser = await puppeteer.launch({
      executablePath:
        process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/google-chrome-stable',
    });
    
    try {
      const page = await browser.newPage();
      await page.goto('https://example.com');
      console.log(await page.title());
    } finally {
      await browser.close();
    }

PUPPETEER_EXECUTABLE_PATH is a convenient way to make the path configurable across environments. Set it to the installed browser’s real executable, or replace the fallback path in the example. Do not assume that every Linux image uses /usr/bin/google-chrome-stable; the image determines the location.

Let Puppeteer install its browser

If you do not need to supply your own browser, omit PUPPETEER_SKIP_DOWNLOAD and install the package normally. When the package manager blocked lifecycle scripts or the browser is otherwise missing, run Puppeteer’s browser installer explicitly:

Rank #2
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option
npm install puppeteer
npx puppeteer browsers install

The second command installs the browser managed for Puppeteer. If the variable was previously set, changing it alone does not retroactively fetch Chrome: rerun the appropriate installation or browser-install step. Check that the browser cache created during installation is accessible to the user and environment that launches the application.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set it in Docker without losing the browser

The skip setting is appropriate in a Docker image that installs google-chrome-stable itself. Configure the variable for the install stage, then point Puppeteer at the installed executable at runtime. The image must also contain the browser’s runtime system dependencies; skipping the download does not install those libraries.

ENV PUPPETEER_SKIP_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable

Use the path that is correct for the browser package in your image. If the browser is installed in a build stage but the application runs in a different final stage, the executable must exist in the final image too. Likewise, do not assume that a browser cache created for one build user will be readable by a different runtime user.

Keep the browser cache and runtime user consistent

When Puppeteer manages the browser, its cache location is part of the deployment setup. A build process may download Chrome successfully while the application later fails because it runs under another user or looks in a different home directory.

  • Use PUPPETEER_CACHE_DIR or Puppeteer’s cacheDirectory configuration when you need a specific cache location.
  • Make the configured cache path consistent between browser installation and application runtime.
  • Ensure the runtime user can read the browser files and execute the browser binary.
  • For a self-managed browser, verify the executable path in the final runtime environment rather than only in the build environment.

Does PUPPETEER_SKIP_DOWNLOAD work with puppeteer-core?

puppeteer-core is intended for setups where you manage the browser yourself. It does not download Chrome and ignores Puppeteer configuration defaults, so setting PUPPETEER_SKIP_DOWNLOAD is not the mechanism that provisions or selects its browser. Supply a compatible browser through executablePath or a standard channel when launching.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import puppeteer from 'puppeteer-core';

const browser = await puppeteer.launch({
  executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
});

In this example, make sure the environment variable is set to an actual compatible executable before the application runs. If you want Puppeteer to download and manage Chrome, use puppeteer rather than expecting puppeteer-core to do so.

Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers

Troubleshoot missing-browser and launch errors

Symptom Likely cause Fix
Puppeteer reports that Chrome cannot be found, or launch fails because no browser is available. The download was skipped and no compatible browser is installed or discoverable. Install a compatible browser and set executablePath, or unset the skip setting and run npx puppeteer browsers install.
Changing the variable has no effect after an install. The setting controls installation-time behavior, not an already-completed install or a later launch call. Rerun the relevant installation step or run the browser installer after correcting the setting.
puppeteer-core still has no browser. puppeteer-core does not download Chrome and does not apply Puppeteer configuration defaults. Manage the browser separately and supply an explicit executable path or supported channel.
Chrome exists after the build but is missing at runtime. The browser or its cache is in a different stage, directory, home folder, or user context. Keep the browser in the final runtime environment, align PUPPETEER_CACHE_DIR or cacheDirectory, and grant the runtime user access.
The package installed, but no managed browser was downloaded. The package manager may have blocked lifecycle scripts. Run npx puppeteer browsers install manually, or configure the package manager to allow Puppeteer’s install script.
The browser binary exists but will not launch in a container. The image may be missing required runtime system dependencies, or the path may not point to the executable. Install the browser’s runtime dependencies in the image and verify the configured path from the application’s runtime user.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Performance, reproducibility, and deployment trade-offs

Skipping the download can avoid fetching Puppeteer’s managed browser during package installation, which is useful when the deployment image already installs its browser or the build environment cannot run the download step. It does not by itself guarantee a smaller final image: that depends on whether the image already contains a browser, where it is installed, and what your build copies into the runtime stage.

A Puppeteer-managed browser makes the browser choice part of the package’s installation workflow. A self-managed browser lets the operator control its installation, but reproducibility then depends on pinning and distributing the browser version consistently with the application. In either arrangement, build and runtime need a compatible executable, and any browser cache must remain portable and readable across those environments.

For deployments that should not fetch a browser at runtime, install or cache the browser during the image build and verify the final image before release. For environments that can download during setup, the explicit browser installer provides a recovery path when package-manager scripts were suppressed. Neither choice removes the need to account for browser compatibility and operating-system dependencies.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Or skip the browser setup

If you need a website screenshot rather than a locally managed Puppeteer browser, ScreenshotNeo is a website screenshot API and MCP server. A single GET request returns an image or PDF. Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; bot checks, blank pages, and failed loads are not billed. Its MCP server lets AI agents use screenshot tools, and the free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.

Example cURL request, saving a WebP capture of Stripe (replace the URL as needed):

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for request options. To try it, sign up for 1,000 free screenshots a month with no card.

Frequently Asked Questions

Can I pass PUPPETEER_SKIP_DOWNLOAD to puppeteer.launch()?

No. It controls installation-time downloading, not browser selection at launch.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Does skipping the download disable screenshot capture?

No, but Puppeteer still needs access to a compatible browser executable.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.