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

If Puppeteer works locally but fails on Render, first check the failed deploy’s build log—or runtime logs if the service started—and identify whether Chrome was never installed, cannot be found, or cannot launch. The usual repair is to install dependencies and Puppeteer’s compatible browser during the build, then make sure the deployed process can access that browser and a writable profile directory.

Start with the exact error in Render’s logs

A developer laptop and a deployed Render service can differ in language versions, environment variables, installed tools, dependency versions, filesystem layout, and permissions. A successful local run therefore does not establish that the deployed service has a Chrome binary or can launch it.

  1. Open the failed deploy in Render and inspect the complete build log. Look for dependency-installation errors and any message about downloading or locating Chrome.
  2. If the service starts but fails when it handles a request, inspect its runtime logs instead. Find the first Puppeteer or Chrome error, not just the last stack-trace line.
  3. Record the installed Puppeteer version, the browser version if it appears in the logs, the build and start commands, and any configured browser path. These details make later changes easier to diagnose.

Classify the failure before changing configuration:

  • “Could not find Chrome” or a missing executable: Puppeteer could not find its browser at the path or cache location it expects.
  • Chrome starts and then exits: investigate Linux libraries, execution permissions, the runtime user, sandboxing, and the browser profile directory.
  • The build stops during installation: resolve the dependency or browser-download failure shown in the build log before debugging application code.

Why Puppeteer’s Chrome may be missing on Render

Installing Puppeteer normally downloads a compatible Chrome for Testing browser; Puppeteer has also downloaded chrome-headless-shell as part of installation since Puppeteer v21.6.0. These downloads are separate from your application’s JavaScript package. If a package manager blocks install scripts, installation may finish without downloading the browser, leaving Puppeteer unable to locate Chrome later.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Browser downloads also affect build size and time. Puppeteer’s documentation gives approximate Chrome for Testing download sizes of 170 MB on macOS, 282 MB on Linux, and 280 MB on Windows; these are documentation figures that can change by release. On a Linux Render service, the Linux figure is the relevant reference, not a guarantee of the size for every browser release or build.

There is also a cache-path issue. Puppeteer’s default browser cache location has been $HOME/.cache/puppeteer since v19.0.0. If the browser was downloaded during the build under a different home directory, if the cache configuration changes, or if packaging omits the cache, the runtime process may look somewhere different from where the browser was installed.

Repair the build and install the browser deliberately

Confirm the project files and install scripts

Ensure that package.json and the project lockfile are part of the deployed source. The Render build command needs to install the project dependencies. If your package-manager configuration disables install scripts, do not assume Puppeteer’s normal browser download happened: explicitly install the browser during the build.

For a Node.js project using Puppeteer, a build command can be structured like this:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
npm ci && npx puppeteer browsers install chrome

This runs the locked dependency installation and then asks Puppeteer’s browser-install command to install Chrome. Use the package-manager install command that matches your project and lockfile; do not mix package managers or omit the lockfile and then expect a reproducible browser setup. If dependencies are already installed by a separate build step, put the browser-install command after that step.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Check the build output to confirm the browser installation completed. If it did not, diagnose the actual install error in the build log rather than adding an arbitrary path to application code. A path is useful only if the binary really exists in the deployed environment.

Keep Puppeteer and its browser together where possible

The safest default is the browser installed for the Puppeteer version in your project. Puppeteer’s API documentation warns that compatibility is guaranteed for its bundled browser; using a different executable is at your own risk. Keeping the package version, browser installation step, and runtime environment aligned reduces uncertainty when a deployment or dependency upgrade changes behavior.

Do not copy a browser path from a Windows or macOS development machine into Render settings. A path such as a local desktop installation says nothing about where Chrome exists in the deployed Linux filesystem.

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

Set a real executablePath only when you manage the browser

If you choose to manage Chrome or Chromium separately, install it in the Render build environment or Docker image and set Puppeteer’s executablePath to the actual Linux binary path there. Discover or verify that path in the same environment that will run the service. Do not guess a conventional path: package and image choices can put the executable in different locations.

For example, when you have verified the deployed path, pass it explicitly in the launch options:

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
const browser = await puppeteer.launch({
  executablePath: process.env.CHROME_EXECUTABLE_PATH,
  headless: true
});

Set CHROME_EXECUTABLE_PATH to the verified path for your build or image. If you have not installed a system browser and confirmed that path, leave out executablePath and let Puppeteer use its own browser rather than pointing it at a nonexistent file.

Choice Version compatibility Installation and path Linux libraries and permissions Maintenance trade-off
Puppeteer-managed browser Best-aligned choice: Puppeteer guarantees compatibility with its bundled browser. Install it during the build; Puppeteer uses its browser cache, whose documented default since v19.0.0 is $HOME/.cache/puppeteer. The browser still needs its required libraries and a runtime user that can execute it and access its profile. Browser downloads add build size and time, but the package and browser are easier to keep aligned.
System-managed Chrome or Chromium Not guaranteed to match Puppeteer’s expected browser; check compatibility when upgrading. Install it in the build environment or image and configure the real executable path for that deployed environment. You are responsible for providing compatible Linux libraries and access permissions. You control browser installation, but must maintain its version, path, dependencies, and Puppeteer compatibility.

Use a launch configuration that fits the deployed environment

