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

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Fix: Chrome cannot start because the Linux environment running Puppeteer is missing a shared library. Find the exact browser executable Puppeteer launches, use ldd to list every unresolved dependency, install the matching package in the same host, container, or CI image, then run the check again. On Debian and Ubuntu, the package providing the GLib library is commonly libglib2.0-0, but package names depend on your distribution release.

What the error means

An error such as libgobject-2.0.so.0: cannot open shared object file: No such file or directory is emitted by Linux’s dynamic linker while loading Chrome. Puppeteer is the JavaScript automation library; Chrome for Testing, a system Chrome, or another configured browser is the process that needs this operating-system library.

The failure is therefore usually an environment dependency problem, not a problem with a page script or a Puppeteer selector. Installing a JavaScript package or changing launch arguments cannot create a missing ELF shared object. You must repair the runtime in which the browser actually starts.

Free tools Windows power users keep installed

One-click scans. No signup required.

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

1. Identify the browser Puppeteer is launching

Do not assume the browser is the one installed on your workstation. A normal puppeteer installation downloads Chrome for Testing into a cache under $HOME/.cache/puppeteer; configuration can change that location. puppeteer-core does not download a browser, so your application, image, or deployment must provide one.

#1 Best Overall
Lenovo IdeaPad Slim 3 Linux Laptop, 15.6" FHD Touchscreen Laptop, 8-Core AMD Ryzen 7 5825U, 16GB RAM, 512GB SSD, Keypad, SD Card Reader, Stylus Pen + External Portable SSD + USB Hub, Linux Ubuntu OS
  • Powerful Linux Laptop: This IdeaPad Slim 3 Laptop comes pre-installed with Ubuntu Linux, offering fast performance, robust security, and a clean, user-friendly experience. Enjoy full customization, seamless hardware compatibility, and access to thousands of open-source apps. Whether you're working, creating, or coding, it's built to keep up with everything you do.
  • A Multitasking Master: The latest AMD Ryzen 7 5825U processor (up to 4.5 GHz) delivers powerful performance with 8 cores and 16 threads for smooth multitasking. Integrated AMD Radeon Graphics provide crisp visuals for streaming, browsing, photo editing, and casual gaming. With smart machine intelligence, it adapts to your needs for a fast, responsive experience.
  • 15.6" Full HD Display: The IdeaPad Slim 3 boasts an 88% screen-to-body ratio for a floating, edge-to-edge visual experience. TÜV Low Blue Light certification reduces eye strain, making it perfect for long work or study sessions.
  • Military-Grade Durability: The smart IdeaPad Slim 3 combines portability and durability, letting you work, study, and play on the go. With a profile 10% slimmer than the previous generation, it's lightweight yet military-grade rugged, ready for anything, anywhere.
  • Versatile Connectivity: Enjoy the security of a built-in webcam with a privacy shutter. Connect effortlessly with multiple ports: 2x USB A, 1x USB C, 1x HDMI, 1x SD Card Reader, 1x Headphone/Microphone combo. Bundle comes with Stylus Pen, 256GB Portable SSD and 5-in-1 Docking Station.

Print the configured executable

If your code supplies executablePath, inspect that value first. If it uses a channel or a system browser, locate that binary in the same runtime. For a cached installation, search the cache rather than copying a path from another machine:

find "$HOME/.cache/puppeteer" -type f ( -name chrome -o -name chromium -o -name chrome-headless-shell ) -perm -111 2>/dev/null

Use the path to the executable that the failing process can access. In a container, run the command inside the container; a host path is not evidence that the container has the same file or libraries.

2. Use ldd to find every missing library

Run the dynamic-dependency check against that exact executable:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
ldd /path/to/chrome | grep 'not found'

Each line ending in not found is a dependency that must be supplied by the operating system. You may see libgobject-2.0.so.0 along with graphics, font, X11, NSS, or audio libraries. Install all reported dependencies, not only the first one in the exception, then repeat ldd until it returns no unresolved entries.

If ldd itself cannot run, check that the path is an executable file and that you are using the same architecture and runtime image as the Puppeteer process. A system Chrome and Puppeteer’s cached Chrome can have different paths and dependency sets.

