October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
ARM64

Base Images for Headless Browsers: Playwright, Puppeteer, Browserless, and ARM64 Choices

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.

Short answer: use Microsoft’s Playwright image for Playwright projects and cross-browser testing, Puppeteer’s image for Puppeteer with Chrome for Testing, and Browserless when you want a browser service rather than a browser embedded in your application. Build from node:bookworm or Ubuntu only when you need to control every OS package, font, browser, and layer yourself. Pin browser and library versions together, and check CPU architecture before choosing Chrome, Edge, or a multi-engine image.

What a headless-browser base image actually provides

A headless-browser base image is the operating-system layer that makes browser automation runnable in a container. It normally includes a browser executable, shared libraries, font packages, sandbox support, certificates, and other Linux dependencies. Your application, test suite, and automation library are layered on top.

The browser package and the automation package are not always the same thing. Microsoft’s Playwright image contains Playwright browser binaries and their system dependencies, but you still install the Playwright package in your project. Puppeteer’s official image contains Chrome for Testing, required dependencies, and a pre-installed Puppeteer version.

Compare the main image families

Image family Contents Best fit Important constraints
Microsoft Playwright Playwright browsers and system dependencies Playwright projects and Chromium, Firefox, and WebKit testing Pin the image and project to the same Playwright version. Alpine/musl is unsupported for Playwright Firefox and WebKit builds because those builds require glibc.
Puppeteer Chrome for Testing, dependencies, and a pre-installed Puppeteer version Puppeteer-centric Chrome automation Sandboxed execution requires the SYS_ADMIN capability. Use an init process such as Docker’s --init option.
Browserless single-engine Chromium, Chrome, Firefox, WebKit, or Edge behind a browser service Remote sessions when one engine is sufficient Chrome and Edge images are amd64-only.
Browserless multi Multiple engines exposed on separate service paths Teams needing several engines from one browser service On arm64 it includes Chromium, Firefox, and WebKit, but not Chrome or Edge.
General Node or Ubuntu base OS and runtime only Teams requiring exact control over packages, fonts, layering, or hardening You must install the browser and every system dependency, then maintain and pin them.

Choose by workload

Use the official Playwright image for Playwright

This is the least surprising choice when your code imports Playwright or your test matrix includes Chromium, Firefox, and WebKit. The image already carries the browser builds and Linux libraries expected by Playwright. Playwright currently documents Ubuntu 22.04 (Jammy), Ubuntu 24.04 (Noble), and Ubuntu 26.04 (Resolute) image bases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Keep the Docker image tag and the project’s Playwright dependency on the same version. If they diverge, Playwright may be unable to locate browser executables. A practical pattern is to use one version variable in your Docker build and dependency lockfile, then update both in the same change.

FROM mcr.microsoft.com/playwright:v1.55.0-noble
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "test"]

Replace the illustrative tag with the exact Playwright version your project uses; do not rely on a moving latest tag for reproducible CI.

Use Puppeteer’s image for Puppeteer and Chrome

Puppeteer’s documented family is ghcr.io/puppeteer/puppeteer:latest, or a version tag such as ghcr.io/puppeteer/puppeteer:16.1.0. It includes Chrome for Testing and a matching pre-installed Puppeteer release.

The image runs Chrome in sandbox mode. Grant the container the capability it needs and provide an init process so orphaned browser children are reaped:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
docker run --init --cap-add=SYS_ADMIN 
  ghcr.io/puppeteer/puppeteer:16.1.0 
  node /app/capture.js

Do not add broad privileges merely to make a launch error disappear. If your platform cannot provide SYS_ADMIN, use a browser configuration and image designed for that security model, or move the browser into a separately managed service after reviewing its sandbox guidance.

Use Browserless when the browser should be a service

Browserless publishes ghcr.io/browserless/chromium, chrome, firefox, webkit, edge, and multi. A single-engine image is useful when an application connects over a browser protocol or WebSocket and only one engine is required. The multi image exposes several engines on separate paths for teams that need a shared browser endpoint.

Browserless documents Linux images for amd64 and arm64, with Chrome and Edge available only on amd64. On arm64, the multi image contains Chromium, Firefox, and WebKit, not Chrome or Edge. Confirm the node architecture before deployment:

docker image inspect ghcr.io/browserless/multi 
  --format '{{.Architecture}}'

A remote-browser design can keep browser processes out of application containers and let several services share a managed pool. It also introduces network latency, endpoint authentication, capacity planning, and WebSocket failure handling that do not exist when the browser runs beside your code.

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

ARM64, Alpine, and operating-system compatibility

