What Is Puppeteer Stealth? β Definition and How It Works
Learn how the stealth plugin's evasion modules work, what each module patches, why modular design matters, and what the approach cannot cover.
Puppeteer Stealth is a plugin for the Puppeteer ecosystem that applies a collection of small patches β called evasions β each addressing one property that a default automated browser exposes differently from an ordinary one.
1. The Modular Design
Rather than one large patch, the plugin ships many independent modules. Each targets a single property, and they can be enabled or disabled individually.
import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch();
2. What the Modules Cover
| Module target | Default behaviour it addresses |
|---|---|
| Automation flag | A property announcing remote control |
| Permissions behaviour | Query results that differ under automation |
| Plugin and MIME lists | Empty where an ordinary browser has entries |
| Language settings | Missing or inconsistent locale values |
| Renderer strings | Values characteristic of headless environments |
| Window and screen properties | Dimensions inconsistent with the reported device |
Each is small. The collection matters because detection looks at combinations, and one uncorrected property can contradict all the others.
3. Why Modularity Helps
Different properties change at different times as browsers evolve. A modular design means one module can be fixed without touching the rest, and users can disable a module that causes a problem on a specific site.
It also makes the approach legible: each evasion is inspectable, so its purpose and limits can be understood rather than taken on trust.
4. What It Cannot Address
The plugin operates inside the browser, so it cannot change anything decided outside it:
- Network reputation attached to the address.
- TLS and HTTP/2 fingerprints produced by the browser's own stack.
- Behaviour β pacing, navigation patterns, interaction rhythm.
- Volume, which is a policy decision rather than a configuration.
5. Maintenance Is Inherent
Browser internals change with every release, and detection changes independently. Modules that were necessary become obsolete, and new properties appear that no module yet addresses.
Any project depending on this class of tool is accepting continuous maintenance, which is worth costing honestly at the outset.
6. Legitimate Uses
Testing a site as an ordinary visitor, running QA or monitoring contracted by the site owner, operating accessibility tooling whose defaults trip detection, and researching detection behaviour itself.
7. What Works Better for Sustained Collection
An API where one exists; permission and an allow-list entry keyed on a stable identifier; a documented user agent; and a request rate the destination can absorb comfortably.
None of those require chasing browser internals, which is the practical argument for them.
8. Summary
Puppeteer Stealth applies many small, independent patches to properties that a default automated browser reports differently, with modularity making the set maintainable and inspectable.
It addresses the in-browser layer only, leaves reputation, protocol fingerprints, behaviour, and volume untouched, and commits its users to ongoing maintenance as browsers and detection both change.