Skip to content
Work in progressnormalbrowser is in closed beta. Browser builds are not published yet, payments are off, and the pages here describe where it is going. Watch the repository or sign in to be told when it ships.
normalbrowser
Google Chrome 138Firefox 153Windows

A "normal browser".

normalbrowser shows up to websites as a completely normal browser. Real Google Chrome and Firefox. Anti-bot systems see a completely real, normal browser, because it is one. Drop-in support for Playwright and Puppeteer.

JavaScript
npm install normalbrowser
Python
pip install normalbrowser
Docker
docker run --rm normalbrowser/normalbrowser test

First launch downloads the browser build (about 200 MB), checks its SHA-256 and caches it. Free for 1 session with nothing to sign up for, or 3 at a time with a free account.

quickstart

Install it, then write the code you were already writing

The API is Playwright's. Pick your language, paste the sample, run it. The browser opens with a fresh device identity and human-like input already on.

example.ts
import { chromium } from 'normalbrowser';

const browser = await chromium.launch({
  headless: false,
  humanize: true,            // on by default; shown for clarity
  persona: { country: 'US', seed: 42 },
});

const page = await browser.newPage();
await page.goto('https://example.com');
await page.getByRole('link', { name: 'More information' }).click();

console.log(await page.title());
await browser.close();
Already have a script?

One line. Or none, if you let the CLI redirect the playwright import for you and leave the file alone.

- import { chromium } from 'playwright';
+ import { chromium } from 'normalbrowser';

  // Everything below this line is unchanged.
npx normalbrowser run ./my-script.js
Works with
PlaywrightPuppeteerCDPMCP

Puppeteer via normalbrowser/puppeteer, anything else over the CDP server mode. Docs

why

Built into the browser, not bolted onto the page

Most stealth tooling is a JavaScript shim on top of a stock browser. Detectors know exactly what those look like. This is a different kind of thing.

Patched at the source

Canvas, WebGL, audio, fonts, screen, hardware, timezone, WebRTC and the automation flags are changed in C++ and compiled in. There is no injected script for a detector to find, and nothing racing the page load.

Two layers of stealth

The fingerprint is one layer, the driver is the other. Automation goes through a channel the page cannot see, and every identity gets its own stable, self-consistent device.

Drop-in replacement

Same Playwright and Puppeteer API, in JavaScript, Python and Java. Locators, auto-waiting, assertions, request interception. Your scripts and your muscle memory carry over.

Human-like input, on by default

Pointer paths with real acceleration and overshoot, keystrokes with real rhythm, generated inside the browser as trusted events, including into cross-origin iframes. Turn it off with humanize: false.

Persistent profiles: a logged-in session survives a restart
Reproducible identities: the same seed gives the same device
Proxy-aware: HTTP and SOCKS5 with auth, timezone and locale matched to the exit
WebRTC leak-proofing on every launch
CDP server mode for other clients and tools
MCP server with 27 tools for AI agents
CLI: install, doctor, profiles, personas, scoreboard
Docker image, ready for a VPS or a cluster
No CAPTCHA solving, and no help with stuff you are not allowed to do
supported

What it runs on

Real Google Chrome, not Chromium: the same branded build Google ships, with our patches applied. Plus Firefox, with three language wrappers, and a version table that grows as new upstream releases get tracked.

Platforms
Google Chrome means real Google Chrome, not Chromium.
OSArchGoogle ChromeFirefox
Windowsx64yesyes
Languages
  • JavaScript / TypeScript
    npm
    npm install normalbrowser
  • Python
    PyPI
    pip install normalbrowser
  • Java
    Maven Central
    implementation("com.normalbrowser:normalbrowser:0.1.0")
Engine versions
npx normalbrowser install fetches the current build. Older builds stay available by version.
EngineVersionUpstreamPatchesReleasedStatus
Google Chrome138138.0.7204.96122026-08current
Firefox153153.0 (reports 152)232026-08current
test results

Tested against the detectors people actually hit

Stock Playwright on the left, normalbrowser on the right, same machine, same network. Run the scoreboard yourself with one command. Your exit IP and persona change the result, so read it that way.

