Run many Chromes on one Mac
Updated October 2026
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:3000Each 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.mjsYour 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:
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:
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 --allFair 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 10Boost
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?
Can I see the Chromes?
Does it work on Windows or Linux?
Is it free?
Run every test at once
Set up the MCP, get the farm's Chrome, then start as many as your computer can keep busy.
npx -y @buoy-gg/mcp@latest farm chrome setup