Rank #2
HP 17 Business Laptop - Linux Mint Cinnamon - Intel Quad-Core i5-10210U, 32GB RAM, 1TB PCIe NVMe SSD + 1TB Storage HDD, 17.3" Inch HD+ (1600x900) Display
  • Intel Core i5-10210U (up to 4.2GHz) - 1TB PCIe NVMe + 1TB HDD - 32GB DDR4 SDRAM
  • 17.3" HD+ (1600x900) Display, Intel UHD Graphics 620
  • Built in HD 720p Webcam with Microphone - Bluetooth Version4.2
  • I/O Ports: 2x USB 3.1 (Data Only), 1x USB 2.0, 1x HDMI, 1x Headphone/Microphone Combo Jack
  • Linux Mint Cinnamon 64-Bit - 6-Row Keyboard w/ Full Numberpad

3. Install the package for your Linux distribution

Debian and Ubuntu

Update the repositories in the target image or host and install the package corresponding to the missing library. For the GLib object library, Puppeteer’s Debian guidance commonly uses libglib2.0-0:

sudo apt-get update
sudo apt-get install libglib2.0-0

That command is an example, not a universal dependency list. Install every package required by your ldd output, and confirm that the package exists in the exact Debian or Ubuntu release you deploy. Minimal images often need several additional Chrome runtime packages.

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

Other distributions

Use the package manager and package naming conventions of the image you actually run. CentOS and other RPM-based systems have a separate set of package names; Alpine uses a different C library and is not interchangeable with Debian instructions. Search the distribution’s enabled repositories for the SONAME shown by ldd, install the provider package, and rerun the check.

Do not paste an apt-get command into an unrelated base image. A successful installation on a developer laptop does not repair a separate container, CI worker, serverless runtime, or hosted build environment.

4. Make the repair permanent in Docker and CI

For Docker, add operating-system dependencies to the Dockerfile so every built image contains them. Install packages before the application is started, rebuild without relying on a previously cached layer, and deploy the resulting image:

Rank #3
Lenovo Business Laptop - Linux Mint (Cinnamon) - Intel i5-1335U, 16GB RAM, 256GB SSD, 15.6" FHD 1920x1080 Display, Full Keyboard, Fast Charging
  • Intel Core i5-1335U Processor (12M Cache, 12 Threads, up to 4.6 GHz) - 256GB Solid State Drive - 16GB DDR4 SDRAM
  • 15.6" FHD (1920x1080) Non-Touch Anti-Glare Display - Intel UHD 620 Integrated Graphics - Stereo Speakers
  • 720p HD Webcam with Privacy Shutter. Integrated Microphone - Intel Dual Band Wireless-AC (2x2) 8265, Bluetooth Version 4.2
  • I/O Ports: 2x USB 3.0, 1x USB 3.1 Type-C 3.1, Headphone/Mic Combo Port, 4-in-1 Card Reader, HDMI, Kensington Mini-Lock Slot
  • Linux Mint (Cinnamon) 64-Bit - Keyboard with Full NumberPad - Fast Charging
FROM node:22-bookworm

RUN apt-get update 
 && apt-get install -y --no-install-recommends libglib2.0-0 
 && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["node", "app.js"]

The package list above is only the GLib example. Add the other packages reported by ldd and use a base-image-specific list. Verify the final image itself:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
docker build --no-cache -t puppeteer-test .
docker run --rm -it puppeteer-test sh
ldd /path/to/chrome | grep 'not found'

In CI, perform the diagnostic in the job that launches Chrome. If dependencies are installed in a setup job but the browser runs on a fresh worker, the fix will not be present. Cache invalidation, multi-stage builds, and separate test images can also leave the browser in an image different from the one where packages were added.

5. Separate a missing library from a missing browser

Two failures are often confused:

Symptom Likely cause Next action
libgobject-2.0.so.0 ... No such file or directory after Chrome is found Chrome’s runtime library is absent Run ldd on the selected executable and install provider packages
Puppeteer reports that no browser is installed or cannot find an executable Browser download was skipped, or puppeteer-core has no managed browser Install a browser or set a valid executable path

When package-manager policies block install scripts, the documented manual browser installation command is:

npx puppeteer browsers install

This downloads a browser; it does not install Linux shared libraries. After downloading, run ldd against the newly selected binary. Conversely, installing libglib2.0-0 cannot help if no browser executable exists.

6. Launch Puppeteer again without weakening the sandbox

Once all dependencies resolve, rerun the smallest launch test in the repaired runtime. Keep your normal sandbox configuration. The --no-sandbox flag is associated with a different class of sandbox failures and is not a fix for a missing shared library. Puppeteer’s guidance discourages disabling the sandbox because it weakens process isolation; configure the required sandbox support instead.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
  console.log(await page.title());
  await browser.close();
})();

Troubleshooting branches