Measurements in progress. Rows marked TBD have not been run against this build yet. Results are posted straight from the test harness as each service is measured; nothing in this table is typed by hand.
Detection services
ServiceStock PlaywrightnormalbrowserNotes
reCAPTCHA v3 scoreTBDTBDServer-side verified
Cloudflare TurnstileTBDTBDManaged challenge, auto-resolves
Cloudflare Bot ManagementTBDTBD
DataDomeTBDTBD
PerimeterX / HUMANTBDTBD
Akamai Bot ManagerTBDTBD
FingerprintJS ProTBDTBDBot detection + visitor id
CreepJSTBDTBDTrust score
BrowserScanTBDTBD
bot.incolumitas.comTBDTBD
SannysoftTBDTBD
pixelscan.netTBDTBD
Individual signals
SignalStockOurs
navigator.webdrivertruefalse
CDP / automation channel visible to pageyesno
isTrusted on synthetic inputtrue (shallow)true, native
Input reaches cross-origin iframespartlyyes
OS cursor moved by automationnono
Canvas / WebGL / audio hash per identityshareddistinct, stable
TLS fingerprint matches claimed browseryesyes
HTTP/2 fingerprint matches claimed browseryesyes
WebRTC leaks real IP behind proxyyesno
Timezone / locale / Intl agree with IPnoyes
npx normalbrowser scoreboard --control=stock
use cases

What people run on it

Anything that needs a browser the site treats as a visitor instead of a script.

Market intelligence

Price monitoring, catalogue tracking and public listing collection at a scale where a stock browser just gets blocked.

Accounts and profiles

Run many accounts you own from one machine, each with its own stable device identity, without them being linked to each other.

Brand and ad verification

See what a real visitor in a given country sees: the creative, the landing page, the redirect chain. Not the version served to bots.

QA and engineering

Test your own anti-bot rules, replay production flows, and drive third-party sites in end-to-end tests that would otherwise fail on a challenge page.

AI agents

Give an agent a browser it can actually use. The built-in MCP server returns snapshots with stable refs, so the model clicks what it saw.

Monitoring

Uptime, content-change and compliance monitoring across sites that treat headless traffic as an attack.

how it works

Four steps, no configuration

The complexity is in the build, not in your setup.

  1. 1

    Install the package

    npm, pip, Maven or NuGet. The package is the client, and it is small.

  2. 2

    The browser downloads itself

    On first launch, or with normalbrowser install. About 200 MB, SHA-256 verified, cached per user.

  3. 3

    Playwright starts our binary

    The client points the driver at the patched build and applies a persona: locale, timezone, screen, hardware, all consistent with each other.

  4. 4

    You write normal code

    Locators, clicks, typing, assertions. Input is generated natively and arrives as trusted events.

What the patches cover

Every item below is a change to the engine source, compiled into the binary. The count per build is in the version table.

Automation flags
navigator.webdriver, automation switches, driver sandbox
Native input
Trusted, cursorless pointer and keyboard events routed into any frame
Pointer motion
Minimum-jerk paths, Fitts-law timing, overshoot, landing scatter
Keystroke dynamics
Digraph timing, shift cost, thinking pauses, press-and-hold tremor
Canvas 2D
Per-identity readback noise, stable across a session
WebGL
readPixels noise, renderer and vendor strings
Web Audio
Time-domain, frequency-domain and offline-context noise; sample rate
Fonts and text metrics
Element rect and measureText advance jitter
Screen
width, height, avail*, colorDepth, pixelDepth, CSS device-size media
Hardware
hardwareConcurrency (main thread and workers), deviceMemory
Timezone and locale
Intl and Date agree with each other and with the persona
Media devices
Synthesised enumerateDevices list
Speech synthesis
Voice list matched to the persona OS
Storage
navigator.storage.estimate quota
WebRTC
ICE candidate leak-proofing on every launch
Build identity
buildID, UA, platform, oscpu made consistent
$ normalbrowser mcp

An MCP server ships in the box

Claude, Cursor or any MCP client can drive the browser directly. Snapshots come back with stable [ref=eN] handles, so the model clicks the thing it saw instead of making up a selector, and it can check its own disguise with browser_audit.

