Skip to content
Anti-Bot

Browser Fingerprint Signal Index: Every Surface, Grouped by Origin

Pim

Pim · Scrappey Research

July 30, 2026 8 min read

On this page

This is an index of the browser fingerprinting surfaces documented across this glossary, grouped by where each signal originates rather than by which API exposes it. Grouping by origin matters because it predicts behaviour: signals from the same origin move together on a real machine, and the layer at which a value is set determines which other values move with it. A change made in page JavaScript reaches one surface; a change made in the engine or the operating system reaches every surface derived from it.

Quick facts

Surfaces indexed47 entries across six origin groups
Grouped byWhere the signal originates, not which API exposes it
Why origin mattersSignals sharing an origin move together on a real machine
Highest-weight groupAnalysis methods - how signals become a verdict
Start hereBrowser fingerprinting, then cross-API coherence checking

The four origins of a fingerprint signal

Every value in the index below comes from one of four places, and knowing which one explains most of its behaviour.

  1. The hardware - GPU, audio pipeline, CPU, sensors. These are physical, so they are consistent across realms and processes by construction, and expensive to change convincingly because a change has to be reflected everywhere the hardware is visible.
  2. The build - which engine, compiled with which options, linked against which libraries. This determines codec licensing, engine constants, and math rounding. Build-level values cannot be set per session, which is what makes them useful as oracles.
  3. The operating system - fonts, system colours, hyphenation, voices, timezone, locale. These reach the page through several unrelated APIs at once, so a change made at the OS level moves all of them and a change made in JavaScript moves one.
  4. The session - network path, declared locale, viewport. The only genuinely per-session layer, and the one where legitimate configuration lives.

Contradictions arise when a value is set at a different layer than the one it belongs to. Setting an OS-level fact in page JavaScript changes one surface and leaves the others reporting the truth, which is the mechanism behind almost every check in fingerprint lie detection.

The index

Rendering and hardware

Signals produced by the GPU, audio stack, and font rasteriser - the surfaces that describe the physical machine.

SignalWhat it reads
Canvas FingerprintingCanvas fingerprinting asks the browser to draw an invisible image and hashes the pixels.
WebGL FingerprintingWebGL fingerprinting reads the GPU renderer string, supported extensions, and rendering output to identify hardware.
WebGPU FingerprintingWebGPU fingerprinting reads the GPU adapter, limits, and compute output via navigator.
AudioContext FingerprintingAudioContext fingerprinting plays a silent waveform and hashes the floating-point output to identify the audio stack.
Font FingerprintingFont fingerprinting enumerates the typefaces installed on a system by measuring how text renders.
DOMRect FingerprintingDOMRect fingerprinting reads sub-pixel element geometry from getBoundingClientRect.
Hardware FingerprintingHardware fingerprinting reads CPU core count, device memory, and screen metrics from JavaScript.
Media Devices Fingerprintingnavigator.
Speech Synthesis FingerprintingspeechSynthesis.
Sensor FingerprintingMobile sensors like the accelerometer, gyroscope, and magnetometer leak manufacturing imperfections that uniquely identify a device.
Battery Status API FingerprintingThe Battery Status API exposed charge level and charging time precisely enough to act as a short-lived cross-site identifier, a convenience-API privacy signal.
Codec FingerprintingWhich audio and video codecs a browser can play reveals its build, licensing, and OS.

Network and transport

Signals emitted below the browser, by the TLS and HTTP stacks and by network path discovery.