A missing-browser problem is different from a browser that exists but cannot start. On Linux, launch failures can result from missing shared libraries, sandbox restrictions, file permissions, or an unwritable user-data directory. Fix the cause indicated by the error instead of adding flags indiscriminately.

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

A minimal application launch can look like this when relying on Puppeteer’s installed browser:

const puppeteer = require('puppeteer');

async function main() {
  const browser = await puppeteer.launch({ headless: true });
  try {
    const page = await browser.newPage();
    await page.goto('https://example.com', { waitUntil: 'networkidle0' });
    console.log(await page.title());
  } finally {
    await browser.close();
  }
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

This example assumes the project has installed puppeteer and its browser as part of the build. It does not make a missing executable, absent system library, or filesystem permission problem go away. Use the launch options and navigation behavior your application needs, and keep cleanup in a finally block so a browser is closed after an error.

Check the runtime user and profile directory

If the error mentions profile access or a failure creating a user-data directory, make sure the process user can write to the chosen location. You can specify a writable temporary profile explicitly:

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
const os = require('node:os');
const path = require('node:path');
const puppeteer = require('puppeteer');

const browser = await puppeteer.launch({
  headless: true,
  userDataDir: path.join(os.tmpdir(), 'puppeteer-profile')
});

Use an appropriate non-privileged user where your service or container configuration allows it. --no-sandbox is not the default repair for Chrome launch errors: treat it as a last-resort workaround for a specific environment after evaluating the security implications and confirming that sandbox restrictions are the actual cause.

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

For Docker-based Render services

Installing a browser on your laptop or in a separate build environment does not put it in the image that runs your service. Install Puppeteer’s browser or your managed browser in the Docker image, use a base image with compatible libraries or install the required libraries explicitly, and check that the runtime user can access the executable and profile directory. The image also needs a valid CMD or ENTRYPOINT that starts the application.

Check Render’s build, start, and environment configuration

The browser-install step belongs in the environment used to build the deployed service. The start command then needs to launch the application that uses Puppeteer; a successful browser download alone does not start the app. Confirm that the configured build and start commands match the project and that all required environment variables are set in the service environment.

Pay particular attention to variables that influence the home directory, Puppeteer cache, or configured browser executable. A build can succeed while the runtime process has different values or access. If the application relies on CHROME_EXECUTABLE_PATH, for example, verify that it is set for the running service and names the browser installed in that deployment—not a developer-machine path.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot by symptom

Symptom Likely cause What to check or change
“Could not find Chrome” after deployment The browser download did not run, the cache was not included or is in a different location, or the configured executable path is wrong. Review the build log, check whether install scripts were blocked, install Chrome during the build, and confirm the runtime can access the resulting browser.
Browser is missing even though dependency installation succeeded Installing the JavaScript package did not result in a browser download. Check package-manager install-script settings and explicitly run Puppeteer’s browser-install command in the build.
“Failed to launch” or an immediate Chrome exit Missing shared libraries, permission restrictions, sandbox constraints, or profile-directory access. Use the full runtime error to identify the category; verify Linux dependencies, executable permissions, runtime user, and a writable profile.
Works during build but not when handling a request The build and runtime environments differ, or runtime variables and filesystem access differ. Inspect runtime logs and verify the configured home/cache, executable path, environment variables, and access as the service user.
Docker image builds but the service does not run The image may not have a valid startup instruction or may lack runtime browser dependencies. Check that the image has a working CMD or ENTRYPOINT and that the browser and compatible libraries are present in the runtime image.
Failure appears after moving to Alpine Linux Chrome does not support Alpine out of the box; Chromium and browser package versions also need to match. Use the Puppeteer troubleshooting guidance for Alpine compatibility and verify the installed Chromium/browser versions rather than assuming a standard Chrome binary will work.

After a change, redeploy and compare the new build and runtime logs with the original failure. Change one relevant part at a time where practical; changing the browser source, path, user, and launch flags together makes it harder to know which issue was fixed.

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.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Or skip the browser setup

If the goal is to obtain website screenshots rather than run a browser inside your Render app, ScreenshotNeo is a website screenshot API and MCP server: one GET request can return a PNG, JPEG, WebP, or PDF. It does not repair Puppeteer or make Chrome available to your service; it provides a separate capture route.

cURL example (see the ScreenshotNeo documentation for API details):

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
  • It accepts cookie or consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off.
  • Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing; response headers report the page verdict and whether the request was billed.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
  • The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.

Sign up for 1,000 free screenshots a month, with no card required.

Keep the next browser upgrade diagnosable

  • Keep the Puppeteer dependency and lockfile under version control.
  • Install the intended browser during the build and retain enough log output to verify that step succeeded.
  • Record the Puppeteer and browser versions, Render build and start commands, and any configured browser path when changing the deployment.
  • Recheck Linux libraries, runtime user, cache location, and writable profile access when changing the base environment or browser source.

Frequently Asked Questions

Does a successful Puppeteer install prove that the Chrome download succeeded?

No. The JavaScript package and browser download are distinct parts of setup; check the build output for the browser installation itself.

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

Why does Puppeteer download chrome-headless-shell as well as Chrome?

Puppeteer has included the chrome-headless-shell download as part of installation since v21.6.0. The browser files are separate from your application package.

Can I use Alpine Linux for a Puppeteer service?

It requires special compatibility checks: Chrome does not support Alpine out of the box, and the Chromium package and browser versions need to match.

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.