Puppeteer’s getInstalledBrowsers() lists browsers installed in a Puppeteer cache; it does not scan the whole computer for Chrome. To resolve a system Chrome installation, select a supported channel, or pass its exact location with executablePath. These are separate discovery and launch paths.
What “installed browser metadata” means in Puppeteer
There are two common meanings of “installed browser.” Puppeteer can manage browser downloads in a cache, whose entries can be enumerated with getInstalledBrowsers(). Separately, Puppeteer can resolve a Chrome release channel at a known system location, or launch a binary whose path you provide. The cache API is not a general operating-system browser scanner.
As an Amazon Associate I earn from qualifying purchases.
List browsers in Puppeteer’s cache
The supported @puppeteer/browsers API is getInstalledBrowsers(options). Supply the cache directory you want to inspect:
import {getInstalledBrowsers} from '@puppeteer/browsers';
const browsers = await getInstalledBrowsers({
cacheDir: '/path/to/puppeteer-cache',
});
for (const browser of browsers) {
console.log({
browser: browser.browser,
buildId: browser.buildId,
platform: browser.platform,
executablePath: browser.executablePath,
installationRoot: browser.path,
});
}
Replace the example path with the cache directory used by your application. Each returned InstalledBrowser represents a cached installation and documents its browser identity, build ID, platform, executable path, installation root, and metadata methods. The class constructor is documented as internal; use the exported API rather than constructing or subclassing the model yourself. See the @puppeteer/browsers API and InstalledBrowser reference.
#1 Best Overall
Metadata is not automatically the live runtime version
InstalledBrowser exposes readMetadata() and writeMetadata(metadata), but the documented API reference does not establish that readMetadata() returns a browser’s live runtime version. Do not treat it as a version probe based on its name alone. If you need the version reported by the actual binary, run that executable with its version option or launch it and inspect the browser version through Puppeteer; ensure the binary you probe is the one you intend to use.
Find or select system Chrome
For an operating-system Chrome installation, the browser utility API provides computeSystemExecutablePath(), which resolves a requested Chrome release channel to an expected executable path in known system locations. For example:
import {Browser, ChromeReleaseChannel, computeSystemExecutablePath} from '@puppeteer/browsers';
const executablePath = computeSystemExecutablePath({
browser: Browser.CHROME,
channel: ChromeReleaseChannel.STABLE,
});
console.log(executablePath);
This is channel-based lookup, not a scan for every browser installed by the operating system or another package manager. It can throw when the expected executable is not present. The exact channel values and function options are version-dependent; check the current function reference.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #2
Choose the launch option that matches the installation
| Need | Mechanism | What it does | Limit |
|---|---|---|---|
| Enumerate Puppeteer-managed installations | getInstalledBrowsers({cacheDir}) |
Lists browser entries and installation metadata in that cache | Not a host-wide browser scan |
| Use Chrome at a known system location | channel in launch(), or computeSystemExecutablePath() |
Resolves a Chrome release channel to an expected system executable | Known Chrome locations only; lookup can fail |
| Use a custom or package-managed binary | executablePath |
Uses the exact path supplied by the caller | Compatibility with arbitrary external versions is not guaranteed |
For example, with the standard puppeteer package:
import puppeteer from 'puppeteer';
// Use a known system Chrome channel:
const browser = await puppeteer.launch({channel: 'chrome'});
// Or select a specific binary instead:
// const browser = await puppeteer.launch({executablePath: '/absolute/path/to/chrome'});
await browser.close();
Use one selection method appropriate to the target installation. With puppeteer-core, provide either channel or executablePath; it does not download Chrome or choose a browser for you. Refer to the LaunchOptions reference for supported launch options.
Cache paths, packages, and configuration
The standard puppeteer package downloads Chrome for Testing by default. Puppeteer’s documentation says the default browser cache has been ~/.cache/puppeteer since v19. The current configuration API exposes cacheDirectory, and PUPPETEER_CACHE_DIR can override it. Your listing will only be useful if it points at the same cache location used for installation.
- Check the project’s Puppeteer configuration and
PUPPETEER_CACHE_DIRbefore concluding the cache is empty. - Check whether browser downloads were skipped through configuration or
PUPPETEER_SKIP_DOWNLOAD. - Remember that
puppeteer-coredoes not download Chrome; an empty Puppeteer cache may be expected.
Configuration details are in Puppeteer’s Configuration reference. The downloaded Chrome for Testing browser is the pairing Puppeteer supports best. External Chrome versions are not guaranteed compatible; check the current supported browsers and version mapping when compatibility matters. The documentation referenced here identifies Puppeteer 25.12.0; its compatibility mapping can change with releases.
Rank #3
Troubleshooting missing browsers and launch failures
The cache listing is empty
- Confirm the
cacheDirargument points to the actual Puppeteer cache. - Check
cacheDirectoryand thePUPPETEER_CACHE_DIRenvironment variable. - Confirm a browser download was not skipped and that the project uses
puppeteerrather thanpuppeteer-core.
“Could not find Chrome” after installation
Some package managers block installation scripts, so Puppeteer’s browser download may not have run. Allow the package install script or install the browser manually using Puppeteer’s browser command, as described in the installation guide. Then inspect the cache directory configured for that project.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
System-channel lookup throws
The requested channel’s executable may not exist in a location Puppeteer recognizes. Install that Chrome channel in the expected system location, use a different available channel, or pass the binary’s absolute path with executablePath.
A browser launches but behaves incompatibly
Check which executable was selected and compare its version with Puppeteer’s supported browser mapping. When using an externally managed browser, test the exact Puppeteer/browser combination; compatibility is not guaranteed for every external version.
Rank #4
Or skip the browser setup
If your goal is a website screenshot rather than browser automation or cache inspection, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns an image or PDF; here is the cURL form:
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. It can accept cookie and consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses indicate page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents using Claude, Cursor, or another MCP client. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.
Sign up for 1,000 free screenshots a month, with no card required.
Frequently Asked Questions
Does Puppeteer automatically find every browser installed on my computer?
No. Its cache listing covers Puppeteer-managed cache entries; system Chrome resolution checks known locations for a selected channel.
Does getInstalledBrowsers() tell me Chrome’s live version?
It returns documented installation metadata, but the API reference does not establish that readMetadata() reports the live runtime version.
Quick Recap
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.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitches




