What JavaScript Can See
What a page can measure about your device once it runs a script.
Your screen and window
| Screen | Needs JavaScript The whole display, in the units the browser calls pixels. |
|---|---|
| Usable area | Needs JavaScript The display minus whatever the operating system keeps for itself, which is a small statement about which operating system it is and how it is arranged. |
| This window | Needs JavaScript |
| Pixel ratio | Needs JavaScript How many physical pixels make one of the pixels above. 1 on an ordinary monitor, 2 or 3 on a dense one, and often a fraction when the display is scaled. |
| Colour depth | Needs JavaScript |
| Orientation | Needs JavaScript |
The machine underneath
| Platform | Needs JavaScript |
|---|---|
| Processor cores | Needs JavaScript What the browser is willing to admit. Some report a capped number rather than the real one. |
| Memory | Needs JavaScript Rounded hard, and only Chromium-based browsers answer at all. An empty row here is itself a clue about which browser you are using. |
| Touch points | Needs JavaScript How many fingers the screen can follow at once. 0 says there is no touchscreen. |
| Graphics | Needs JavaScript |
| Pointer | Needs JavaScript Whether the main pointing device is precise, like a mouse, or coarse, like a finger. |
Language, time and place
| Time zone | Needs JavaScript Not the offset but the named zone, which is more specific: it carries the region's whole history of daylight saving changes. |
|---|---|
| Offset from UTC | Needs JavaScript |
| Languages | Needs JavaScript The full ordered list. The Accept-Language header your browser sends is often shorter than this one. |
| Formatting locale | Needs JavaScript Which conventions dates and numbers follow. It can differ from the languages above, and the pair is more distinctive than either alone. |
| Time zone against address | Needs JavaScript |
How you have set things up
Accessibility and appearance settings are readable by any page, because a page has to know them to honour them. The cost is that a rare combination narrows down who you are.
| Colour scheme | Needs JavaScript |
|---|---|
| Reduced motion | Needs JavaScript |
| Contrast | Needs JavaScript |
| Forced colours | Needs JavaScript |
| Reduced transparency | Needs JavaScript |
Fonts installed on this machine
No browser will list your fonts. This measures instead: it draws the same string in a candidate font and in a fallback, and a difference in width means the candidate was there to draw with. The list below is a fixed set of common fonts, not everything you have, so treat the count as a sample rather than a total.
| Found | Needs JavaScript |
|---|---|
| Which ones | Needs JavaScript |
Marks that stay the same
Two values computed from how your machine actually draws, rather than from anything it declares. Reload the page and they will not change. Open the same page in a different browser on the same machine and at least one of them will. That stability is what makes them useful for recognising a returning visitor without a cookie, and it is why they are worth showing you.
| Canvas mark | Needs JavaScript A hash of an image drawn off screen. Fonts, anti-aliasing and the graphics driver all leave traces in it. |
|---|---|
| Graphics mark | Needs JavaScript The same idea through the 3D pipeline, which is more sensitive to the hardware. |
| The two together | Needs JavaScript Not sent anywhere. Computed in your browser, written into this page, and gone when you close the tab. |
Storage and privacy switches
| Cookies | Needs JavaScript |
|---|---|
| Local storage | Needs JavaScript |
| Storage quota | Needs JavaScript How much this site would be allowed to keep. Browsers commonly derive it from free disk space, which turns a storage limit into a rough reading of your drive. |
| Do Not Track | Needs JavaScript A request, not a control, and one this page has nothing to honour: it stores nothing either way. |
| Global Privacy Control | Needs JavaScript |
| Built-in PDF viewer | Needs JavaScript |
Every measurement above happened in your browser. None of it was sent to this server, and you can confirm that rather than take it on trust: open your browser's network panel and reload. There is no request carrying these values, because the script that takes them contains no code that could send one. The one thing that did come from the server is the country, and only because it was already attached to your request before this page existed. See Privacy.