SignalWhat it reads
TLS Fingerprinting (JA3/JA4)TLS fingerprinting (JA3, JA4, JA4H) hashes the TLS Client Hello and HTTP/2 framing to identify clients before HTML is served.
JA3 FingerprintingJA3 hashes the TLS Client Hello - cipher suites, extensions, and curves - into a fingerprint that identifies the client stack.
JA4 FingerprintingJA4 is the TLS fingerprint that replaced JA3 after Chrome randomised extension order.
HTTP/2 FingerprintingEven with perfect JA4 TLS, HTTP/2 SETTINGS frames identify a client.
HTTP/3 / QUIC FingerprintingHTTP/3 runs over QUIC, whose transport parameters and initial packet form a fingerprint distinct from TLS and HTTP/2.
WebRTC IP LeakWebRTC can reveal your real IP via STUN candidates even behind a proxy.
DNS LeakA DNS leak happens when hostname resolution skips your proxy and exposes your real network.

Engine and runtime

Values derived from how the JavaScript engine was compiled and which system libraries it links against.

SignalWhat it reads
Math & JS Engine FingerprintingMath fingerprinting runs floating-point operations whose last bits differ across CPUs, math libraries, and JS engines, revealing engines that mismatch identity.
WASM FingerprintingWebAssembly SIMD probes the actual CPU and SharedArrayBuffer enables a higher-resolution timer, both below the JavaScript layer.
Stack Depth FingerprintingThe maximum JavaScript recursion depth before a RangeError varies by engine and platform.
Engine/OS Oracle FingerprintingEngine oracles are small constants that reveal the real JavaScript engine and operating system regardless of the User-Agent string.
Timing & Cache Side-Channel FingerprintingHigh-resolution timers let JavaScript measure CPU cache, GPU draw time, and memory latency to fingerprint hardware and expose headless rendering shortcuts.
Clock Coherence DetectionBrowsers expose several clocks that must agree.

Environment and display

Signals describing the screen, the locale, and the browsing context around the page.

SignalWhat it reads
Screen Resolution FingerprintingScreen and window dimensions, device pixel ratio, and available area form a coherent display fingerprint that can expose headless scrapers.
CSS Media Query FingerprintingmatchMedia() exposes OS-level preferences - color scheme, reduced motion, contrast, pointer type - as fingerprint signals that reveal headless defaults.
Client Hints FingerprintingUser-Agent Client Hints (Sec-CH-UA) expose browser brand, platform, and architecture as structured headers, which anti-bots cross-check against the UA string.
Timezone / IP MismatchA timezone that disagrees with the proxy IP geolocation is a reliable bot signal.
Incognito DetectionSites detect private/incognito browsing through storage quota limits, filesystem API behaviour, and persistence differences.
Favicon Fingerprinting (Supercookies)Favicon fingerprinting abuses the browser's dedicated favicon cache as a persistent supercookie that survives incognito mode and cache clears to encode an ID.

Automation surface

Artefacts left by drivers, debugging protocols, and injected code rather than by the hardware.

SignalWhat it reads
navigator.webdrivernavigator.
CDP DetectionAnti-bot scripts detect when a browser is driven by the Chrome DevTools Protocol.
Input Provenance DetectionHow sites tell real input from scripted input: Event.
Native Function Integrity CheckingHow detection scripts verify that browser built-ins are genuine natives: toString output, property descriptors, receiver brand checks, and honeypot properties.
Browser Extension DetectionSites detect installed browser extensions by probing web-accessible resources, observing DOM changes, or timing behaviour.
How Is Mobile Emulation DetectedDevice emulation changes the User-Agent, viewport, and touch flags but leaves desktop hardware underneath.

Analysis methods

Not surfaces but techniques - how collected signals get turned into a verdict.

