What is Browservice? A proxy server that runs Chromium on Linux and streams rendered pages as JPEG images to legacy browsers. The old PC does almost no work — all processing happens server-side. Confirmed working on Windows 95, 98, NT 4.0, 2000, and XP using IE4, IE5, IE6, and Firefox 52.9.0 ESR.

Server Requirements

  • Ubuntu 22.04 LTS x86_64
  • 2+ GB RAM (for Chromium)
  • 2+ GB free disk space
  • Wired ethernet strongly recommended
  • Internet access to build

Client Compatibility

  • Windows 95 — IE 4 / IE 5
  • Windows 98 — IE 5.5
  • Windows 2000 — IE 5 / IE 6
  • Windows XP — IE6 / Firefox 52 ESR
  • Any browser with basic JavaScript
Step 01 Install Dependencies

Install all required build and runtime libraries. Accept the EULA for ttf-mscorefonts-installer when prompted.

BASH
sudo apt install wget cmake make g++ pkg-config libxcb1-dev libx11-dev \
  libpoco-dev libjpeg-dev zlib1g-dev libpango1.0-dev libpangoft2-1.0-0 \
  ttf-mscorefonts-installer xvfb xauth libatk-bridge2.0-0 libasound2 \
  libgbm1 libxi6 libcups2 libnss3 libxcursor1 libxrandr2 libxcomposite1 \
  libxss1 libxkbcommon0 libgtk-3-0 libxdamage-dev

Step 02 Clone the Repository
BASH
git clone https://github.com/ttalvitie/browservice.git
cd ~/browservice

Step 03 Download Prebuilt CEF Tarball

Downloads the prebuilt patched Chromium Embedded Framework (~400MB). This avoids compiling Chromium from scratch which requires 200GB disk and many hours.

BASH
cd ~/browservice
wget https://github.com/ttalvitie/browservice/releases/latest/download/patched_cef_x86_64.tar.bz2

Step 04 Set Up CEF

Extracts the CEF tarball and compiles the wrapper library. Takes several minutes.

BASH
./setup_cef.sh patched_cef_x86_64.tar.bz2

Step 05 Build Browservice

Compiles Browservice using all available CPU cores. Takes several minutes.

BASH
make -j$(nproc) release

Step 06 Set Sandbox Permissions

Required for Chromium's security sandbox. Must be set as root or Browservice will fail to launch.

BASH
sudo chown root:root release/bin/chrome-sandbox && sudo chmod 4755 release/bin/chrome-sandbox

Step 07 Configure Static IP on Ethernet

Find your ethernet interface name first, then configure a static IP via netplan. Wired ethernet is required for usable performance.

BASH
ip link show

Edit the netplan config. Replace enp4s0 with your interface name and adjust IPs as needed:

BASH
sudo nano /etc/netplan/00-installer-config.yaml
# Static IP ethernet only network: version: 2 ethernets: enp4s0: dhcp4: false addresses: [192.168.1.53/24] routes: - to: default via: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]
BASH
sudo netplan apply
ip addr show enp4s0
NOTE: Replace 192.168.1.53 with your static IP, 192.168.1.1 with your gateway, and enp4s0 with your actual interface name.

Step 08 Create systemd Service

Creates a service so Browservice starts automatically on boot. Adjust the username if your user is not server. Choose quality based on your client CPU.

Quality Guide:

PNG (default) — Lossless, largest. Too slow for old hardware. Do not use.
JPEG 30 — Best for slow CPUs: Pentium D, Pentium 4, older Athlon.
JPEG 50–70 — Best for mid-range: Core 2 Duo, Athlon 64 X2.
JPEG 80–90 — Best for faster legacy: Core 2 Quad, Core i3/i5 on XP.
Range is 10–100. Lower = smaller files = faster on slow CPUs.
BASH
sudo nano /etc/systemd/system/browservice.service

Slow CPU (Pentium D, P4) — quality 30:

[Unit] Description=Browservice Web Proxy After=network.target [Service] User=server WorkingDirectory=/home/server/browservice ExecStart=/home/server/browservice/release/bin/browservice \ --vice-opt-http-listen-addr=0.0.0.0:8080 \ --vice-opt-default-quality=30 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target

Faster CPU (Core 2 Duo E6700+) — quality 70:

[Unit] Description=Browservice Web Proxy After=network.target [Service] User=server WorkingDirectory=/home/server/browservice ExecStart=/home/server/browservice/release/bin/browservice \ --vice-opt-http-listen-addr=0.0.0.0:8080 \ --vice-opt-default-quality=70 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
TIP: Change quality anytime by editing the service file and running sudo systemctl daemon-reload && sudo systemctl restart browservice. The quality selector widget in the Browservice UI also lets you adjust it live per-window.

Step 09 Enable and Start the Service
BASH
sudo systemctl daemon-reload
sudo systemctl enable browservice
sudo systemctl start browservice
sudo systemctl status browservice

Step 10 Connect from the Old PC

Open your browser on the legacy machine and go to your server's static IP on port 8080.

URL
http://192.168.1.53:8080
TIP: On Windows XP, use Firefox 52.9.0 ESR — the last XP-compatible Firefox build. It handles the Browservice JavaScript streaming UI much better than IE6.

Perf Performance Notes
Quality Setting
30
Range 10–100. Lower = faster. Default PNG is too slow for old hardware.
Client Bottleneck
CPU
Pentium D = slow. Core 2 Duo E6700 or better dramatically improves smoothness.
Network
WIRED
Wired ethernet required. WiFi without antenna is unusable for JPEG streaming.
Chromium
BUNDLED
Browservice ships its own patched CEF. System browser version is irrelevant.

Update Updating Browservice Later
BASH
cd ~/browservice
git pull
wget https://github.com/ttalvitie/browservice/releases/latest/download/patched_cef_x86_64.tar.bz2
./setup_cef.sh patched_cef_x86_64.tar.bz2
make -j$(nproc) release
sudo chown root:root release/bin/chrome-sandbox && sudo chmod 4755 release/bin/chrome-sandbox
sudo systemctl restart browservice
☕ Buy Me a Coffee