Skip to main content
A persona is the operating system a launch presents to web pages: Windows, macOS or Linux. From the persona and a seed, the browser composes one machine of that kind, with an OS release, a GPU, cores and memory, a screen, fonts, voices, audio and media devices. The Chromium code that produces each value serves the machine’s value, so the page, its workers, its iframes and the HTTP headers all read the same machine.

Choose a persona

The browser switch is --fingerprint-platform=windows, macos or linux. The packages refuse any other value. The browser logs an error for any other value and uses the default persona.

The default persona

When you name no persona, the browser picks one from the host: A Windows persona on a Linux or macOS host needs the Windows fonts installed there. Fonts has the command. Name the persona in every launch of a persistent profile you move between hosts. A directory created on a Mac and opened on a Linux server without fingerprint_platform presents a macOS machine on the Mac and a Windows machine on the server.

The three platforms

Each platform draws from its own tables. The counts are those of catalogue version 2, the one in Apostate 0.4.3. GPU models and Font lists list every model and family.

What a persona sets

The browser’s C++ serves every row, so every API and header that reads the value agrees. The section column names the part of the profile that carries it. The browser composes the machine in a fixed order, and later choices depend on earlier ones. The core count and memory depend on the GPU model, and the screen, devices and battery depend on the machine, so a persona never pairs, for example, an Apple M4 Max with a MacBook Air screen. How it works has the order.

Read a persona

--fingerprint-explain prints the machine a launch would present and exits without opening a window. These are seed 42 for each platform, run on an Apple silicon Mac with 14 cores. On another host, the core count and memory can differ; Seeds and identity explains why.
The report also prints a header with the seed and the host, notes under the locale rows, and a limitations list. Seeds and identity explains the header. The layer column says which step chose the value: The evidence column says where the option came from:

What stays the host’s

A persona changes values. It does not change how the host draws or computes. Canvas, WebGL and WebGPU pixels come from the host’s GPU or software renderer, text is drawn by the host’s font engine, a font appears only if it is installed, and CPU arithmetic and audio output follow the host’s CPU. Hosts says which host suits which persona, and Known gaps lists every value a page can still read from the host.

Host mode

--fingerprint=host, or fingerprint="host" in the packages, composes nothing. Every value is the host’s own. off, false, 0, disable and disabled mean the same, in any case. Use host mode to tell whether a problem comes from the persona or from the host and network under it. Host mode refuses a persona, a GPU family and every per-field switch, because nothing is composed for them to change:
The packages refuse the same combination before the browser starts, with host inheritance disables every layer below it, so a platform persona cannot be applied at the same time. Headless host mode has no display to inherit, so a page reads Chrome’s headless 800x600 screen with availHeight equal to height. A composed persona serves its own screen in headless mode.