Stealth Chromium engine: C++ fingerprint spoofing, raw CDP :9222, drop-in for Playwright/Puppeteer
10K+
One browser engine to rule them all. Fortress corrects the browser fingerprint from inside Chromium's C++ — canvas, WebGL, audio, fonts, navigator, and ~30 more surfaces — so your scrapers and browser agents stop getting blocked, with one line of code change. There's no JavaScript patch layer for a page to catch: every spoofed getter is a real C++ getter that reports [native code] from every realm. Point your existing Playwright or Puppeteer at it over CDP and nothing else in your code changes.
docker run --rm -p 9222:9222 tilion/fortress:latest
Raw CDP is on :9222. Point any Playwright / Puppeteer / CDP client at it — swap the browser, keep your code:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp("http://localhost:9222") # Fortress under the hood
page = browser.new_page()
page.goto("https://bot.sannysoft.com")
page.screenshot(path="all-green.png")
Tags:
:latestand:149= Chromium 149.0.7827.232 (current stable, recommended — the version the mass of real users run, and the leaner image).:151= newest engine. Identical stealth across tags.
A JavaScript stealth patch leaves an extra layer the page can find: .toString() shows the override's source, and re-grabbing the same primitive from an iframe or worker reaches past it. Fortress corrects the surface in the engine, so navigator.vendor resolves to the real C++ getter, reports [native code], and reads the same from every realm. A page inspecting itself sees stock Chromium — so whatever blocking is left traces to your proxies and behavior, not the browser.
toString() stays [native code], realm-invariant across main frame, iframes, and Web Workers.Runtime.enable leak.0% headless / 0% stealth on CreepJS · Sannysoft all-green · BrowserScan "Normal" · live Cloudflare Turnstile cleared · real Akamai Bot Manager cleared on aa.com, lowes.com, macys.com, kohls.com — same residential IP, the variable is the fingerprint, not the IP.
One binary mints a different coherent real-device identity on every launch. The container geo-matches the persona's timezone/locale to the egress IP by default; override any surface with --uxr-*:
# pin the persona to a proxy's exit region
docker run --rm -p 9222:9222 tilion/fortress:latest \
--uxr-country=DE --uxr-timezone=Europe/Berlin
29 stealth-browser tools (navigate, extract, solve captchas, detect WAF, run browser tasks) as an MCP server for Claude, Cursor, and any MCP client:
npx tilion-mcp
pip install -U tilion-fortress · npm install tilion-fortressSHA256SUMS.BSD-3-Clause · open engine, rebuild it yourself.
Content type
Image
Digest
sha256:b4f331693…
Size
582.4 MB
Last updated
2 months ago
docker pull tilion/fortress