Implementation:Puppeteer Puppeteer Versions Map
| Attribute | Value |
|---|---|
| sources | Puppeteer_Puppeteer|https://github.com/puppeteer/puppeteer |
| domains | Version_Management, Browser_Compatibility |
| last_updated | 2026-02-12 00:00 GMT |
Overview
The versions.json file maintains a historical mapping of every Puppeteer release to the specific Chrome and Firefox browser versions it was tested and bundled with.
Description
This JSON data file serves as the authoritative version compatibility matrix for the Puppeteer project. It contains two top-level fields:
lastMaintainedChromeVersion-- The most recent Chrome version still under active maintenance (currently142.0.7444.175).versions-- An ordered array of tuples mapping Puppeteer release tags to their corresponding Chrome and Firefox versions. The array is ordered from newest (e.g.,v24.37.1with Chrome 145 and Firefox 147) to oldest (e.g.,v1.12.2with Chrome 73).
The file spans approximately 1,062 lines and covers the full release history from Puppeteer v1.12.2 through the latest release. Older entries list Firefox as "latest" since explicit Firefox version pinning was introduced in later releases.
Usage
This file is consumed by multiple internal tools:
tools/update_browser_revision.mjs-- Reads and writes this file when updating browser revisions for a new Puppeteer release.tools/get_deprecated_version_range.mjs-- Reads the file to determine which Puppeteer versions to deprecate.Herebyfile.mjs(root andpackages/puppeteer-core) -- Reads the file during build tasks to embed the current browser version into the built package.
Code Reference
Source Location
| File | Purpose |
|---|---|
versions.json |
Puppeteer-to-browser version mapping (1,062 lines) |
tools/update_browser_revision.mjs |
Script that updates versions.json on new releases |
tools/get_deprecated_version_range.mjs |
Script that reads versions.json for deprecation logic |
I/O Contract
The file is a JSON document with the following structure:
{
"lastMaintainedChromeVersion": "<chrome-version-string>",
"versions": [
[
"<puppeteer-version-tag>",
{
"chrome": "<chrome-version-string>",
"firefox": "<firefox-version-string>"
}
],
...
]
}
Field details:
| Field | Type | Description |
|---|---|---|
lastMaintainedChromeVersion |
string | Chrome version still receiving maintenance (e.g., "142.0.7444.175")
|
versions |
array of tuples | Ordered list from newest to oldest Puppeteer release |
versions[n][0] |
string | Puppeteer version tag (e.g., "v24.37.1")
|
versions[n][1].chrome |
string | Compatible Chrome version (e.g., "145.0.7632.46")
|
versions[n][1].firefox |
string | Compatible Firefox version (e.g., "stable_147.0.3") or "latest" for older entries
|
Usage Examples
Importing in a Node.js ESM script:
import versionData from './versions.json' with {type: 'json'};
// Get the latest Puppeteer version and its browser versions
const [latestTag, browsers] = versionData.versions[0];
console.log(`${latestTag}: Chrome ${browsers.chrome}, Firefox ${browsers.firefox}`);
// "v24.37.1: Chrome 145.0.7632.46, Firefox stable_147.0.3"
Querying with jq from the command line:
# Find which Chrome version ships with a specific Puppeteer release cat versions.json | jq '.versions[] | select(.[0] == "v24.31.0") | .[1].chrome' # "142.0.7444.175" # Get the last maintained Chrome version cat versions.json | jq '.lastMaintainedChromeVersion' # "142.0.7444.175"
Related Pages
- Root Package Lock -- Monorepo dependency lockfile
- ResolveBuildId -- Runtime resolution of browser build IDs
- Browsers Launch -- Browser download and launch logic