ldd still reports missing files

  • Confirm you ran it on the same binary Puppeteer selects, not a system Chrome with a different build.
  • Check that package installation occurred in the final container stage and that the image was rebuilt and redeployed.
  • Install every unresolved dependency, then rerun the command; Chrome may fail on the next missing library only after the first is fixed.
  • Verify CPU architecture. An ARM image and an x86 browser package are not a valid combination.

The path works locally but not in production

Print the executable path and environment inside production. Home-directory caches, browser permissions, user IDs, and filesystem mounts differ between a workstation and a CI or container runtime. Build or download the browser during deployment and inspect it there.

The error changed to a sandbox failure

That is a separate problem. Keep the sandbox enabled and follow the runtime’s sandbox configuration requirements rather than adding --no-sandbox automatically.

Chrome starts, then pages fail or time out

Shared-library resolution is only the launch prerequisite. Investigate network access, certificates, DNS, proxy settings, page-specific waits, and resource limits after the browser process stays running.

Performance, reliability, and cost considerations

  • Installing dependencies in the image build is more reliable than modifying a running container; it makes the runtime reproducible.
  • Use --no-install-recommends where appropriate, but do not remove a package that ldd proves Chrome needs.
  • Keep the browser version and its OS base image compatible. Updating one without rebuilding and retesting the other can reintroduce unresolved libraries.
  • Run a smoke test in CI that launches the selected browser and performs one page load, so a base-image change fails before production.
  • Do not count a browser download as a dependency repair. Browser availability and shared-library availability are separate checks.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is simply a reliable image or PDF rather than controlling a local Chrome process, ScreenshotNeo provides a website screenshot API. Its clean-shot workflow accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. It also offers an MCP server for Claude, Cursor, and other MCP clients, with take_screenshot, get_page_info, and capture_pdf tools.

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

One request returns PNG, JPEG, WebP, or a PDF. See the ScreenshotNeo documentation for all options:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

You can use full-page capture with lazy images, CSS-selector element capture, dark mode, device presets, custom viewport and retina scale, PDF paper size and page ranges, custom CSS or JavaScript, clicks, selector or network-idle waits, request and resource blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed image links, asynchronous webhooks, bulk capture of up to 100 URLs per call, usage reporting, and an OpenAPI specification. Common parameter names used by other screenshot APIs also work.

Best Value
GMKtec G3S Mini PC Intel N95 Processor (Up to 3.4GHz) 8GB RAM 256GB M.2 SSD
  • 12th Intel Alder Lake N95 Processor – The GMKtec G3 S Mini PC is powered by the 12th Gen Intel N95 processor with 4 cores, 4 threads, 6MB cache and a burst frequency up to 3.4GHz. Compared with N100/N5105/N5100/N5095, the N95 delivers up to 36% overall performance improvement. Perfect for routine tasks, office work, and home entertainment, this compact mini desktop is more convenient than traditional bulky PCs.
  • 8GB RAM & 256GB SSD Storage – Pre-installed with 8GB DDR4 memory and a fast 256GB M.2 2242 SSD, the G3 S mini desktop offers quicker startup, smoother multitasking, and faster file transfers. Enjoy seamless performance whether you’re working on multiple applications, browsing, or streaming content.
  • Rich Interfaces & Connectivity – The G3 S mini computer comes equipped with USB 3.2 (up to 10Gbps), dual HDMI 2.0 (4K@60Hz), and a 3.5mm audio jack. With support for WiFi 5, Bluetooth 5.0, and Gigabit Ethernet (RJ45 1000MbE), it connects easily with monitors, projectors, printers, office equipment, and other peripherals, making it versatile for both home and business use.
  • Dual 4K Display Support – Featuring upgraded Intel UHD Graphics (up to 1000MHz), the G3 S supports 4K video playback and AV1 decoding for a smooth viewing experience. With dual HDMI outputs, you can connect two 4K@60Hz displays simultaneously, enabling efficient multitasking for work and entertainment.
  • GMKtec WARRANTY - GMKtec offers a 1-year limited GMKtec's warranty for each mini PC, starting from the date of the purchase. All defects due to design and workmanship are covered. With a professional after sales team always ready to attend to your needs, you can simply relax and enjoy your mini PC.

The free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing gives two months free. Create a free ScreenshotNeo account to try it.

FAQ

Is this a Puppeteer API bug?

Usually no. The message comes from Linux’s loader while starting the browser executable.

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

Can I fix it by reinstalling Puppeteer?

Only if the browser itself was never downloaded. Reinstalling JavaScript dependencies does not supply an absent system library.

Why does puppeteer-core behave differently?

It does not download Chrome. You must manage the browser and provide its executable path or channel, then satisfy that browser’s OS dependencies.

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.