Browser Fingerprint Test
See the device and browser details any website's JavaScript can read without cookies: user agent, screen, time zone, WebGL graphics renderer, canvas output, hardware hints and more. Everything is checked locally in your browser.
What a browser fingerprint is, and what this test shows
Websites do not need cookies to recognise a returning browser. Scripts can read dozens of small details (your screen size, time zone, language list, graphics card, how your system draws text on a canvas) and combine them into an identifier that often stays the same across visits. This page runs 41 such checks with the same JavaScript APIs any site can call, lists the results in five cards (Basic Info, Browser Features, Hardware, Network, Media & Input) and combines them into a single hash. It is a way to see your own exposure, compare browsers or settings, and check that a privacy extension is doing what it claims.
How to use it
- Open the page; the scan starts automatically and takes well under a second.
- Read the cards. Values shown as N/A or No mean the browser did not provide that information.
- Press Re-scan after changing a setting, switching on an extension or opening a private window, and compare the hash and the values.
- Press Copy All to copy a plain-text report of every value, the hash and the exposure figure, for example to compare two browsers side by side.
How the results are produced
Most values come straight from standard properties such as navigator.userAgent, navigator.languages, screen.width, devicePixelRatio, navigator.hardwareConcurrency and Intl.DateTimeFormat().resolvedOptions().timeZone. The WebGL rows read the vendor and renderer strings, using the WEBGL_debug_renderer_info extension when the browser exposes it. The canvas check draws text, a coloured rectangle and two overlapping circles off-screen, exports the pixels and hashes them; tiny differences in fonts, anti-aliasing and graphics drivers make that hash vary between machines. The audio rows only create an AudioContext and read its sample rate and channel count.
The large fingerprint hash joins all 41 values and runs the simple djb2 string hash over them three times with different suffixes, giving 24 hexadecimal characters. It is a compact summary of this page's readings, not a universal ID, and it is not compared with any database of other visitors.
"Signals exposed" is simply the share of the 41 checks that returned a value. It is not a statistical uniqueness score: telling how rare your combination is would require comparing it against many other browsers, which this page does not do.
All checks run locally. The results are not sent to ToolHub or anyone else, and nothing is saved in cookies or storage; the storage rows only test whether those APIs are available.
Frequently asked questions
Why does my hash change when I press Re-scan?
Some inputs move on their own. Connection type, downlink speed and round-trip time are rough estimates that Chromium-based browsers update frequently, and a few privacy tools add random noise to canvas or WebGL output on purpose. Any change to any value produces a different hash.
Why are Device Memory and Connection Type N/A in my browser?
Those APIs are only implemented in Chromium-based browsers such as Chrome and Edge. Firefox and Safari do not expose them, so fewer signals are reported, which is one reason exposure differs between browsers.
How can I make my browser harder to fingerprint?
Blending in works better than blocking one API at a time. Tor Browser makes every user look alike; Firefox's fingerprinting protections and Brave's randomisation reduce what scripts learn. Unusual extensions, fonts or settings can make you stand out more, not less.
Is fingerprinting allowed?
It depends on the purpose and the jurisdiction. Fraud prevention and bot detection commonly use it; in the EU, data-protection authorities treat fingerprinting for tracking much like tracking cookies, which generally need consent. This is general information, not legal advice.