Be any machine.
Apostate is Chromium that presents the Windows, macOS or Linux machine you choose: its GPU, screen, fonts, voices and locale. The values are changed in C++ where Chromium makes them, so there is no injected script for a page to find.
pip install apostate
Changed where the values are made.
A stealth script patches what JavaScript can read, and a page can test the patch. Apostate edits the C++ that produces each value instead, so the value a page reads is the only one there is.
from apostate import launch
browser = launch(
fingerprint=42,
fingerprint_platform="windows",
proxy="socks5://user:pass@host:1080",
)
page = browser.new_page()
page.goto("https://example.com") ./chrome --fingerprint=42 --fingerprint-explain- navigator.userAgent
- Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
- navigator.platform
- Win32
- WEBGL_RENDERER
- ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Ti (0x00002482) Direct3D11 vs_5_0 ps_5_0, D3D11)
- screen
- 1920 × 1080avail 1920 × 1032, taskbar
- cores · memory
- 8 · 8 GBnever above the host
- fonts
- Segoe UI, Calibri, Cambria, ConsolasWindows 11 set only
- voices
- Microsoft David, Microsoft Mark, Microsoft Zira22 voices
- timezone · locale
- America/New_York · en-USfrom the proxy exit
Example values. --fingerprint-explain prints your seed's machine. Timezone and locale follow the proxy, not the persona.
In C++, not JavaScript
No injected script, no CDP override, no redefined getter. Chromium 152, patched at the source.
A whole machine
User-Agent and Client Hints, WebGL and WebGPU captured on real hardware, screen and taskbar, system fonts, voices, cameras.
Same seed, same machine
A seed gives the same machine on every launch and every host. A persistent profile keeps its machine and its cookies.
Drops into your stack
Python and Node packages fetch the browser and launch it. Headless on a Linux server with no GPU and no display.
Measured, then published.
FingerprintJS Pro suspect score from its public playground, 0 to 100, lower is better. Every run is headed, through a proxy, on the date shown.
- 0 Apostate 0.4.3 · Windows persona on a Mac
- 8 Apostate 0.4.3 · Windows persona, automated
- 3 A real Windows 11 PC · Chrome
Still raised in automated runs: anti_detect_browser on some Windows personas, and anomaly 1 on
Linux personas. Known gaps
Screenshots from 2026-09-27: one Windows persona, running on a Mac.
Start with one line.
pip install apostate npm install @heretic-tech/apostate