Web apps · Chrome · AI agents

Run many Chromes on one Mac

Updated October 2026

The Chrome Farm runs many slim Chromes on one computer. Each one runs your web app on its own, like a lone Chrome. Your tests or your AI agent drive them all at the same time. It's free with a Buoy account.

Start

Get the farm's Chrome once, then start 8 on your app:

npx -y @buoy-gg/mcp@latest farm chrome setup
npx -y @buoy-gg/mcp@latest farm chrome up 8 --url http://localhost:3000

Each Chrome prints its own debugging address. Playwright, Puppeteer and Buoy can all use it. If your app has Buoy inside, each Chrome shows up as its own device, so every Buoy tool works on it.

What it's for

  • AI agents: your agent starts the Chromes it needs. It keeps them open while it works. With Buoy in your app, each Chrome is its own device.
  • Careful tests: each Chrome has a memory cap. You can pause it. One can get the computer to itself for a fair speed check.
  • Knowing how many: we measured how many this kind of Mac keeps smooth.

Plain Playwright tests already run side by side with the same slim Chrome. On our test Mac, 64 tests took 18 s with 16 Playwright workers. They took 16 s on 16 farm Chromes, about even. Use the farm for the things above.

Run your tests side by side

One command starts the Chromes, runs your test once in each and closes them all:

npx -y @buoy-gg/mcp@latest farm chrome run 8 --url http://localhost:3000 -- node my-test.mjs

Your test gets its Chrome's address in BUOY_CHROME_CDP. With a list of jobs, the Chromes take them in turn. Between jobs, the farm clears the app's storage and reloads it in the same Chrome. That's about 4 times faster than starting a new one.

Why the farm's Chrome is slim

The farm runs chrome-headless-shell from Chrome for Testing, at one fixed version. It's Chrome's engine without the window parts. Here is what we measured with our test app open:

Full Chrome, window openFarm Chrome
Memory with the app open932 MB243 MB
Memory while the app is busy1,420 MB601 MB
Programs74
Ready to use716 ms410 ms

Each Chrome gets its own profile, so storage never mixes. A fixed version means no surprise updates between runs.

How many to run

Memory is rarely the limit. The limit is how many Chromes work hard at the same moment. We tested on an M5 Max with 18 cores and 128 GB. Every Chrome clicked through our app nonstop:

Busy at onceEach stepSmooth framesWork done
1sameyes1x
613% sloweryes5.9x
1227% sloweryes11.3x
1634% sloweryes14.8x
242.1 times sloweryes17x

With full Chrome windows, one per test, the same Mac dropped frames at 12 and kept a lone Chrome's speed with only 1 busy.

Up to 16, every test passed with smooth frames and no input lag. Steps got slower because this chip has 6 fast "Super" cores. One Chrome alone always gets one. A crowd shares them.

Real tests pause between steps. We added a 300 ms pause after each step. Then 24 Chromes ran at a lone Chrome's speed. And 32 did 32 times the work, with every test passing. farm chrome doctor suggests numbers for your computer.

100 at once

We opened 100 Chromes on the test app. All 100 were ready in 55 seconds and used 31.5 GB together. An open app can still work when no test touches it. So pause the ones you aren't using. A paused Chrome keeps its page and memory but uses no CPU. It wakes right away.

npx -y @buoy-gg/mcp@latest farm chrome pause --all

Fair speed numbers

Frame times and input delay match a lone Chrome only while no more Chromes are busy than you have top cores. When more are busy, take a quiet window. It pauses every other Chrome for a few seconds, so one gets the computer to itself. They wake up by themselves.

npx -y @buoy-gg/mcp@latest farm chrome quiet <id> --seconds 10

Boost

With --boost, the Chrome a test is driving right now gets one of the fastest cores, and the others wait a little lower. With 32 to 48 Chromes pausing between steps, like real tests, steps took 6% to 24% less time. With 48, the slowest Chrome's input delay rose from about 55 to 80 ms. So it's off by default.

One Chrome can't take down the rest

  • Each Chrome has a memory cap, 2 GB by default. One that goes over is closed.
  • The farm checks every Chrome every 15 seconds and notes the ones that stop answering.
  • Each Chrome runs alone, so a crash only ends that one.
  • An agent only touches the Chromes it started.

Does my app need a Buoy package?

No. The farm runs any web app at a URL. If the app has Buoy inside, each Chrome also shows up as its own device for Buoy tools.

Can I see the Chromes?

They run without a window. Take a screenshot with farm chrome shot, or let your agent use chrome_farm_screenshot.

Does it work on Windows or Linux?

It is built for the Mac first. Linux and Windows are not tested yet.

Is it free?

Yes, with a free Buoy account.

Run every test at once

Set up the MCP, get the farm's Chrome, then start as many as your computer can keep busy.

Quick startnpx -y @buoy-gg/mcp@latest farm chrome setup