Puppeteer’s installed-browser metadata is an inventory of browser builds in a specific Puppeteer-managed cache—not a scan of every browser installed on your computer. Use getInstalledBrowsers({cacheDir}) from @puppeteer/browsers to retrieve records, or run npx @puppeteer/browsers list to list cached browsers from the terminal.
What does “installed browser metadata” mean in Puppeteer?
In the @puppeteer/browsers package, installed-browser metadata describes browser builds managed in a browser cache. The getInstalledBrowsers() API returns a promise of InstalledBrowser[] for the cache directory you specify. It does not search the whole machine for every browser installation. The official API reference describes its result as metadata about browsers installed in the cache directory.
This distinction matters when a browser is available to launch but does not appear in the inventory: it may be a regular system installation or a binary outside the cache being enumerated. Conversely, a cache record identifies a managed installation but does not guarantee that it will be compatible with every Puppeteer version or launch configuration.
How do I list browsers installed by Puppeteer?
Use the command line
The documented CLI command lists browsers in the Puppeteer browser cache:
#1 Best Overall
npx @puppeteer/browsers list
Run it in the environment whose cache you want to inspect. If the CLI is not available in the project context, ensure @puppeteer/browsers is installed or invoke it through the package runner appropriate for your setup.
Use the JavaScript API
Install the package if it is not already a project dependency, then pass the cache root you want to enumerate:
Rank #2
- HTML CSS Design and Build Web Sites
- Comes with secure packaging
- It can be a gift option
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,
path: browser.path,
executablePath: browser.executablePath,
});
}
Replace /path/to/puppeteer-cache with the cache root used by your installation. The API is asynchronous, so await its promise. Its option is cacheDir; this is the root to enumerate, not the path of one browser executable. See GetInstalledBrowsersOptions for the option and the @puppeteer/browsers API overview.
What do the InstalledBrowser fields mean?
| Field | Meaning | How to use it |
|---|---|---|
browser |
The browser identity recorded for the installation. | Distinguishes the browser product in the cache inventory. |
buildId |
The identifier for a specific browser build. | Use it to distinguish builds; installation options use the build ID to identify binaries and for caching. |
platform |
The platform associated with the browser build. | Provides platform context for the cached installation. |
path |
The root directory of the installation folder. | Use it when you need the installation directory; do not treat it as the executable itself. |
executablePath |
The executable location for the browser. | Use this when a path to the browser binary is required. |
The InstalledBrowser reference distinguishes path, the installation-folder root, from the executable binary path, and points to computeExecutablePath() for locating the executable. The InstalledBrowser constructor is internal; retrieve records through package APIs rather than constructing instances yourself.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #3
Which cache directory should I enumerate?
The cache root must match the location where the browser builds were installed. Puppeteer’s configuration names this setting cacheDirectory. Its documented default is path.join(os.homedir(), '.cache', 'puppeteer'), and PUPPETEER_CACHE_DIR overrides that configuration. The lower-level @puppeteer/browsers inventory API takes its own cacheDir option, so pass the corresponding root when calling it. See the Puppeteer configuration reference.
Do not assume that the API automatically reads the same setting as every Puppeteer configuration in your application. If your project or deployment sets a non-default cache directory, use that actual path for enumeration. A mismatch can produce an empty inventory even when browser files exist elsewhere.
Rank #4
- 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
How is cache inventory different from choosing a browser to launch?
| Mechanism | Discovery or selection | What it establishes |
|---|---|---|
getInstalledBrowsers({cacheDir}) |
Enumerates browser records in the specified managed cache root. | Which managed builds are represented in that cache. |
launch({channel}) |
Looks for a regular Chrome installation in known system locations. | A launch selection by Chrome channel; it is not a cache inventory. |
launch({executablePath}) |
Uses the binary path supplied by the caller. | A launch selection by explicit executable location. |
These are separate mechanisms: finding a system Chrome through channel, or selecting a binary by executablePath, does not mean that browser will appear in a cache listing. Puppeteer states that it only guarantees compatibility with its bundled browser. Consult LaunchOptions before relying on a non-bundled browser.
What installation details affect the metadata?
Browser installation options include the browser, buildId, cacheDir, and platform. The build ID identifies the binary build and is used for caching, so two records for different builds should not be treated as interchangeable merely because they are the same browser product. The InstallOptions reference documents these installation inputs.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Best Value
Troubleshooting an empty or unexpected browser list
- The list is empty: check that
cacheDirpoints to the cache root where the browser was installed. Compare it with Puppeteer’s configuredcacheDirectoryand anyPUPPETEER_CACHE_DIRoverride. - A system browser is missing: this inventory covers the specified managed cache, not every browser on the host. For launching regular Chrome, investigate
channel; for a known binary, useexecutablePath. - You passed a browser folder but expected an executable:
pathis the installation root. Use the record’sexecutablePathor the documentedcomputeExecutablePath()helper to obtain the binary location. - A listed browser fails to launch: listing confirms cache metadata, not compatibility. Puppeteer guarantees compatibility only with its bundled browser; check the browser build and your launch configuration.
- The constructor or object fields behave unexpectedly: do not instantiate
InstalledBrowserdirectly. It is an internal constructor; obtain records with the package’s inventory APIs.
Or skip the browser setup
If your goal is simply to capture a web page rather than manage a local Puppeteer browser, ScreenshotNeo offers a screenshot API and an MCP server. One GET request returns an image or PDF; for example, this cURL request saves a WebP screenshot:
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 documentation for request options. Cookie banners are accepted before capture and more than 60 known consent platforms, newsletter popups, and chat widgets can be removed; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000. Learn about ScreenshotNeo or sign up for 1,000 free screenshots a month with no card.
Frequently Asked Questions
Does getInstalledBrowsers return a plain array immediately?
No. It returns a promise of InstalledBrowser records, so await the call before iterating over the result.
Can I construct an InstalledBrowser record myself?
The constructor is internal. Retrieve records through the package APIs instead.
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.




