Set PUPPETEER_SKIP_DOWNLOAD before installing puppeteer. In a POSIX shell, run PUPPETEER_SKIP_DOWNLOAD=true npm install puppeteer. Puppeteer reads the variable during installation and skips downloading its browser binaries. The setting does not install a browser for you, and it does not change what happens when your program later launches a browser.
For a repeatable project, put skipDownload: true in a Puppeteer configuration file. Use the environment variable for a one-off shell or CI job, and the configuration file when the policy should travel with the repository.
Set the variable in the shell that runs installation
The variable must exist before the package manager starts installing puppeteer. Setting it after npm install is complete is too late for that installation.
POSIX shells: macOS, Linux and most CI runners
PUPPETEER_SKIP_DOWNLOAD=true npm install puppeteer
This assigns the variable for that command only. To keep it in the current shell for several commands, export it first:
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minute#1 Best Overall
- 14" diagonal, 1366x768 resolution, HD BrightView LED, Glossy NON-TOUCH Display
export PUPPETEER_SKIP_DOWNLOAD=true
npm install puppeteer
Windows Command Prompt
set PUPPETEER_SKIP_DOWNLOAD=true
npm install puppeteer
set affects the current Command Prompt window. Open a new window or clear the variable if you want subsequent installs to use the default behavior.
Windows PowerShell
$env:PUPPETEER_SKIP_DOWNLOAD = "true"
npm install puppeteer
PowerShell uses the $env: syntax; writing set PUPPETEER_SKIP_DOWNLOAD=true there does not create the same environment variable.
What skipping changes—and what it leaves in place
A normal puppeteer installation downloads a compatible Chrome for Testing release and a chrome-headless-shell binary. The skip setting suppresses those installation-time downloads. It does not remove a browser that is already present, and it does not make an absent browser available at runtime.
Puppeteer passes the resolved setting to its installer. When the value is true, the installer reports that browser downloads are being skipped. Your application still needs a usable browser when it calls puppeteer.launch(): either install one separately or point Puppeteer at a browser managed by your environment.
Recommended Free Tools
Rank #2
- 1.1 GHz (boost up to 2.4GHz) Intel Celeron N5030 Quad-Core
- 4GB DDR4 System Memory; 128GB Solid State Drive
- 11.6" HD (1366 x 768) Multi-Touch Display
- Combo headphone/microphone jack - Noble Wedge Lock slot - HDMI; 2 USB 3.1 Gen 1
- Windows 11 Pro
Choose a persistent configuration for a repository
Configuration files are the cleanest way to make the decision reproducible for every developer and build. Puppeteer searches supported files including .puppeteerrc.cjs, .puppeteerrc.js, .puppeteerrc.json, puppeteer.config.cjs, puppeteer.config.js, and configuration in package.json.
JavaScript configuration
For an ES-module configuration file, use:
/** @type {import('puppeteer').Configuration} */
export default {
skipDownload: true,
};
If your project uses CommonJS, choose the corresponding CommonJS configuration filename and export style supported by that file. Keep the file at the project root so the installation process can discover it.
JSON configuration
A JSON configuration file can express the same option without executable JavaScript:
{
"skipDownload": true
}
Environment versus file precedence
When both mechanisms provide a value, environment variables override configuration-file options where Puppeteer supports that override. This lets a repository keep a safe default while a particular job temporarily changes it. If you change a download option, rerun the installation step; changing a file after dependencies are already installed does not retroactively download a browser.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #3
- 256 GB SSD of storage.
- Multitasking is easy with 16GB of RAM
- Equipped with a blazing fast Core i5 2.00 GHz processor.
Compare the available approaches
| Approach | Scope | Precedence | Lifecycle | Browser ownership |
|---|---|---|---|---|
PUPPETEER_SKIP_DOWNLOAD=true npm install puppeteer |
One command or shell session | Environment value can override file settings | Installation time | You must provide a browser if needed |
skipDownload: true in a supported config file |
Project-wide | Can be overridden by the environment | Installation time | You must provide a browser if needed |
No skip setting with puppeteer |
Each installation using the default | Installer defaults and resolved configuration | Installation time | Puppeteer-managed download |
puppeteer-core |
Package-level choice | Ignores Puppeteer configuration files and environment variables | No browser download by this package | You manage the browser and pass an executable path or standard channel |
Use the right package for your browser strategy
puppeteer
The full package includes Puppeteer’s installer. Use the skip option when your image, operating system, or CI cache supplies Chrome separately and you do not want the post-install download.
puppeteer-core
puppeteer-core never downloads Chrome and ignores Puppeteer’s configuration files and environment variables. Select it when browser ownership is explicitly outside the package, then configure your code with an executable path or a standard browser channel. Setting PUPPETEER_SKIP_DOWNLOAD while installing puppeteer-core has no effect because that package does not use the setting.
CI and container installation patterns
Keep the variable in the install job
Define PUPPETEER_SKIP_DOWNLOAD in the same job and before the dependency-install command. A variable set only in a later test step cannot undo a browser download that already occurred. Repository configuration is preferable when every job should follow the same policy; a job-level environment variable is useful when only one image supplies its own browser.
Check package-manager install scripts
Puppeteer’s browser download is performed by its installation path. If a package manager blocks dependency install scripts, the package can appear in node_modules without its browser having been downloaded, even when you did not intend to skip it. Treat script blocking and PUPPETEER_SKIP_DOWNLOAD as separate causes and inspect the install log for which one occurred.
Rank #4
- EFFORTLESS EVERYDAY PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 Home system, delivering reliable, low-power efficiency for daily tasks like document editing, email, online classes, and web browsing
- 15.6-INCH FULL HD DISPLAY: Enjoy immersive visuals on the 15.6" FHD (1920x1080) anti-glare screen with micro-edge bezels. Delivers clear details and comfortable viewing for long study sessions, working on spreadsheets, and video playback
- RESPONSIVE MULTITASKING & STORAGE: Built with 4GB LPDDR4 RAM and 128GB eMMC storage for smooth daily essential use. Expand your storage by up to 1TB via the integrated TF card slot to easily store movies, photos, and working files
- ADVANCED CONNECTIVITY: Outfitted with 2x Full-Featured Type-C ports for data transfer, fast charging, and dual-monitor output, alongside 2x USB 3.2 Gen1 ports and a 3.5mm audio jack for complete peripheral compatibility
- LIGHTWEIGHT & SILENT OPERATION: Slim and portable for effortless travel or commuting. Features a 1MP HD webcam for remote meetings, 38Wh battery with 45W Type-C fast charging, and a fanless silent design for peaceful work environments.
Apply a changed policy
After changing the variable or configuration, rerun the dependency installation. To install the browser through Puppeteer’s supported command, run:
npx puppeteer browsers install
This is the recovery path when a skipped download, a blocked install script, or a newly provisioned machine needs Puppeteer’s browser installation again.
Troubleshoot common failures
Chrome is still downloading
- The variable was set too late: put it in the environment before
npm install puppeteer, not in application code and not after installation. - The shell syntax is wrong: use
setin Command Prompt,$env:in PowerShell, andexportor an inline assignment in POSIX shells. - You installed a different package:
puppeteer-corehas no download to control, while another dependency may installpuppeteerindependently. - A cached browser is being reused: skipping a new download does not delete binaries already on the machine or in a CI cache.
- The configuration file was not discovered: use one of Puppeteer’s supported filenames, place it where the project installation can find it, and ensure the module format matches the file.
The package installed, but launching fails
This is the expected consequence of skipping a download without supplying another browser. Install a compatible browser separately, run npx puppeteer browsers install, or configure your launch code with the executable path or standard channel for the browser your environment owns.
The install script never ran
Some package-manager settings disable dependency scripts. Allow Puppeteer’s installation script for that install, or run npx puppeteer browsers install explicitly after scripts are available. Confirm from the output whether Puppeteer logged that downloads were skipped or whether the installer was never invoked.
Best Value
- WINDOWS 11 | STABLE PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 system, this laptop delivers stable performance for everyday computing tasks. It supports web browsing, online learning, document editing, email communication, and basic office work with optimized power efficiency, providing a practical and reliable experience for essential daily use for daily use.
- 15.6” FHD IPS DISPLAY: Features a 15.6-inch Full HD IPS display with narrow bezels, offering wider viewing angles and clearer image details compared to standard panels. The improved screen-to-body ratio enhances visual experience for study, reading, document work, and video playback, making it suitable for both productivity and entertainment use.
- 4GB DDR4 + 128GB eMMC STORAGE: Equipped with 4GB DDR4 memory and 128GB eMMC storage for everyday basics such as browsing, documents, email, and online learning platforms. The built-in TF card slot supports storage expansion up to 1TB, giving you more flexibility for files, photos, videos, and daily documents. TF card not included.
- CONNECTIVITY & PORTS: Includes 1× TF card slot, 2× USB 3.2 Gen1 ports, and 2× full-featured Type-C ports (USB 3.2 Gen1). The Type-C ports support data transfer, charging, and video output, enabling flexible connection with external devices such as monitors, storage, and peripherals for daily work and study use.
- LIGHTWEIGHT DESIGN | ONLINE COMMUNICATION: Designed with a slim, portable profile, this laptop is easy to carry for school, commuting, and travel. A built-in 1MP front camera supports online classes, video meetings, remote communication, and everyday conferencing. The 3300mAh battery works with the low-power system design to support practical daily use, while thermal optimization helps maintain quieter operation during extended tasks.
Changing the value to false does not restore downloading
Boolean-string handling is version-sensitive. A confirmed Puppeteer issue in version 21.3.6 reported that a falsy environment value still skipped installation. Do not assume that PUPPETEER_SKIP_DOWNLOAD=false behaves identically across releases. Check the exact Puppeteer version in your lockfile; if behavior is unclear, remove the skip variable and configuration, then use npx puppeteer browsers install.
Only one developer should skip the download
Do not commit a project-wide setting if the repository is intended to use Puppeteer’s managed browser on other machines. Use the one-command environment assignment for that developer or CI job instead, and document which externally managed browser the job supplies.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Verify the result without guessing
- Remove stale assumptions from the shell: check that the variable is present in the process that runs npm and that the value is the one you intended.
- Run the install again and read the Puppeteer installer output. A true resolved value should produce a message that browser downloads are being skipped.
- Decide who owns the browser. If Puppeteer owns it, run
npx puppeteer browsers install; if your image or host owns it, make its executable path or standard channel explicit in your launch configuration. - Run a minimal launch in the same environment as your application. An installation that succeeds only on a developer workstation does not prove that the CI or container has a browser.
Or skip the browser setup
If your actual goal is to obtain website screenshots rather than run a local browser, ScreenshotNeo provides a single HTTP request. Its capture service accepts the consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets before the shot. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed; each response identifies the page verdict and billing result in X-Page-Verdict and X-Billed headers. ScreenshotNeo also exposes an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.
See the ScreenshotNeo documentation for parameters and response handling. The same request can be made from common environments:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
There is a free allowance of 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 screenshots; every feature is included on every plan, and yearly billing provides two months free. Create a free ScreenshotNeo account to try the browser-free approach.
Frequently Asked Questions
Does `PUPPETEER_SKIP_DOWNLOAD` affect screenshots after installation?
No. It is read during Puppeteer’s installation process. Runtime capture still depends on a browser being available to the application.
Will skipping the download delete a browser already on my machine?
No. The option prevents a new installation download; it does not remove existing browser files or CI cache entries.
Can I use the setting to control a transitive Puppeteer dependency?
Only if that dependency’s installation resolves and honors the same Puppeteer installer. Check the install log and the dependency tree rather than assuming your top-level package controls every browser download.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →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.




