All fingerprints
Rendering

Client rects

Sub-pixel layout of a transformed element — a font-and-engine signature that must be stable.

Read viaElement.getClientRects()getBoundingClientRect()

What it is

getClientRects() and getBoundingClientRect() return an element’s position and size with sub-pixel precision. Apply a 3D transform to some styled text and the fractional values depend on the layout engine, the fonts it picked and how it rounds — one more computed signature.

How websites read it

el.style.transform = 'matrix3d(0.7071, 0.31, 0, 0.0001, ...)';
const r = el.getClientRects()[0];
hash([r.x, r.y, r.width, r.height]);        // sub-pixel values differ per engine + font

A hidden element is measured once or twice and the numbers are hashed. The same page on the same machine returns the same fractions to six decimal places.

Why it identifies you

The values encode font metrics and engine rounding, so they change with the OS, the browser version and the installed fonts — and stay put otherwise. They also cross-check the canvas and font signals from a different angle.

How risk-control systems use it

The main test is stability: two measurements of one element must be identical. A value that drifts between reads, or between tabs, only happens when something rewrites the numbers on their way to the page.

Common mistakes

Random per-call noise on rect values; noise that breaks page layout logic; rect values inconsistent with the font set the profile claims.

Mango is accepting waitlist registrations. These capabilities describe its first release; client access opens with invitations.

How Mango Browser handles it

Noise

Deterministic per-profile offsets applied to rect values; two reads always match.

Check yours

Jump to this signal in your scan results.

Open my results

Related fingerprints