ARM64 is an image-by-image decision

Do not infer ARM64 support from the fact that an image is published to a public registry. Browserless states that its Chrome and Edge images are amd64-only, while its Chromium, Firefox, WebKit, and arm64 multi variants are available for ARM64. Verify the manifest and test the exact image on the same CPU family used in CI or production.

Rank #2
CanaKit Raspberry Pi 5 Desktop PC with SSD (Fully Assembled) (256 GB SSD)
  • Fully assembled for plug-and-play operation
  • Includes Raspberry Pi 5 with 8GB RAM
  • 256 GB PCIe Pi NVMe SSD (Pre-loaded with Pi 64-Bit OS)
  • M.2 HAT+
  • CanaKit Turbine Black Case for the Pi 5

For a heterogeneous cluster, schedule amd64-only workloads onto amd64 nodes, or select Chromium, Firefox, and WebKit variants that publish arm64 images. A multi-architecture application image does not help if its browser layer lacks a matching browser binary.

Why Alpine can break Playwright coverage

Alpine Linux uses musl libc. Playwright’s Firefox and WebKit builds require glibc, so an Alpine base is not supported for those browsers. If your test plan includes all Playwright engines, use the official Ubuntu-based image or another glibc distribution. Alpine may still be appropriate for a Chromium-only design that you have validated, but it is not a drop-in replacement for the official Playwright environment.

Building from node:bookworm or Ubuntu

A general base is justified when you need a particular OS release, private fonts, security baseline, native libraries, or a carefully minimized application layer. The trade-off is maintenance: browser downloads, shared libraries, font configuration, sandbox behavior, and version compatibility become your responsibility.

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.
  1. Choose a glibc-based distribution and pin its digest or release.
  2. Install the browser package or download a pinned browser build.
  3. Install all shared libraries, font packages, certificates, and locale data required by that browser.
  4. Install a pinned Playwright or Puppeteer version.
  5. Run the library’s dependency check and a real navigation during the image build or CI smoke test.
  6. Record the browser, automation-library, OS, and architecture versions together.
