Stealth tools · Sep 25, 2026 · 6 min read
Stealth browser options for automation: 7 free tools compared
7 free stealth tools for browser automation, read on GitHub and PyPI in September 2026: what each one changes, how current it is, and what a benchmark measured.

In short
Automation that meets a bot defence usually reaches for a free stealth tool next, and seven free ones come up again and again, from a JavaScript plugin to a rebuilt Chromium. They look interchangeable in a README and differ in one decisive point: where in the stack they intervene. We read each tool's repository and package statistics between 22 and 24 September 2026 and put them next to the one public benchmark that ran them on the same targets.
What is a stealth browser?
A stealth browser is a browser setup for automation that tries to remove the traces a website can use to recognise remote control. The seven free tools do that at three depths:
- A script inside the page. Evasion scripts run before the site's own code and overwrite values such as
navigator.webdriver. The Puppeteer stealth plugin and playwright-stealth work this way. - A patched driver. The library that talks to the browser changes how it speaks to it, so fewer protocol side effects reach the page. undetected-chromedriver, nodriver and Patchright work this way.
- A patched browser. The browser binary itself is rebuilt with changes in its source. Camoufox does this for Firefox and CloakBrowser for Chromium.
The depth decides what a tool can reach. A script cannot change the TLS handshake, and a driver cannot change what the graphics card draws.
Which 7 free stealth tools exist, and how do they compare?
Two of the seven have not published a release since 2024 or earlier, and the other five released within the last six months. The table lists what each tool changes and the state of its latest release.
| Tool | Depth and licence | Latest release |
|---|---|---|
| puppeteer-extra-plugin-stealth | script in the page, MIT | 2.11.2, 1 March 2023 |
| playwright-stealth (Python) | script in the page, MIT | 2.0.3, 4 April 2026 |
| undetected-chromedriver | patched driver for Selenium, GPL-3.0 | 3.5.5, 17 February 2024 |
| nodriver | patched driver, CDP only, AGPL-3.0 | 0.50.3, 13 May 2026 |
| Patchright | patched Playwright driver, Apache-2.0 | 1.63.0, 8 September 2026 |
| Camoufox | patched Firefox build, MPL-2.0 | 152.0.4 beta 30, 1 September 2026 |
| CloakBrowser | patched Chromium build, MIT | Chromium 152.0.7977.82.1, 23 September 2026 |
Only one public benchmark has run several of these tools against the same live targets. Ian L. Paterson tested 7 tools against 31 targets in three sweeps from one residential IP address and published the results on 13 May 2026. Two of his seven are not stealth browsers: vanilla Playwright, the untreated baseline, and curl_cffi, an HTTP client.
| Tool | OK, gated, blocked of 31 |
|---|---|
| nodriver | 28, 3, 0 |
| CloakBrowser | 26, 3, 2 |
| curl_cffi, HTTP client | 26, 3, 2 |
| Patchright | 25, 3, 3 |
| Camoufox | 25, 3, 3 |
| rebrowser-playwright | 24, 2, 5 |
| vanilla Playwright, untreated | 24, 2, 5 |
The Puppeteer stealth plugin, playwright-stealth and undetected-chromedriver were not part of that test, so no result stands next to them.
Why does the control plane matter more than the patches?
The control plane is the protocol and library that drive the browser, and it leaves traces no patch to fingerprint values can remove. Paterson's reading of his own results: "Automation-protocol-fingerprinting targets are the cliff: Playwright forks fail regardless of patch quality, and defeating that layer takes a control plane that is not Playwright." CloakBrowser, a Chromium rebuilt with source-level patches, still landed two targets behind nodriver, which leaves Chrome's fingerprint values as they are and talks to it without Playwright.
The input is a second trace that the benchmark did not score. On our own signature bench on 24 August 2026, two runs per tool against Chrome 141, nodriver 0.50.3 produced clicks with isTrusted: false at coordinate 0,0 and not a single pointer event. The tool that the benchmark ranked first was the most conspicuous one at the input layer.
Is the Puppeteer stealth plugin still maintained?
No. The last commit to the Puppeteer stealth plugin is from 1 March 2023, and its repository carries 238 open issues, 41 of which match "detected".
What does playwright-stealth change?
playwright-stealth applies 18 evasion scripts to a Playwright context, most of them overwriting navigator values and the chrome object. The project's README calls playwright-stealth "a proof-of-concept starting point".
How does nodriver differ from undetected-chromedriver?
nodriver drops Selenium and chromedriver and speaks the Chrome DevTools Protocol directly; undetected-chromedriver patches chromedriver and keeps Selenium. The same author calls nodriver "the official successor" of the older package.
What does Patchright patch?
Patchright patches Playwright's protocol leaks, among them Runtime.enable and Console.enable, and keeps Playwright's interface. Its list of patches names no fingerprint surface; the Patchright review sets its 25 of 31 targets against Playwright's 24.
How does Camoufox work?
Camoufox is a Firefox build with changes in its C++ source, and it "works with your existing Playwright code out of the box". It therefore presents a Firefox identity rather than a Chrome one. How many of its downloads run an old version is in our report on Camoufox in production.
What does CloakBrowser add?
CloakBrowser rebuilds Chromium with 87 source-level patches across canvas, WebGL, audio, fonts, GPU, screen and WebRTC, and it describes itself as a "Drop-in Playwright/Puppeteer replacement". That keeps a Playwright or Puppeteer control plane on top of the patched browser. The CloakBrowser review looks at the noise it switches on by default.
Why patch Chromium itself?
Patching the browser reaches the values a script cannot, from rendering to network behaviour. It does not remove the traces of the driver on top, which is why the depth of the patches and the choice of control plane are two separate decisions.
So which should you pick?
| Situation | Pick | Why |
|---|---|---|
| A quick script against sites without a commercial bot defence | no stealth tool | nothing on those sites checks for one |
| Python, one identity per run, AGPL acceptable | nodriver | no blocked target in the benchmark; input traces remain |
| Existing Playwright code, protocol leaks are the problem | Patchright | same interface, protocol leaks patched |
| Chrome fingerprint values must change, Playwright code stays | CloakBrowser | patched Chromium, 26 of 31 in the benchmark |
| A Firefox identity is acceptable | Camoufox | fingerprint changes in the browser itself |
| Agents that keep many identities signed in across runs | a browser built around persistent profiles | the seven leave profiles and identities to your own code or a separate manager |
Our verdict: choose by control plane first and by patch count second. The measured difference between a patched Chromium and an unpatched one was smaller than the difference between Playwright and a direct CDP connection, and none of the seven addresses how the input looks. Input is one of the four layers that decide how sites detect bots. If your code runs on Playwright or Puppeteer today, the migration guide shows how to attach it to a profile over CDP.
Scalebrowser gives each agent its own isolated browser with a persistent identity, on your own machine, so a run stays signed in, handles the captcha and finishes without anyone watching it.
Start the 7-day trialRun it on your own machine
Seven days to try it with your own agents on your own sites. Starting the trial needs a card.