Skip to main content

One consistent browser profile.

Stealth mode is on by default. Requests send the same headers as Chrome 130 on Windows, and the page sees navigator values that match those headers, so sites get one coherent picture of the browser.

What the page sees
navigator.webdriver          // false
navigator.platform           // "Win32"
navigator.language           // "en-US"
navigator.hardwareConcurrency // 8
Sec-Ch-Ua: "Chromium";v="130", "Google Chrome";v="130"

How it works.

  1. Headers

    User-Agent, Accept, Accept-Language, Sec-Ch-Ua and Sec-Fetch-* headers follow Chrome 130 on Windows.

  2. Page environment

    Before page scripts run, navigator, screen and hardware values are set to match the same profile.

  3. Your overrides

    Change the User-Agent with --user-agent, add headers with --http-header, or turn it all off with --no-stealth.

What you get.

Matching values

Headers and navigator values describe the same browser, instead of a headless default that contradicts itself.

Proxy support

Send traffic through HTTP, HTTPS or SOCKS5 proxies with --http-proxy, including basic auth and bypass lists.

Off when you want

Use --no-stealth for testing your own sites, where you want the browser to identify itself plainly.

Common questions.

Will this get past every bot check?
No tool can promise that. Stealth mode removes the most common headless giveaways and keeps the profile consistent. Use it only on sites where automated access is allowed.
Can I change the profile?
You can override the User-Agent and add headers from the command line. The default profile is defined in src/stealth/fingerprint.ts.

Put Stealth profile to work.

The docs walk you through starting the server and connecting your first agent.