SignalWhat it reads
Browser FingerprintingBrowser fingerprinting identifies visitors by their device characteristics - fonts, canvas, WebGL, TLS - without cookies.
Fingerprint EntropyFingerprint entropy measures how much identifying information a browser leaks, in bits.
Fingerprint ClusteringFingerprint clustering judges a browser by the combination of its fingerprint fields, not each alone, rejecting visitors that fall outside real-device clusters.
Fingerprint Lie DetectionLie detection is how anti-bots evaluate fingerprints: instead of trusting reported values, they check them for internal contradictions and signs of tampering.
Cross-API Coherence CheckingCross-API coherence checking asks a browser the same question through two independent APIs and compares the answers.
Realm Coherence DetectionRealm coherence detection compares what the page, a Web Worker, and a fresh iframe report about one browser.
What Are Spec Invariants in FingerprintingA spec invariant is a rule the web standard places on a value, so a violation is provable from the specification alone - no reference data or corpus needed.
Fingerprint Reconnect StabilityReconnect stability is whether a browser returns the same fingerprint across reloads and sessions.
FingerprintJSFingerprintJS is a widely used open-source library that builds a stable browser visitor identifier from device signals.
How to Read a Fingerprint Test ScoreFingerprint testers measure different things: uniqueness, coherence, or known tells.

How to read the map

The index is deliberately long, and most of it does not matter on any given request. Three notes on using it.

Volume is not weight. The rendering group has the most entries, but a single contradiction in the automation group usually carries more weight than an unusual value anywhere in rendering. Rare hardware has innocent explanations; a debugging artefact does not.

Work downward, not outward. The instinct when a request fails is to add surfaces to the list of things being managed. The more productive move is usually to go down a layer: a single change at the engine or OS level fixes every derived value at once, where a dozen changes in page JavaScript each create a new object for integrity checks to find.

The analysis group is where the leverage is. Understanding entropy, clustering, and coherence explains why the other five groups behave as they do, and prevents the most common failure - optimising a uniqueness score by editing values, which reliably makes coherence worse.

For teams whose objective is collecting public web data, the practical reading of this index is that it describes a maintenance surface rather than a checklist. Every group is a set of facts that must stay mutually consistent for the life of a session, across every realm and protocol. That is precisely the work a managed web data API exists to absorb.

Code example

javascript
// A minimal probe touching one signal from each origin group, to show how
// few lines it takes to reach every layer in the index.
const gl = document.createElement('canvas').getContext('webgl');
const dbg = gl?.getExtension('WEBGL_debug_renderer_info');

const probe = {
  // Hardware: GPU identity
  gpu: dbg ? gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL) : null,

  // Build: an engine constant no header can move
  engine: eval.toString().length === 33 ? 'v8' : 'other',

  // Operating system: platform libm rounding
  osMath: [Math.tanh(1), Math.expm1(1)].map(n => n.toString(36)).join('|'),

  // Session: declared locale and network-facing settings
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  languages: navigator.languages,

  // Automation surface: the classic driver artefact
  webdriver: navigator.webdriver
};

// The verdict rarely comes from any single line above. It comes from asking
// whether they describe one machine - see cross-API coherence checking.
console.log(probe);

End of path

That is all 6 entries in Browser fingerprinting from scratch.

What a fingerprint is, where the entropy comes from, and how it turns into an identity.

Browse all topics

Related terms

Concept map

Concept map

How Browser Fingerprint Signal Index connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Anti-Bot
Building map…

Frequently asked questions

Which fingerprinting signals matter most?

The ones that contradict each other, rather than any individual surface. A rare GPU or an unusual font set has innocent explanations and is scored probabilistically. A browser whose CSS engine and JavaScript engine report different screen sizes, or whose Worker disagrees with its page, has produced something no real device produces. Contradictions in the automation group are typically weighted highest of all.

Do I need to manage every surface in this index?

No, and trying to is usually counterproductive. Most surfaces derive from a smaller number of underlying facts - the hardware, the build, the operating system, and the session configuration. Setting those correctly at the right layer makes the derived values agree automatically, whereas managing each surface individually multiplies the number of places an inconsistency can appear.

How is this index organised differently from a typical fingerprinting list?

Most lists group by API - canvas, WebGL, audio - which mirrors how a probe collects data. This one groups by where the signal originates, because that predicts behaviour: values sharing an origin move together on a real machine, and the layer at which something is set determines which other values move with it.

Last updated: 2026-07-30 · Facts last verified: 2026-07-30