What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

The fix depends on which Puppeteer package your Linux application uses and where that application expects to find a browser. If the project uses puppeteer, run npx puppeteer browsers install from the project directory to install its managed browser. If it uses puppeteer-core, install or provide a browser yourself and point Puppeteer to it. Then check that the browser is accessible to the same user and runtime that launches the script.

The error wording varies by Puppeteer version: older setups may report Browser is not downloaded, while current documentation describes a related missing-browser failure as Could not find Chrome (ver. ...). Start with the package and version actually loaded by your application rather than assuming an old error message implies an old fix.

First identify which Puppeteer package your application loads

The two common packages have different browser-install behavior:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • puppeteer normally downloads a compatible Chrome for Testing browser when it is installed. This is usually the simplest route when you want Puppeteer to manage its paired browser.
  • puppeteer-core does not download a browser. Your application or deployment must provide one, and the launch configuration must identify it.

Check the dependency declared in the project and the version installed in the environment that runs the script. From the project directory, you can inspect the dependency with npm ls puppeteer puppeteer-core. If the project uses another package manager, inspect its dependency list and lockfile. A globally installed Puppeteer, a local dependency, or a different deployment copy may not be the package your script actually loads.

Do not diagnose the problem from the text alone. A missing managed download, an intentional use of puppeteer-core, and a browser installed in an inaccessible cache can all lead to a launch failure that sounds like “the browser is not downloaded.”

Install Puppeteer’s managed browser

Run the current browser installer

For a project using puppeteer, run this in the project context where Puppeteer is installed:

npx puppeteer browsers install

This is the documented manual remedy when a package manager has blocked dependency installation scripts. Puppeteer’s installation documentation, version 25.12.0 as observed on September 30, 2026, estimates a Linux browser download at about 282 MB. Treat that as a planning estimate, not a guaranteed size for every setup; allow sufficient network access, disk space, and time.

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

After the command completes, rerun the application as the same user and in the same environment that will launch it in normal use. A successful download in a developer shell does not establish that a service, container, CI job, or production account can see that browser.

Allow the install script if your package manager blocks it

Some package-manager configurations prevent dependency lifecycle scripts from running. In that case Puppeteer may be installed as a Node.js package without its managed browser being downloaded. You can either use the explicit browser-install command above or configure the package manager to allow Puppeteer’s postinstall script. The current Puppeteer installation guide gives npm’s allowScripts setting as an example; follow the instructions for your npm version and project rather than copying an outdated configuration or assuming every package manager uses the same setting.

Reinstalling the JavaScript package alone may not help if install scripts remain blocked. Likewise, installing Linux’s distribution Chromium package does not automatically tell Puppeteer to use it.

Check whether the runtime can see the browser cache

Puppeteer’s documented default browser cache is $HOME/.cache/puppeteer. The value of $HOME depends on the user and environment. If you install the browser as one user and run the script as another, or install it during a build stage that is not present at runtime, the application may be unable to find the downloaded executable.

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.

Compare the install and launch environments

  • Identify the operating-system user that runs the install command and the user that runs the application.
  • Check whether both environments use the same home directory and Puppeteer cache location.
  • For containers or multi-stage builds, verify that the browser files are present in the final runtime image, not only in an earlier build stage.
  • For a packaged application moved to a new location, account for Puppeteer’s warning that a globally cached browser can cause problems after relocation.

When the default cache is not suitable, set an appropriate cacheDirectory in Puppeteer’s configuration and rerun npx puppeteer browsers install in the environment that will use it. The important point is consistency: the installer and runtime must agree about where the managed browser lives, and the runtime user must have access to it.

Choose between a managed browser and an external browser

There are two valid setup models. Choose one deliberately so that installation, updates, and launch configuration stay aligned.

Setup Who provides the browser What to configure Compatibility consideration
puppeteer with its managed browser Puppeteer downloads its paired Chrome for Testing browser. Run the browser installer if needed and ensure the configured cache is available to the runtime. The paired Chrome for Testing build is the version Puppeteer works best with.
puppeteer-core or an externally managed browser Your application, operating system, container, or deployment process installs and updates the browser. Pass the real executable path with executablePath, or use a supported channel where the browser is installed in a standard location. Puppeteer does not guarantee identical compatibility with every other Chrome version.

Launch with an externally installed browser

Use the actual Linux path for the browser executable available in your environment. For example, replace the illustrative path below with the result appropriate to your system; do not assume that a particular distribution installs Chromium at that location.

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/your/chrome-or-chromium',
    headless: true,
  });

  try {
    const page = await browser.newPage();
    await page.goto('https://example.com');
    console.log(await page.title());
  } finally {
    await browser.close();
  }
})();

