OpenBrowse

Running it on a Raspberry Pi

Why a Pi 5 is enough to run browser agents, how many concurrent sessions it will hold, and the three things that behave differently on Pi hardware.

The thing most people get wrong here is worth settling before you buy anything: OpenBrowse does not run a model on your Pi. The model runs at OpenAI or Anthropic, over the network. What the Pi does is drive Chromium, read what the pages say, and pass that back and forth.

That is an orchestration workload rather than an inference one, and the distinction is the whole reason this works. A Pi cannot host a frontier model and never will. It can comfortably run a browser and a Python process, which is all that is being asked of it.

Every figure on the benchmarks page was measured on a Raspberry Pi 5 with 16GB of RAM running 64-bit Debian, against a hosted service running in a datacentre. Nothing was scaled down for the occasion, and the Pi was not the slow side of that comparison.

What you need

A Raspberry Pi 5. It was built and benchmarked on the 16GB model, and the useful way to think about the memory is per session rather than in total: budget roughly 2GB of RAM and one CPU core for each session you want to run at the same time. Chromium itself accounts for 400 to 600MB of that, and the rest covers the pages it loads, the virtual display it draws into, and the Python process.

Storage with room to spare. The browser build is around 200MB to download and wants roughly 2GB of free disk. On SD-card hardware that download is slow enough to matter, which the server already knows about: it fetches the browser at boot if it is missing, and a session launch waits for a fetch already in flight rather than racing it. Two processes competing for one SD card is the difference between a browser that starts and one that misses its readiness window.

An API key, from OpenAI or Anthropic. This is the only recurring cost of running OpenBrowse, and it is worth reading what a run actually costs before you pick a model, because the spread between the cheapest and dearest configuration is wider than most people expect.

How many sessions it will hold

One, by default. MAX_CONCURRENT_SESSIONS raises it, up to a hard ceiling of eight, and the limit that matters in practice is memory rather than anything in the application: two gigabytes and a core each, so a 16GB Pi 5 runs out of room long before it runs out of permission.

Past the cap, a session is accepted and queued rather than refused, and the create call returns straight away. Your client does not need to handle a busy signal.

Three things that are only true on a Pi

The kernel ships with pressure metrics turned off. Linux can report how hard processes are waiting on CPU, and OpenBrowse uses that to decide whether the machine has room for another session. Raspberry Pi OS compiles the feature in but leaves it disabled, so openbrowse tune adds psi=1 to the boot configuration for you. It takes effect after a reboot, and until then load average is used instead, which is a coarser answer to the same question.

The lighter browser profile is pre-selected. Chromium's GPU process and its per-site renderer fan-out are worth their overhead on a workstation. Under a virtual display on a small board they cost more than they give back, so setup pre-selects the lighter flags on a Pi, on any machine with four cores or fewer, and on anything with 8GB of memory or less. It stays a checkbox: the recommendation is not a lock.

The system Python refuses to be written to. Raspberry Pi OS and Debian both mark it as externally managed, so a bare pip install is refused by the distribution rather than by us. uv tool install openbrowse sidesteps this entirely and is what the installation guide recommends; pipx does the same job if you already have it.

Installing it

There is nothing Pi-specific about the steps, so they live in one place: follow the installation guide. It reads your hardware before it asks you anything, including whether it is running on a Pi and whether the root filesystem is on an SD card, and it sizes the concurrency slider to what the machine can actually hold.

Once it is running, openbrowse tune applies the two host-level changes above in one idempotent command.

On this page