FROM node:bookworm
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends 
    ca-certificates fonts-liberation 
    && rm -rf /var/lib/apt/lists/*
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["node", "capture.js"]

The package list above is only a starting point, not a complete browser dependency set. The exact libraries depend on the browser and automation framework. If you choose this route, use the framework’s documented dependency installer or a vetted internal package rather than guessing from a launch error one library at a time.

Container settings that affect reliability

Shared memory

Chromium can use shared memory heavily. A small Docker /dev/shm mount can cause renderer crashes on pages with large canvases, PDFs, or many tabs. Increase shared memory for the workload, or use the browser’s documented fallback only after understanding its security and performance consequences.

Fonts, certificates, and locales

Missing fonts produce blank glyphs, changed line wrapping, and screenshots that differ from a developer laptop. Install the font families your application supports and keep them stable across CI and production. Ensure CA certificates are present for HTTPS navigation; a browser that works against HTTP can fail TLS verification in a minimal image.

Init and process cleanup

Browser launches create child processes. Run an init process such as Docker’s --init, or use an equivalent PID 1 process in Kubernetes. This prevents zombie processes from accumulating during long test runs.

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

Sandbox and permissions

Prefer the browser sandbox. For Puppeteer’s official image, sandboxed execution requires SYS_ADMIN. Avoid running as an unrestricted root user or disabling the sandbox simply to bypass a container configuration problem; correct the runtime capability and user setup instead.

Performance, image size, and CI cost

Browser layers are large compared with ordinary Node dependencies. Browserless describes bundling Chromium, Firefox, and WebKit with their dependencies as a multi-gigabyte base, without publishing a reproducible size figure. That qualitative difference still matters: cold pulls consume CI bandwidth, evict registry caches, and lengthen autoscaling.

Rank #3
RasTech Raspberry Pi 5 8GB Kit 64GB Edition with Active Cooler,27W GaN 5.1V5A USB-C Power Supply,Pi5 8GB Board,64GB Card Readers Kit,Pi 5 Case,Dual 4K Micro HD Out Cables and User Manual
  • Pi5 8GB Pack: RasTech Pi 5 8GB kit includes 1 x Pi5 8GB board ,1 x 64GB Card, 2 x Card Readers,1 x Active Cooler,1 x Case for Pi5, 2 x 4K Micro HD Out Cable,1 x GaN 27W 5A USB-C Power supply,1 x Screwdriver and 1 x instructions.
  • Pi5 8GB Board: The Pi5 board is equipped with a 64-bit quad-core Arm Cortex-A76 processor running at 2.4GHz and an 800MHz VideoCore VII GPU with support for OpenGL ES 3.1 and Vulkan 1.2, which delivers a significant increase in graphics performance. Dual HD Out 4Kp60 display outputs and a built-in dual 4-channel MIPI camera/display transceiver provide state-of-the-art camera support. The Pi 5 offers a 2-3 times increase in CPU performance compare to Pi4.
  • Important Graphics Features: Equipped with an 800MHz VideoCore VII GPU and providing better graphics performance, suitable for multimedia applications,gaming,and graphics intensive tasks.Provides 1 UART interface,1 card slot that supports high-speed operation, 2 USB. 3 0.5 ports that support synchronous 0Gbps operation,2 USB 2.0 port ports,2 4Kp60 display outputs that support HDR.Built-in dedicated dual 4-channel 1Gbps MIPI DSI/CSI connectors,triple the total bandwidth.
  • Cooling Kit for Pi 5: Compatible with Active Cooler for Raspberry Pi5, It can provide Pi 5 board with better cooling effect in using. The Case can accurately access usb-c power jack,Micro HD Out ports, usb ports, Ethernet jack, card slot, power button, 4-lane MIPI DSI/CSI connectors and so on, and it also supports installation of cooling fan.
  • 64GB Card Kit and GaN 27W USB-C Power Supply: With extra 64GB card to store more files and card readers for multiple medium, keep better performance for Raspberry Pi 5, 27W USB C Power Supply is Compatible with Pi5 8GB, offers a variety of output voltage options, including 5.1V at 5A, 9.0V at 3.0A, 12.0V at 2.25A, and 15.0V at 1.8A, providing for different device requirements.
  • Cache the immutable browser layer in your registry and pin tags or digests.
  • Separate infrequently changing browser layers from frequently changing application code.
  • Use a single-engine image when your tests do not require several engines.
  • Warm the image on CI runners or nodes that execute many jobs.
  • Measure cold-start and navigation time on your own architecture; no named benchmark establishes a universal winner.

Troubleshooting common failures

“Executable doesn’t exist” or Playwright cannot find a browser

Most often the image and project versions differ, or the browser was never installed in a custom image. Align the Playwright image tag with the locked package version, rebuild without a stale cache, and verify the browser path inside the container.

Firefox or WebKit fails on Alpine

This is the musl/glibc mismatch. Move to an Ubuntu-based Playwright image or another glibc image supported by the browser build.

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

Chrome exits immediately in Puppeteer

Check that the container has the required SYS_ADMIN capability and an init process. Also inspect shared-memory limits and run the image’s browser as the intended non-root user.

Image pulls on the wrong architecture

Inspect the image manifest and node architecture. For Browserless, select arm64-compatible Chromium, Firefox, WebKit, or multi images; Chrome and Edge require amd64 according to its published guidance.

Navigation hangs or pages render blank

Check outbound DNS and HTTPS access, CA certificates, fonts, proxy settings, and resource limits. Add explicit navigation and browser-launch timeouts, capture browser console output, and reproduce the URL in the same container rather than on the host.

CI becomes slow after an image update

Compare the old and new browser/OS layers, cache hit rate, and architecture. A multi-engine image can add a multi-gigabyte pull even when a test uses only Chromium. Pin the previous known-good version while you investigate, then update deliberately.

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

A practical decision checklist

  • Playwright plus cross-browser coverage: official Playwright image, matching package and image versions.
  • Puppeteer plus Chrome for Testing: official Puppeteer image, SYS_ADMIN, and an init process.
  • One remote engine: the corresponding Browserless single-engine image.
  • Several remote engines: Browserless multi after checking whether the deployment is amd64 or arm64.
  • Unusual OS, fonts, or hardening requirements: build from Node or Ubuntu and own the dependency and patching process.
  • Any architecture: verify the image manifest and run a smoke test on the target CPU before rollout.
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 actual requirement is producing reliable website screenshots rather than maintaining browser containers, ScreenshotNeo provides a website screenshot API and MCP server. A single request returns PNG, JPEG, WebP, or PDF. Before capture it accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled.

Only clean shots are billed. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and each response identifies the result with X-Page-Verdict and X-Billed headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients.

Example using the documented API format (see the ScreenshotNeo documentation):

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Features include full-page captures with lazy images loaded, CSS-selector element shots, dark mode, 12 device presets plus custom viewports, retina scale, PDF paper and page controls, custom CSS and JavaScript, clicks, selector or network-idle waits, ad/tracker/request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen TTL caching, signed image links, asynchronous jobs with signed webhooks, bulk capture for 100 URLs per call, a usage API, and an OpenAPI specification. Parameters used by other screenshot APIs also work, easing migration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Pironman 5-MAX Raspberry Pi 5 Case Dual NVMe M.2 SSD PCIe, Mini PC NAS RAID 0/1 Hailo-8L AI Accelerator PWM Tower Cooler+Dual RGB Fans, OLED Module, Safe Shutdown, Standard HDMI (RPI5 Not Included)
  • [ULTIMATE RASPBERRY PI 5 CASE & MINI PC] - Unlock the full potential of your Raspberry Pi 5 with the Pironman 5-MAX — the most advanced Raspberry Pi 5 Case for power users. This high-performance Raspberry Pi 5 Cooling Case features dual NVMe M.2 slots with RAID 0/1 support, AI accelerator compatibility ( e.g. Hailo-8l M.2 AI), a PCIe Gen2 switch, a PWM tower cooler + dual RGB fans and a smart OLED display. With its dual transparent panels and optimized cable management (including full-size HDMI), it’s the ideal Raspberry Pi 5 Enclosure for building a high-speed NAS, AI edge computing device, or Home Assistant hub. (Raspberry Pi NOT Included)
  • [DUAL NVMe M.2 SLITS & NAS RAID SUPPORT] - Supercharge your storage with the best Raspberry Pi 5 NVMe Case solution. Featuring two expandable NVMe M.2 slots (2230-2280) powered by a built-in PCIe Gen2 switch, this Raspberry Pi 5 NAS Case supports RAID 0/1 for ultra-fast data setups. Whether you're using a high-speed NVMe SSD or a Hailo-8L AI accelerator, Pironman 5-MAX delivers the ultimate performance boost for advanced Raspberry Pi 5 AI applications and edge computing
  • [ADVANCED COOLING SYSTEM] - Engineered for high-performance builds, Pironman 5-MAX features a powerful tower cooler, one PWM fan, and dual RGB fans for enhanced airflow. The dual transparent panel design improves ventilation while showcasing vibrant RGB lighting. Ideal for cooling both the Raspberry Pi 5 and dual NVMe SSDs or AI accelerators like Hailo-8L, it ensures stable operation under heavy workloads with low noise and long-term durability
  • [SMART OLED DISPLAY WITH VIBRATION WAKE-UP] - Pironman 5-MAX features a 0.96" OLED screen that delivers real-time system insights including CPU usage, memory, temperature, IP address, and disk status. With customizable display options and auto sleep mode, the screen can be instantly reactivated by a light tap thanks to the built-in vibration sensor—offering a smarter and more interactive experience
  • [ENHANCED FUNCTIONALITY] - Pironman 5-MAX empowers your Raspberry Pi 5 with advanced features like safe shutdown via a metal power button, customizable RGB lighting, dual full-size HDMI ports, vibration-triggered OLED wake-up, and an external GPIO extender. It also includes RTC battery support for timekeeping and seamless Home Assistant integration. With detailed guides, online tutorials, and full technical support from SunFounder, setup and use are effortless and worry-free

The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan, and yearly billing provides two months free. Create a free ScreenshotNeo account to try it without a card.

FAQ

Can I use a Playwright image with Puppeteer?

You can, but the image’s browser versions and installed libraries are selected for Playwright. For a Puppeteer workload, the official Puppeteer image gives you a matching Chrome for Testing and Puppeteer installation with fewer compatibility variables.

Should production use a moving latest tag?

No. Pin a version tag, and preferably an image digest, so browser updates occur through a reviewed deployment rather than an unrelated rebuild.

Is a multi-engine image always better?

No. It is useful when several engines are genuinely required, but its multi-gigabyte footprint can increase pulls and cache pressure. A single-engine image is simpler when coverage is narrow.

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

Frequently Asked Questions

Can I use a Playwright image with Puppeteer?

You can, but the image’s browser versions and installed libraries are selected for Playwright. For a Puppeteer workload, the official Puppeteer image gives you a matching Chrome for Testing and Puppeteer installation with fewer compatibility variables.

Should production use a moving latest tag?

No. Pin a version tag, and preferably an image digest, so browser updates occur through a reviewed deployment rather than an unrelated rebuild.

Is a multi-engine image always better?

No. It is useful when several engines are genuinely required, but its multi-gigabyte footprint can increase pulls and cache pressure. A single-engine image is simpler when coverage is narrow.

The Bottom Line

Match the image to the automation library, pin browser and package versions together, and treat architecture, sandboxing, fonts, shared memory, and image-pull cost as deployment requirements—not afterthoughts.

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

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

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

Read next

Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.