For puppeteer-core, Puppeteer’s launch API requires an executablePath or channel. A channel can select a browser installed in a standard location, but it is not a substitute for confirming that the browser is actually installed and available to the runtime. If you use the managed puppeteer package instead, avoid pinning an unrelated system browser unless you have a reason to manage compatibility yourself.

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

Separate browser-download failures from browser-not-found failures

A browser can be absent because installation never ran, or because the download attempt itself failed. If the installer reports a network error, check the network route used by the install process separately from cache and executable-path configuration.

Puppeteer documents the environment variables HTTP_PROXY, HTTPS_PROXY, and NO_PROXY for proxy configuration used to download and run the browser. Browser downloads through a proxy require the optional proxy-agent package. Confirm that the proxy settings are present in the shell, build job, or service that actually performs the download; settings in an interactive terminal do not automatically carry into another environment.

If the download completed but launch still says the browser cannot be found, focus instead on package choice, cache directory, user identity, deployment files, and launch configuration. Proxy troubleshooting will not fix a runtime that is looking in the wrong cache.

Troubleshooting common causes

Symptom Likely cause What to do
Install completed, but launch reports that Chrome cannot be found. The script uses puppeteer-core, or the runtime cannot see the managed browser cache. Confirm the loaded package. For puppeteer-core, supply executablePath or channel. Otherwise compare install and runtime users and cache locations.
The package is present but no managed browser was downloaded. The package manager blocked Puppeteer’s install script. Run npx puppeteer browsers install from the project context, or allow the Puppeteer postinstall script according to the package manager’s current configuration.
The browser works in a terminal but not in a service or container. The service runs under a different user, or the deployment image does not contain the browser/cache. Install or copy the browser into the runtime environment and configure a cache directory it can access. Verify using the same service account and final image used for launch.
The browser installer cannot fetch Chrome. Network restrictions, proxy configuration, or unavailable download access. Check outbound access and HTTP_PROXY, HTTPS_PROXY, and NO_PROXY; for proxy downloads, ensure the optional proxy-agent package is available.
System Chromium is installed, but Puppeteer still reports a missing browser. Installing a system browser does not select it for Puppeteer. Use the executable’s real path in executablePath, or a suitable channel for a standard installation location.
A manually selected Chrome version launches but behaves unexpectedly. The browser is not Puppeteer’s paired Chrome for Testing build, and compatibility may differ. Prefer the paired managed browser where possible, or validate the selected browser against the Puppeteer version you deploy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Keep deployments reproducible

For repeatable Linux deployments, treat the browser as an explicit runtime dependency rather than assuming it appears wherever Node.js is installed. Pin and deploy the project’s intended Puppeteer dependency, install its managed browser during a build step that carries it into the runtime, and keep the cache path stable. If your team owns browser installation separately, record the browser package or executable path in deployment configuration and test the same launch path in the final environment.

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

Browser downloads are substantial: Puppeteer’s current installation guide gives an approximate Linux download size of 282 MB for documentation version 25.12.0 (observed September 30, 2026). Plan disk and transfer capacity accordingly, especially where each clean build starts without a cache. Do not mistake a cached browser for an install failure, or assume a cache will persist between ephemeral CI jobs unless your pipeline preserves it.

For compatibility-sensitive work, Puppeteer’s paired Chrome for Testing browser is the safer default because that is the browser build the project says it works best with. An external browser can be useful when your deployment team controls browser updates or requires a system installation, but then that team also owns version selection and launch-path correctness.

Or skip the browser setup

If your goal is to capture a website screenshot or PDF rather than to run arbitrary browser automation, ScreenshotNeo offers a one-request alternative. It is a website screenshot API and MCP server for developers; it does not install Puppeteer into your Linux project or replace Puppeteer for tasks that require interactive automation.

For a quick screenshot request, substitute your API key and target URL:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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. ScreenshotNeo accepts a URL and can return PNG, JPEG, WebP, or PDF. Its documented cleanup can accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

ScreenshotNeo’s Free plan includes 1,000 screenshots per month with no card required; paid plans start at $5 for 3,000 screenshots. Every feature is available on every plan.

Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.

Frequently Asked Questions

Does installing Chromium from my Linux distribution fix Puppeteer’s missing-browser error by itself?

No. The executable must also be selected in Puppeteer’s launch configuration, unless you are using a supported channel that finds the installed browser.

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

Can I use this fix on Linux Mint?

The package, cache, and launch checks apply to Linux environments generally, but the exact executable path for a system browser depends on the installation.

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.