Repository iconcurepo.dev
CloakBrowser preview

CloakHQ / CloakBrowser

ai-agentsanti-detectantidetect-browserbot-detection

Stealth Chromium that passes every bot detection test. Drop-in Playwright replacement with source-level fingerprint patches. 30/30 tests passed.

30.8k Stars
visibility141 Watchers
fork_right2.5k Forks
Python
historyUpdated recently

description README.md

CloakBrowser

PyPI npm License Last Commit
Stars PyPI Downloads npm Downloads Docker Pulls


Stealth Chromium that passes every bot detection test.

Not a patched config. Not a JS injection. A real Chromium binary with fingerprints modified at the C++ source level. Antibot systems score it as a normal browser — because it is a normal browser.

Cloudflare Turnstile — 3 Tests Passing
Cloudflare Turnstile — 3 live tests passing (headed mode, macOS)


Drop-in Playwright/Puppeteer replacement for Python and JavaScript.
Same API, same code — just swap the import. 3 lines of code, 30 seconds to unblock.

  • 73 source-level C++ patches — canvas, WebGL, audio, fonts, GPU, screen, WebRTC, network timing, automation signals, CDP input behavior
  • humanize=True — human-like mouse curves, keyboard timing, and scroll patterns. One flag, behavioral detection passes
  • Pro: 0.9 reCAPTCHA v3 score — human-level, server-verified
  • Passes Cloudflare Turnstile, FingerprintJS, BrowserScan — tested against 30+ detection sites
  • Auto-downloads the right binary — free or Pro based on your license
  • pip install cloakbrowser or npm install cloakbrowser — binary auto-downloads, zero config
  • Latest binary, free to trysign in with GitHub, point the newest build at your hardest target, scale to thousands of sessions on Pro

Try it now — no install needed:

docker run --rm cloakhq/cloakbrowser cloaktest

Python:

from cloakbrowser import launch

browser = launch()
page = browser.new_page()
page.goto("https://example.com")
browser.close()

JavaScript (Playwright):

import { launch } from 'cloakbrowser';

const browser = await launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();

Also works with Puppeteer: import { launch } from 'cloakbrowser/puppeteer' (details)

For sites with anti-bot protection, add a residential proxy and these flags:

browser = launch(
    proxy="http://user:pass@residential-proxy:port",  # residential IP, not datacenter
    geoip=True,       # match timezone + locale to proxy IP
    headless=False,    # some sites detect headless even with C++ patches
    humanize=True,     # human-like mouse, keyboard, scroll
)
const browser = await launch({
    proxy: 'http://user:pass@residential-proxy:port',
    geoip: true,
    headless: false,
    humanize: true,
});

See Troubleshooting for site-specific issues (FingerprintJS, Kasada, reCAPTCHA).

Install

Python:

pip install cloakbrowser

JavaScript / Node.js:

# With Playwright
npm install cloakbrowser playwright-core

# With Puppeteer
npm install cloakbrowser puppeteer-core

.NET / C#:

dotnet add package CloakBrowser

Community-maintained .NET client built on Microsoft.Playwright. See dotnet/README.md for the full API.


On first run, the stealth Chromium binary is automatically downloaded (~200MB, cached locally).

Optional: Auto-detect timezone/locale from proxy IP:

pip install 'cloakbrowser[geoip]'

Migrating from Playwright? One-line change:

- from playwright.sync_api import sync_playwright
- pw = sync_playwright().start()
- browser = pw.chromium.launch()
+ from cloakbrowser import launch
+ browser = launch()

page = browser.new_page()
page.goto("https://example.com")
# ... rest of your code works unchanged

Star to show support — Watch releases to get notified when new builds drop.


Latest: v0.5.8 — 73 source-level stealth patches (Chromium 151.0.7922.108.2 — Linux + Windows)

  • CloakBrowser Pro Stable — Chromium 151.0.7922.108.2 on Linux x64, Linux ARM64, and Windows x64; macOS remains on 150.0.7871.114.3. Set a license_key (licenseKey in JS) or the CLOAKBROWSER_LICENSE_KEY env var and the wrapper fetches the latest Stable build for your platform automatically. See CloakBrowser Pro
  • CloakBrowser Pro Preview — Chromium 151.0.7922.108.3 on Linux x64, Linux ARM64, Windows x64, and macOS. Opt in with release_channel="preview" or CLOAKBROWSER_RELEASE_CHANNEL=preview.
  • .NET 8 / C# client — CloakBrowser now ships as a NuGet package (CloakBrowser), mirroring the Python and JS wrappers.
  • Chromium 151 upgrade — rebased the full patch set onto Chromium 151 (Linux + Windows), re-validated against reference data; macOS remains on the Chromium 150 Stable line
  • 73 fingerprint patches — rendering consistency improvements across Linux and Windows, corrected GPU/display/graphics parameters to match stock Chrome profiles
  • Windows native GPU passthrough — real hardware values pass through directly instead of being spoofed, matching real browser behavior
  • HTTP proxy inline credentials — new network-layer support for proxies with inline authentication
  • extension_paths — load Chrome extensions in all launch functions
  • Humanize actionability — auto-wait for visible, enabled, stable elements before humanized actions
  • Per-call human_config — override humanize settings on individual method calls
  • Composable JS helpersbuildLaunchOptions() and humanizeBrowser() for custom Playwright integrations
  • Native SOCKS5 proxyproxy="socks5://user:pass@host:port" works directly in all launch functions, Python + JS. QUIC/HTTP3 tunnels through SOCKS5 via UDP ASSOCIATE
  • Proxy signal removal — DNS/connect/SSL timing zeroed, proxy cache headers stripped, Proxy-Connection header leak removed
  • Chromium 146 upgrade — rebased all patches from 145.0.7632.x to 146.0.7680.177
  • WebRTC IP spoofing--fingerprint-webrtc-ip=auto resolves your proxy's exit IP and spoofs WebRTC ICE candidates. Auto-injected when using geoip=True (no extra network call)
  • humanize=True — one flag makes all mouse, keyboard, and scroll interactions behave like a real user. Bézier curves, per-character typing, realistic scroll patterns
  • Stealthy with zero flags — binary auto-generates a random fingerprint seed at startup. No configuration required
  • Timezone & locale from proxy IPlaunch(proxy="...", geoip=True) auto-detects timezone and locale
  • Persistent profileslaunch_persistent_context() keeps cookies and localStorage across sessions, bypasses incognito detection

See the full [CHANGELOG