.mcp.json
{
  "mcpServers": {
    "normalbrowser": {
      "command": "npx",
      "args": ["normalbrowser", "mcp"]
    }
  }
}
pricing

Free during the beta, up to 3 sessions.

Every feature on every plan. What changes is how many sessions can run at once on a machine.We are not taking payments yet. The paid tiers are shown so you know what is coming.

Free during the beta

Free

The whole thing. Sign in for more of it.

Free
1 session, 3 with an account
  • 1 session with no account
  • 3 sessions with a free account
  • Every feature, no time limit
  • Community

No card, no trial clock. The free key is issued the moment you sign in.

Member

Coming soon

For one person and a few jobs.

$15/mo
$10/mo
50 concurrent sessions

Payments open after the beta.

  • 50 concurrent sessions
  • 1 license key
  • Cancel any time
  • Hands-on support

VIP

Coming soon

Real concurrency for a small team.

$40/mo
$25/mo
200 concurrent sessions

Payments open after the beta.

  • 200 concurrent sessions
  • Multiple license keys
  • Usage across machines
  • Hands-on support

Sponsor

Coming soon

Production fleets.

$195/mo
$145/mo
2,000 concurrent sessions

Payments open after the beta.

  • 2,000 concurrent sessions
  • Early access to engine builds
  • Invoicing
  • Priority support

Gamer

Coming soon

No cap. Run whatever you want.

$695/mo
$495/mo
unlimited concurrent sessions

Payments open after the beta.

  • Unlimited concurrent sessions
  • Patch requests
  • Security review, procurement
  • Priority support, named engineer
Every plan includes
  • Latest Google Chrome and Firefox builds, with compatibility updates
  • Windows
  • JavaScript / TypeScript, Python and Java
  • Playwright, Puppeteer and CDP
  • Human-like input, on by default
  • Persistent profiles and reproducible identities
  • Proxy support with WebRTC leak-proofing
  • MCP server for AI agents

During the beta nothing is for sale and nothing is charged. The paid tiers above are what they will cost when payments open, in USD, billed monthly, cancel any time. Sign in now and the free key you get is yours for good.

faq

Frequently Asked Questions

Is this a Playwright plugin or a real browser?

A real browser. We ship patched Chrome and Firefox builds with the fingerprint and input changes compiled in at the C++ level. Nothing gets injected into the page, so there is no script for a detector to find.

Do I have to change my code?

Usually not. Swap the import from playwright to normalbrowser, or run your script through the CLI and leave the import alone. The API is the same as Playwright.

What do I actually get for free?

The whole product, every engine, every feature, every platform. 1 session at a time with nothing signed up for, 3 at a time with a free account. No card, no trial clock.

What is human-like input, and can I turn it off?

Pointer paths, timing and keystroke rhythm modelled on real people, generated inside the browser. It is on by default. Pass humanize: false to launch when you want raw speed, for example in tests against your own systems.

A site that used to work started blocking me. Now what?

On a paid plan that is our problem. Open a ticket with the site and a repro and we ship a fix in the next engine build. The version table on this page shows what is current.

How do I set the license key?

Set NORMALBROWSER_LICENSE_KEY in the environment. Nothing changes in your code. A key works on any number of machines; the limit is sessions per machine, and the dashboard shows where the key has been used.

What happens when I cancel?

You keep the concurrency you paid for until the end of the billing period, then the client falls back to the free tier. Nothing stops working, it just drops back to 3 sessions at a time on your free key.

Is there a hosted option?

Yes, on request. If you would rather not run the binaries yourself, email us and we will set you up with a managed pool.

Can I redistribute the binaries?

No. Internal use on as many machines as you like is fine; bundling the browser into a product you sell needs an OEM licence.

What will you not do?

We do not solve CAPTCHAs, and we do not help with anything you are not allowed to automate. See the acceptable use policy.

Something else? Read the docs or email us, the address is in the footer.

$ npx normalbrowser install

Try it on the site that blocks you

Free for 1 session with no account, 3 with one. No card, nothing held back.