Skip to main content
Apostate is an anti-detect browser, a build of Chromium 155 that presents a machine you choose to every web page it opens. You pick a persona (Windows, macOS or Linux) and a seed, and the browser composes a whole machine to match: the User-Agent and Client Hints, a GPU with its WebGL and WebGPU values, CPU cores and memory, the screen and taskbar, system fonts, speech voices, cameras and speakers, keyboard layout, locale and timezone. Apostate changes each value in Chromium’s C++, at the place Chromium produces it. It injects no JavaScript into pages and sets no DevTools override, so a page finds no patched getter or extra script. Workers, iframes and HTTP headers read the same values as the main page. Apostate is free and open source under GPL-3.0. There is no account, licence key or paid tier.

What you get

  • The browser. Release archives for Linux x64, Linux arm64, macOS arm64 and Windows x64, built from pinned sources with the patches in the repository.
  • A Python package (pip install apostate) and a Node package (npm install @heretic-tech/apostate). Both download and verify the browser, look up the proxy’s location, and return a Playwright browser driven through Patchright. The Node package also drives Puppeteer.
  • A command line. apostate install, apostate run, apostate fonts install windows and more. CLI lists every command.
  • An MCP server. @heretic-tech/apostate-mcp gives Claude Code, Codex and other MCP clients browser tools on an Apostate browser. See MCP server.

Start here

Quickstart

Install the package, launch a Windows persona and check what a page sees.

AI agents

Give Claude Code, Codex or your own agent a browser that works headless on a server.

Personas

What a persona covers and where each value comes from.

Test results

The test suite, and dated results from public detectors.

How a launch works

  1. The package resolves your options: seed, persona, proxy, and a locale and timezone from the proxy’s exit.
  2. The browser starts with switches such as --fingerprint=42 --fingerprint-platform=windows.
  3. Before any other process starts, the browser composes the machine from the seed and passes the same profile to every child process.
  4. The Chromium code that produces each value serves the persona’s value, so every API that reads it agrees.
--fingerprint-explain prints the machine a launch would present, without opening a window:
How it works has the details, and Known gaps lists what a page can still tell.