{"repo":"CloakHQ/CloakBrowser","free":true,"listed":false,"github":"https://github.com/CloakHQ/CloakBrowser","clone":"git clone https://github.com/CloakHQ/CloakBrowser.git","description":"Stealth Chromium that passes every bot detection test. Drop-in Playwright replacement with source-level fingerprint patches. 30/30 tests passed.","language":"Python","stars":30214,"topics":["ai-agents","anti-detect","antidetect-browser","bot-detection","browser-automation","captcha-bypass","chromium","cloudflare","cloudflare-bypass","fingerprint","headless-browser","playwright","puppeteer","python","recaptcha","selenium","stealth-browser","undetected","web-scraping","webscraping"],"license":"MIT","category":"browser_automation","readme_excerpt":"<p align=\"center\">\n<img src=\"https://i.imgur.com/cqkp6fG.png\" width=\"500\" alt=\"CloakBrowser\">\n</p>\n\n<p align=\"center\">\n<a href=\"https://pypi.org/project/cloakbrowser/\"><img src=\"https://img.shields.io/pypi/v/cloakbrowser\" alt=\"PyPI\"></a>\n<a href=\"https://www.npmjs.com/package/cloakbrowser\"><img src=\"https://img.shields.io/npm/v/cloakbrowser\" alt=\"npm\"></a>\n<a href=\"LICENSE\"><img src=\"https://img.shields.io/github/license/cloakhq/cloakbrowser?v=1\" alt=\"License\"></a>\n<a href=\"https://github.com/CloakHQ/CloakBrowser\"><img src=\"https://img.shields.io/github/last-commit/cloakhq/cloakbrowser\" alt=\"Last Commit\"></a>\n<br>\n<a href=\"https://github.com/CloakHQ/CloakBrowser\"><img src=\"https://img.shields.io/github/stars/cloakhq/cloakbrowser\" alt=\"Stars\"></a>\n<a href=\"https://pypi.org/project/cloakbrowser/\"><img src=\"https://img.shields.io/pepy/dt/cloakbrowser?label=pypi&logo=pypi&logoColor=white\" alt=\"PyPI Downloads\"></a>\n<a href=\"https://www.npmjs.com/package/cloakbrowser\"><img src=\"https://img.shields.io/npm/dt/cloakbrowser?label=npm&logo=npm&logoColor=white\" alt=\"npm Downloads\"></a>\n<a href=\"https://hub.docker.com/r/cloakhq/cloakbrowser\"><img src=\"https://img.shields.io/docker/pulls/cloakhq/cloakbrowser?label=docker&logo=docker&logoColor=white\" alt=\"Docker Pulls\"></a>\n</p>\n\n<br>\n\n<h3 align=\"center\">Stealth Chromium that passes every bot detection test.</h3>\n\n<table><tr><td>\nNot 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 <em>is</em> a normal browser.\n</td></tr></table>\n\n<br>\n\n<p align=\"center\">\n<img src=\"https://i.imgur.com/IvB0It7.gif\" width=\"600\" alt=\"Cloudflare Turnstile — 3 Tests Passing\">\n<br><em>Cloudflare Turnstile — 3 live tests passing (headed mode, macOS)</em>\n</p>\n\n<br>\n\n<p align=\"center\">\nDrop-in Playwright/Puppeteer replacement for Python and JavaScript.<br>\nSame API, same code — just swap the import. <strong>3 lines of code, 30 seconds to unblock.</strong>\n</p>\n\n- **71 source-level C++ patches** — canvas, WebGL, audio, fonts, GPU, screen, WebRTC, network timing, automation signals, CDP input behavior\n- **`humanize=True`** — human-like mouse curves, keyboard timing, and scroll patterns. One flag, behavioral detection passes\n- **Pro: 0.9 reCAPTCHA v3 score** — human-level, server-verified\n- **Passes Cloudflare Turnstile**, FingerprintJS, BrowserScan — tested against 30+ detection sites\n- **Auto-downloads the right binary** — free or Pro based on your license\n- **`pip install cloakbrowser`** or **`npm install cloakbrowser`** — binary auto-downloads, zero config\n- **Latest binary, free to try** — [sign in with GitHub](https://cloakbrowser.dev/free), point the newest build at your hardest target, scale to thousands of sessions on Pro\n\n**Try it now** — no install needed:\n\n```bash\ndocker run --rm cloakhq/cloakbrowser cloaktest\n```\n\n**Python:**\n\n```python\nfrom cloakbrowser import launch\n\nbrowser = launch()\npage = browser.new_page()\npage.goto(\"https://example.com\")\nbrowser.close()\n```\n\n**JavaScript (Playwright):**\n\n```javascript\nimport { launch } from 'cloakbrowser';\n\nconst browser = await launch();\nconst page = await browser.newPage();\nawait page.goto('https://example.com');\nawait browser.close();\n```\n\nAlso works with Puppeteer: `import { launch } from 'cloakbrowser/puppeteer'` ([details](#puppeteer))\n\n**For sites with anti-bot protection**, add a residential proxy and these flags:\n\n```python\nbrowser = launch(\n    proxy=\"http://user:pass@residential-proxy:port\",  # residential IP, not datacenter\n    geoip=True,       # match timezone + locale to proxy IP\n    headless=False,    # some sites detect headless even with C++ patches\n    humanize=True,     # human-like mouse, keyboard, scroll\n)\n```\n\n```javascript\nconst browser = await launch({\n    proxy: 'http://user:pass@residential-proxy:port',\n    geoip: true,\n    headless: false,\n    humanize: true,\n});\n```\n\nSee [Troubleshooting](#troubleshooting) for site-specific issues (FingerprintJS, Kasada, reCAPTCHA).\n\n## Install\n\n**Python:**\n\n```bash\npip install cloakbrowser\n```\n\n**JavaScript / Node.js:**\n\n```bash\n# With Playwright\nnpm install cloakbrowser playwright-core\n\n# With Puppeteer\nnpm install cloakbrowser puppeteer-core\n```\n\n**.NET / C#:**\n\n```bash\ndotnet add package CloakBrowser\n```\n\n> Community-maintained .NET client built on Microsoft.Playwright. See [`dotnet/README.md`](dotnet/README.md) for the full API.\n\n---\n\nOn first run, the stealth Chromium binary is automatically downloaded (~200MB, cached locally).\n\n**Optional:** Auto-detect timezone/locale from proxy IP:\n\n```bash\npip install 'cloakbrowser[geoip]'\n```\n\n**Migrating from Playwright?** One-line change:\n\n```diff\n- from playwright.sync_api import sync_playwright\n- pw = sync_playwright().start()\n- browser = pw.chromium.launch()\n+ from cloakbrowser import launch\n+ browser = launch()\n\npage = browser.new_page()\npage.goto(\"https://example.com\")\n# ... rest of your code works unchanged\n```\n\n> ⭐ **Star** to show support — **[Watch releases](https://github.com/CloakHQ/CloakBrowser/subscription)** to get notified when new builds drop.\n\n---\n\n## Latest: v0.5.7 — 71 source-level stealth patches (Chromium 150.0.7871.114.6 — Linux + Windows)\n\n- **CloakBrowser Pro Stable** — Chromium `150.0.7871.114.6` 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)\n- **CloakBrowser Pro Preview** — Chromium `151.0.7922.108.2` on Linux x64, Linux ARM64, and Windows x64. Opt in with `release_channel=\"preview\"` or `CLOAKBROWSER_RELEASE_CHANNEL=preview`; macOS safely falls back to Stable.\n- **.NET 8 / C# client** — CloakBrowser now ships as a NuGet package (`CloakBrowser`), mirroring the Python and JS wrappers.\n- **71 fingerprint patches** — rendering consistency improvements across Linux and Windows, corrected GPU/display/graphics parameters to match stock Chrome profiles\n- **Windows native GPU passthrough** — real hardware values pass through directly instead of being spoofed, matching real browser behavior\n- **HTTP proxy inline credentials** — new network-layer support for proxies with inline authentication\n- **`extension_paths`** — load Chrome extensions in all launch functions\n- **Humanize actionability** — auto-wait for visible, enabled, stable elements before humanized actions\n- **Per-call `human_config`** — override humanize settings on individual method calls\n- **Composable JS helpers** — `buildLaunchOptions()` and `humanizeBrowser()` for custom Playwright integrations\n- **Native SOCKS5 proxy** — `proxy=\"socks5://user:pass@host:port\"` works directly in all launch functions, Python + JS. QUIC/HTTP3 tunnels through SOCKS5 via UDP ASSOCIATE\n- **Proxy signal removal** — DNS/connect/SSL timing zeroed, proxy cache headers stripped, Proxy-Connection header leak removed\n- **Chromium 146 upgrade** — rebased all patches from 145.0.7632.x to 146.0.7680.177\n- **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)\n- **`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\n- **Stealthy with zero flags** — binary auto-generates a random fingerprint seed at startup. No configuration required\n- **Timezone & locale from proxy IP** — `launch(proxy=\"...\", geoip=True)` auto-detects timezone and locale\n- **Persistent profiles** — `launch_persistent_context()` keeps cookies and localStorage across sessions, bypasses incognito detection\n\nSee the full [CHANGELOG.md](CHANGELOG.md) for details.\n\n## Why CloakBrowser?\n\n- **Config-level patches break** — `playwright-stealth`, `undetected-chromedriver`, and `puppeteer-extra` inject JavaScript or tweak flags. Every Chrome update breaks them. Antibot systems detect the patches themselves.\n- **CloakBrowser patches Chromium source code** — fingerprints are modified at the C++ level, compiled into the binary. Detection sites see a real browser because it *is* a real browser.\n- **Source-level stealth** — C++ patches handle fingerprints (GPU, screen, UA, hardware reporting) at the binary level. No JavaScript injection, no config-level hacks. Most stealth tools only patch at the surface.\n- **Same behavior everywhere** — works identically local, in Docker, and on VPS. No environment-specific patches or config needed.\n- **Works with AI agents and automation frameworks** — drop-in stealth for browser-use, Crawl4AI, Scrapling, Stagehand, LangChain, Selenium, and more. See [integrations](#framework-integrations).\n\nCloakBrowser doesn't solve CAPTCHAs — it prevents them from appearing. No CAPTCHA-solving services, no proxy rotation built in — bring your own proxies, use the Playwright API you already know.\n\n## CloakBrowser Pro\n\nAnti-bot systems change every week and an older binary quietly degrades. The latest build is the one that keeps passing. **Try it free, then upgrade when you're running for real.**\n\n- **Free, latest build (Chromium 150)** — the newest binary, the exact one that stays [green against live detection](#test-results). Free with a GitHub sign-in, one concurrent session. [Grab your key](https://cloakbrowser.dev/free) or run `cloakbrowser login`, then throw it at your hardest target.\n- **Pro** — when it's part of production scraping, QA, monitoring, or automation: scale to **5, 20, 200, 2,000, or more concurrent sessions**, always first on the newest patches, with hands-on support. Linux, Windows, macOS. **[See plans and pricing →](https://cloakbrowser.dev)**\n- **v146** — the older build stays free on [GitHub Releases](https://github.com/CloakHQ/cloakbrowser/releases). A quick first look, but it ages fast as detection evol","default_branch":"main","files":220,"tree":[".dockerignore",".gitattributes",".github/FUNDING.yml",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/config.yml",".github/dependabot.yml",".github/workflows/attest-release.yml",".github/workflows/ci.yml",".github/workflows/publish.yml",".gitignore","BINARY-LICENSE.md","CHANGELOG.md","Dockerfile","LICENSE","README.md","bin/cloakserve","bin/cloaktest","bin/docker-entrypoint.sh","bin/fetch-widevine.py","cloakbrowser/__init__.py","cloakbrowser/__main__.py","cloakbrowser/_version.py","cloakbrowser/browser.py","cloakbrowser/config.py","cloakbrowser/download.py","cloakbrowser/geoip.py","cloakbrowser/human/__init__.py","cloakbrowser/human/actionability.py","cloakbrowser/human/actionability_async.py","cloakbrowser/human/config.py","cloakbrowser/human/keyboard.py","cloakbrowser/human/keyboard_async.py","cloakbrowser/human/mouse.py","cloakbrowser/human/mouse_async.py","cloakbrowser/human/scroll.py","cloakbrowser/human/scroll_async.py","cloakbrowser/human/stealth_dom.py","cloakbrowser/license.py","cloakbrowser/widevine.py","dotnet/.gitignore","dotnet/CloakBrowser.sln","dotnet/README.md","dotnet/examples/CloakBrowser.Examples/CloakBrowser.Examples.csproj","dotnet/examples/CloakBrowser.Examples/Program.cs","dotnet/src/CloakBrowser.Cli/CloakBrowser.Cli.csproj","dotnet/src/CloakBrowser.Cli/Program.cs","dotnet/src/CloakBrowser.Generators/CloakBrowser.Generators.csproj","dotnet/src/CloakBrowser.Generators/InterfaceDelegationGenerator.cs","dotnet/src/CloakBrowser/CloakBrowser.csproj","dotnet/src/CloakBrowser/CloakLauncher.cs","dotnet/src/CloakBrowser/CloakLog.cs","dotnet/src/CloakBrowser/CloakVersion.cs","dotnet/src/CloakBrowser/Config.cs","dotnet/src/CloakBrowser/Diagnostics.cs","dotnet/src/CloakBrowser/Download.cs","dotnet/src/CloakBrowser/GeoIp.cs","dotnet/src/CloakBrowser/Handles.cs","dotnet/src/CloakBrowser/Human/Actionability.cs","dotnet/src/CloakBrowser/Human/HumanConfig.cs","dotnet/src/CloakBrowser/Human/HumanKeyboard.cs","dotnet/src/CloakBrowser/Human/HumanMouse.cs","dotnet/src/CloakBrowser/Human/HumanPage.cs","dotnet/src/CloakBrowser/Human/HumanRandom.cs","dotnet/src/CloakBrowser/Human/HumanScroll.cs","dotnet/src/CloakBrowser/Human/IsolatedWorld.cs","dotnet/src/CloakBrowser/Human/PlaywrightAdapters.cs","dotnet/src/CloakBrowser/Human/StealthDom.cs","dotnet/src/CloakBrowser/LaunchOptions.cs","dotnet/src/CloakBrowser/License.cs","dotnet/src/CloakBrowser/ProxyResolver.cs","dotnet/src/CloakBrowser/ProxySettings.cs","dotnet/src/CloakBrowser/ViewportDefaults.cs","dotnet/src/CloakBrowser/Widevine.cs","dotnet/src/CloakBrowser/Wrappers/HumanCursor.cs","dotnet/src/CloakBrowser/Wrappers/Humanize.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedBrowser.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedBrowserContext.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedElementHandle.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedFrame.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedKeyboard.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedLocator.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedMouse.cs","dotnet/src/CloakBrowser/Wrappers/HumanizedPage.cs","dotnet/src/CloakBrowser/Wrappers/LocatorHumanizer.cs","dotnet/tests/CloakBrowser.Tests/BezierMathTests.cs","dotnet/tests/CloakBrowser.Tests/BuildArgsTests.cs","dotnet/tests/CloakBrowser.Tests/CloakBrowser.Tests.csproj","dotnet/tests/CloakBrowser.Tests/ConfigTests.cs","dotnet/tests/CloakBrowser.Tests/DiagnosticsTests.cs","dotnet/tests/CloakBrowser.Tests/DownloadConfigTests.cs","dotnet/tests/CloakBrowser.Tests/EnvSerialCollection.cs","dotnet/tests/CloakBrowser.Tests/FontWarningTests.cs","dotnet/tests/CloakBrowser.Tests/Human/NonAsciiKeyboardTests.cs","dotnet/tests/CloakBrowser.Tests/Human/PointerEventsFailOpenTests.cs","dotnet/tests/CloakBrowser.Tests/Human/StealthDomTests.cs","dotnet/tests/CloakBrowser.Tests/Human/TimeoutBudgetTests.cs","dotnet/tests/CloakBrowser.Tests/HumanConfigTests.cs","dotnet/tests/CloakBrowser.Tests/LicenseTests.cs","dotnet/tests/CloakBrowser.Tests/MiscTests.cs","dotnet/tests/CloakBrowser.Tests/ProxyResolverTests.cs","dotnet/tests/CloakBrowser.Tests/ScrollFallbackTests.cs","dotnet/tests/CloakBrowser.Tests/SignatureTests.cs","dotnet/tests/CloakBrowser.Tests/ViewportTests.cs","dotnet/tests/CloakBrowser.Tests/WidevineTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/BrowserContextWrapperTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/FakeProxy.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/FocusCheckTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/GeneratorDelegationTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/LocatorWrapperTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/MouseKeyboardWrapperTests.cs","dotnet/tests/CloakBrowser.Tests/Wrappers/PageWrapperTests.cs","examples/basic.py","examples/fingerprint_scan_test.py","examples/integrations/agent_browser.sh","examples/integrations/aws_lambda/Dockerfile","examples/integrations/aws_lambda/INSTRUCTIONS.md","examples/integrations/aws_lambda/lambda-entrypoint.sh","examples/integrations/aws_lambda/lambda_handler.py","examples/integrations/browser_use_example.py","examples/integrations/crawl4ai_example.py","examples/integrations/crawlee_example.py","examples/integrations/langchain_loader.py","examples/integrations/scrapling_example.py","examples/integrations/selenium_example.py","examples/integrations/undetected_chromedriver.py","examples/persistent_context.py","examples/recaptcha_score.py","examples/stealth_test.py","flake.lock","flake.nix","images/avatar.png","images/browserscan_normal.png","images/fingerprintjs_pass.png","images/logo.png","images/recaptcha_v3_score_09.png","images/turnstile_non_interactive.png","js/README.md","js/examples/basic-playwright.ts","js/examples/basic-puppeteer.ts","js/examples/persistent-context.ts","js/examples/stagehand.ts","js/examples/stealth-test.ts","js/package-lock.json","js/package.json","js/src/args.ts","js/src/cli.ts","js/src/config.ts","js/src/download.ts","js/src/fonts.ts","js/src/geoip.ts","js/src/human-puppeteer/index.ts","js/src/human-puppeteer/keyboard.ts","js/src/human-puppeteer/scroll.ts","js/src/human/actionability.ts","js/src/human/config.ts","js/src/human/elementhandle.ts","js/src/human/index.ts","js/src/human/keyboard.ts","js/src/human/mouse.ts","js/src/human/scroll.ts","js/src/human/stealthDom.ts","js/src/index.ts","js/src/license.ts","js/src/playwright.ts","js/src/proxy.ts","js/src/puppeteer.ts","js/src/types.ts","js/src/widevine.ts","js/tests/cli.test.ts","js/tests/config.test.ts","js/tests/extension-loading.test.ts","js/tests/fonts.test.ts","js/tests/geoip.test.ts","js/tests/humanize.test.ts","js/tests/launch.test.ts","js/tests/license.test.ts","js/tests/proxy.test.ts","js/tests/puppeteer.test.ts","js/tests/setup.ts","js/tests/signature.test.ts","js/tests/stealth.puppeteer.test.ts","js/tests/stealth.test.ts","js/tests/stealthDom.test.ts","js/tests/update.test.ts","js/tests/widevine-integration.test.ts","js/tests/widevine.test.ts","js/tsconfig.json","js/vitest.config.ts","pyproject.toml","tests/__init__.py","tests/conftest.py","tests/test_build_args.py","tests/test_cli.py","tests/test_cloakserve.py","tests/test_config.py","tests/test_extension_loading.py","tests/test_extract.py","tests/test_fetch_widevine.py","tests/test_font_warning.py","tests/test_free_version_pin.py","tests/test_geoip.py","tests/test_human_visual.mjs","tests/test_human_visual.py","tests/test_humanize_unit.mjs","tests/test_humanize_unit.py","tests/test_lambda_security.py","tests/test_launch.py","tests/test_launch_context.py","tests/test_license.py","tests/test_license_error.py","tests/test_login.py","tests/test_persistent_context.py","tests/test_proxy.py","tests/test_stealth.py","tests/test_stealth_reproduction_110.py","tests/test_stealth_resolver_js.py","tests/test_stealth_unit.py","tests/test_update.py","tests/test_welcome_banner.py","tests/test_widevine.py"],"storefront":"/r/CloakHQ","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/CloakHQ/CloakBrowser/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}