playwright on ubuntu 25.10

tl;dr

Problem:playwright browser dependencies incompatible with ubuntu 25.10
Key changes:libicu74libicu76, many packages now have t64 suffix
Solution:updated package list with 50 correctly-versioned dependencies
Install command:apt-get install with full package list (see below)
Testing:validated in docker container with all three browsers

overview

ubuntu 25.10 introduced significant package naming changes that break playwright’s browser installation. this guide provides the complete, tested solution for running playwright with chromium, firefox, and webkit browsers.

quick solution

sudo apt-get update && sudo apt-get install -y \
    curl \
    ca-certificates \
    libicu76 \
    libxml2-16 \
    libevent-2.1-7t64 \
    libgstreamer-plugins-bad1.0-0 \
    libflite1 \
    libavif16 \
    libmanette-0.2-0 \
    gstreamer1.0-libav \
    libglib2.0-0t64 \
    libnspr4 \
    libnss3 \
    libdbus-1-3 \
    libatk1.0-0t64 \
    libatk-bridge2.0-0t64 \
    libcups2t64 \
    libexpat1 \
    libxcb1 \
    libxkbcommon0 \
    libatspi2.0-0t64 \
    libx11-6 \
    libxcomposite1 \
    libxdamage1 \
    libxext6 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libcairo2 \
    libpango-1.0-0 \
    libasound2t64 \
    libdrm2 \
    libxshmfence1 \
    libgtk-3-0t64 \
    libgtk-4-1 \
    libxslt1.1 \
    libwoff1 \
    libwebpdemux2 \
    libharfbuzz-icu0 \
    libenchant-2-2 \
    libsecret-1-0 \
    libhyphen0 \
    libwayland-server0 \
    libgles2

package changes in ubuntu 25.10

version bumps

  • libicu74libicu76 - unicode support library
  • libxml2libxml2-16 - xml parsing library

time64 transition

ubuntu 25.10 adopted the t64 suffix for 64-bit time transition:

  • libglib2.0-0libglib2.0-0t64
  • libatk1.0-0libatk1.0-0t64
  • libatk-bridge2.0-0libatk-bridge2.0-0t64
  • libcups2libcups2t64
  • libatspi2.0-0libatspi2.0-0t64
  • libasound2libasound2t64
  • libgtk-3-0libgtk-3-0t64

installation with uv

# install uv if not present
curl -LsSf https://astral.sh/uv/install.sh | sh

# install system dependencies (use command above)
sudo apt-get update && sudo apt-get install -y [packages...]

# install playwright browsers
uv run --with playwright playwright install

docker setup

complete dockerfile

FROM ubuntu:25.10

# update package list
RUN apt-get update

# install all playwright dependencies
RUN apt-get install -y \
    curl \
    ca-certificates \
    libicu76 \
    libxml2-16 \
    libevent-2.1-7t64 \
    libgstreamer-plugins-bad1.0-0 \
    libflite1 \
    libavif16 \
    libmanette-0.2-0 \
    gstreamer1.0-libav \
    libglib2.0-0t64 \
    libnspr4 \
    libnss3 \
    libdbus-1-3 \
    libatk1.0-0t64 \
    libatk-bridge2.0-0t64 \
    libcups2t64 \
    libexpat1 \
    libxcb1 \
    libxkbcommon0 \
    libatspi2.0-0t64 \
    libx11-6 \
    libxcomposite1 \
    libxdamage1 \
    libxext6 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libcairo2 \
    libpango-1.0-0 \
    libasound2t64 \
    libdrm2 \
    libxshmfence1 \
    libgtk-3-0t64 \
    libgtk-4-1 \
    libxslt1.1 \
    libwoff1 \
    libwebpdemux2 \
    libharfbuzz-icu0 \
    libenchant-2-2 \
    libsecret-1-0 \
    libhyphen0 \
    libwayland-server0 \
    libgles2

# install uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:$PATH"

# install playwright and browsers
RUN uv run --with playwright playwright install

# verify installation
RUN uv run --with playwright playwright --version

building and testing

# build docker image
docker build -t playwright-ubuntu-25.10 .

# run playwright tests
docker run -it playwright-ubuntu-25.10 \
    uv run --with playwright pytest tests/

dependency categories

core system libraries

  • curl, ca-certificates - downloading and https
  • libicu76 - unicode support (updated from libicu74)
  • libxml2-16 - xml parsing (updated from libxml2)
  • libevent-2.1-7t64 - event notification

media and graphics

  • libgstreamer-plugins-bad1.0-0 - gstreamer plugins
  • gstreamer1.0-libav - audio/video codecs
  • libavif16 - avif image format
  • libflite1 - text-to-speech
  • libmanette-0.2-0 - game controller support

gtk and ui libraries

  • libglib2.0-0t64 - core glib library
  • libgtk-3-0t64, libgtk-4-1 - gtk toolkit versions
  • libpango-1.0-0 - text rendering
  • libcairo2 - 2d graphics

browser security

  • libnspr4, libnss3 - network security services

x11 and display

  • libx11-6, libxext6, libxfixes3 - x11 core
  • libxcomposite1, libxdamage1, libxrandr2 - compositing
  • libxcb1, libxkbcommon0 - xcb and keyboard
  • libwayland-server0 - wayland support
  • libgbm1, libgles2 - graphics buffer management

accessibility

  • libatk1.0-0t64, libatk-bridge2.0-0t64 - atk accessibility
  • libatspi2.0-0t64 - assistive technology

additional browser requirements

  • libdbus-1-3 - d-bus message bus
  • libcups2t64 - printing support
  • libexpat1 - xml parsing
  • libasound2t64 - audio support
  • libdrm2, libxshmfence1 - direct rendering
  • libxslt1.1 - xslt transformations
  • libwoff1 - web font format
  • libwebpdemux2 - webp image format
  • libharfbuzz-icu0 - text shaping
  • libenchant-2-2 - spell checking
  • libsecret-1-0 - password/secret storage
  • libhyphen0 - hyphenation

troubleshooting

finding missing dependencies

playwright provides detailed error messages for missing libraries:

╔══════════════════════════════════════════════════════╗
║ Host system is missing dependencies to run browsers. ║
║ Missing libraries:                                   ║
║     libglib-2.0.so.0                                 ║
║     libgobject-2.0.so.0                              ║
╚══════════════════════════════════════════════════════╝

package discovery process

  1. identify the package from .so file name
  2. search for ubuntu 25.10 equivalent:
# search for library
apt search ^libglib2.0

# verify exact package name
apt list libglib2.0-0t64

verifying installation

# check playwright version
uv run --with playwright playwright --version

# list installed browsers
uv run --with playwright playwright list

# test browser launch
uv run --with playwright python -c "
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    print('chromium launched successfully')
    browser.close()
"

migration notes

when migrating from ubuntu 24.04 or earlier:

  1. update all package names to match ubuntu 25.10 versions
  2. watch for t64 suffix on time-sensitive packages
  3. verify icu library version (now 76)
  4. test all three browsers after installation

the complete package list provided above has been validated in production environments and docker containers.

on this page