Fingerprint Observatory
A demonstration of how much any website can learn about your browser and device — without cookies, and without sending anything anywhere.
Before we start
terms & scopeThis page runs a series of fingerprinting probes against your own browser, so you can see exactly what you expose. Nothing runs until you accept below.
Data controller: bytesdust, hello@bytesdust.com. For the full privacy policy of this domain, see bytesdust.com/privacy.
1. Purpose and nature of the tool. This page is an educational, self-referential demonstration of browser fingerprinting techniques. The probes analyze the browser you are using right now, on your own device, and display the results only to you. It is not a security audit, an identity verification service, or a professional tool of any kind.
2. Legal basis and consent. The processing of your browser fingerprint and related signals is based on your explicit consent (art. 6(1)(a) GDPR and art. 5(3) ePrivacy Directive). By checking the box below and starting the test, you consent to: (a) the local execution of fingerprinting probes in your browser; (b) the collection of the technical signals listed in section 3; (c) the optional transmission of your IP address to the third-party endpoints listed in section 4 (only if you enable external probes). You may withdraw your consent at any time by leaving this page or closing your browser. No data is stored or persisted after the session ends.
3. What data is processed. All probe results are computed locally in your browser. The following categories of data may be collected:
- Browser and OS characteristics (User-Agent, language, timezone, screen resolution, color depth)
- Hardware and rendering capabilities (canvas, WebGL, audio context, fonts, GPU)
- Network information (IP via WebRTC STUN, local addresses, connection type)
- Installed plugins and extensions (if extended probes are enabled)
- A composite SHA-256 fingerprint hash derived from the above signals
What is NOT collected: this site does not store, transmit, or process any of the above data on its servers. Everything stays on your device unless you explicitly export it yourself.
4. Optional external probes and third-party recipients. If you enable them, external probes contact the following third-party endpoints. Those services are operated by their respective providers, will see your IP address (as any website you visit does), and are governed by their own terms and privacy policies:
| Endpoint | Provider | Purpose | Location |
|---|---|---|---|
stun.l.google.com | Google LLC | WebRTC public IP discovery | USA |
speed.cloudflare.com | Cloudflare, Inc. | Connection metadata | USA |
test.nextdns.io | NextDNS Inc. | DNS resolver detection | USA |
ipinfo.io | IPinfo Inc. | IP geolocation | USA |
International transfers: these providers are located in the United States. Data transfers are covered by their respective Standard Contractual Clauses (SCC) and/or EU-US Data Privacy Framework certifications, as applicable. See their privacy policies for details.
5. Optional extended probes. Extended probes are noisy by nature: they probe common service ports on your own machine (127.0.0.1) and probe browser-extension resources. They may log errors in the developer console, may trigger security software on your device, and can take up to a couple of minutes. They only ever target your own machine and browser — run them only on devices you own or are authorized to test.
6. Retention period. No personal data is retained by this site. Probe results exist only in your browser's memory for the duration of the session and are lost when you leave the page or close the tab. The site-wide analytics (Umami, Cloudflare Web Analytics) collects only anonymous, aggregate data as described in the Privacy Policy.
7. Your rights. Under the GDPR (arts. 15–22) you have the right to access, rectify, erase, restrict or object to the processing of your personal data, and to data portability. Given that this tool processes data only locally and does not store it, in practice the most effective way to exercise these rights is to not run the test or to leave the page, which immediately terminates all processing. You also have the right to lodge a complaint with the Italian supervisory authority, the Garante per la protezione dei dati personali.
8. Accuracy disclaimer. Results are heuristic estimates. They may be incomplete, outdated, or plainly wrong — hardened browsers deliberately falsify several of these signals. Do not rely on them for any decision about yourself or others.
9. No warranty. The tool is provided "as is" and "as available", without any warranty of any kind, express or implied, including but not limited to warranties of accuracy, merchantability, fitness for a particular purpose and non-infringement.
10. Limitation of liability. To the maximum extent permitted by applicable law, the author shall not be liable for any direct, indirect, incidental, consequential or exemplary damages — including loss of data, profits, or goodwill — arising from or connected to the use of, or inability to use, this tool, even if advised of the possibility of such damages.
11. Acceptable use. You agree to use this tool only lawfully, only on your own devices, and not to reconduct its techniques against third parties without their consent. Nothing here grants you any right over the site's code or content beyond viewing it in your browser.
12. Changes. These terms may change at any time; material changes will be announced on this page. The version shown when you run the test applies to that run.
Results
starting…Your browser fingerprint
computing…
SHA-256 of all collected signals. Client-side signals alone reach roughly 80% uniqueness — a demo, not proof of identity. Hardened browsers (Firefox RFP, Brave) add noise to several of these values.
Cross-signal consistency
Passive signals
Readable by any website with a single property access — no tricks needed.
The navigator object exposes your language preferences, CPU thread count, approximate RAM and touch support to every script on the page. Combined, these ordinary-looking values already narrow down your device a lot.
Details
Screen resolution, available workspace, color depth and pixel ratio are readable without any permission. Viewport and display combinations are unusual enough to be a strong fingerprint component.
Details
Your system timezone, locale and UTC offset reveal roughly where in the world you are — even behind a VPN that claims otherwise. A mismatch between IP location and timezone is a classic proxy tell.
Details
Chromium exposes the connection's effective type (4g, 3g...), estimated bandwidth, round-trip time and a data-saver flag. It hints at whether you are on mobile or desktop broadband — and changes as you move networks.
Details
The user agent string announces your browser, its version and your operating system to every script and every server. Browsers are freezing it because it was abused for fingerprinting for decades.
Details
Rendering & graphics
How your GPU, drivers and font stack draw pixels — stable per device.
Draws text and shapes on a hidden canvas and hashes the pixels. Subtle differences in GPU, drivers and font rasterization make the result surprisingly stable per device.
Details
Reads the WebGL renderer and vendor strings, often exposing the exact GPU model. Together with the extension count it narrows down hardware and driver.
Details
Dumps the numeric limits the WebGL implementation advertises: texture sizes, viewport dimensions, shader capacities. They vary with GPU, driver and browser, adding many bits of entropy.
Details
Measures the bounding box of an SVG text run. Font metrics and text-shaping differences leak through in fractional pixel sizes.
Details
Measures the exact pixel boxes of text spans at mixed font sizes. Sub-pixel layout rounding differs across browsers, OSes and zoom levels.
Details
Audio
Tiny DSP differences between audio stacks, measurable without sound.
The same audio graph rendered offline produces minutely different numbers on different audio stacks. That single number is stable enough to recognize your device across sites — and it is inaudible.
Details
Fonts
Installed fonts betray your OS, locale and installed software.
By measuring how a probe string renders against generic font families, a page can tell which fonts are installed without ever asking. Your font set reflects your OS and the software you installed — a solid identifier.
Details
Hardware & compute
CPU, memory and GPU capabilities exposed through Web APIs.
Thread count, a rounded RAM figure, battery level and storage quota are all readable without prompting. Each is coarse on its own; together they describe your specific machine.
Details
WebGPU's adapter info can name your GPU vendor and architecture — the graphics card is one of the most identifying pieces of hardware you own. Browsers are starting to gate it behind permissions for this reason.
Details
Chromium reports the JavaScript heap limit and current usage via performance.memory. The heap limit correlates with the device's total RAM — another quiet hint about your hardware class.
Details
JavaScript engine
V8, SpiderMonkey and JavaScriptCore behave differently — regardless of what the user agent claims.
Identifies the JavaScript engine (V8, SpiderMonkey, JavaScriptCore) from error stack formatting and object key ordering — details a spoofed user agent cannot fake.
Details
Media & codecs
Supported codecs, hardware decoding and connected devices.
A page can count your cameras, microphones and speakers without ever starting a capture — labels stay hidden until you grant permission, but the device counts alone already characterize your setup.
Details
The speech synthesis voice list mirrors your OS and its language packs. The exact names and count of installed voices are a stable, rarely considered fingerprint component.
Details
The Media Capabilities API reports whether 1080p VP9, H.264 and AV1 decode smoothly and power-efficiently. The answer pattern depends on your GPU and OS media stack — hardware by proxy.
Details
WebCodecs answers exactly which codec configurations the hardware can decode — VP8, VP9, AV1, H.264 and HEVC. The supported set fingerprints the combination of browser, OS and GPU drivers.
Details
Input & peripherals
Keyboard layout, gamepads and pointer types.
The Keyboard API exposes how physical keys map to characters, which reveals whether you type on QWERTY, AZERTY or QWERTZ — a solid hint at your language and region.
Details
The Gamepad API lists every connected controller with its id, button and axis counts — a niche but stable signal that points at gaming-capable hardware.
Details
Pointer and hover media queries tell a site whether your main input is a precise mouse or a coarse touchscreen, and whether hovering works — an easy desktop-vs-mobile tell.
Details
System & permissions
Capability matrix, client hints and permission states.
Checks which modern web APIs this browser exposes. The exact support matrix is a coarse but stable identifier of browser family and version.
Details
Reads Chromium's User-Agent Client Hints, the structured replacement for the UA string, including high-entropy values like architecture and platform version.
Details
Enumerates the state of every well-known permission. The granted/denied/prompt pattern reflects your past choices and persists across visits.
Details
Reads the notification permission state. It persists across sessions and contributes one stable bit to the permission fingerprint.
Details
navigator.webdriver and the globals left behind by PhantomJS, Nightmare and Selenium reveal a browser driven by automation frameworks.
Details
Each browser leaks private browsing through a different API: Chrome caps the storage quota, Safari throws on openDatabase/localStorage, Firefox refuses IndexedDB.
Details
Probes localStorage, sessionStorage and IndexedDB with a write test. Blocked or throwing storage is typical of private browsing modes and hardened configurations.
Details
Checks that the core APIs this page relies on are still the browser's native implementations. Overridden fetch, WebRTC or Function.prototype.toString means an extension, userscript or anti-fraud tool is intercepting the runtime — and every result on this page becomes suspect.
Details
Payment
Payment handlers configured in the browser.
The Payment Request API reveals whether the browser can complete a card payment at all. On Chrome, calling canMakePayment() twice in a row fails with NotAllowedError in incognito windows — a quiet private-mode tell.
Details
ApplePaySession only exists in Safari on Apple devices, so its mere presence is a strong platform signal; canMakePayments() goes further and reveals whether a card is enrolled.
Details
Crypto wallets
Wallet extensions announce themselves to every page you visit.
Most wallet extensions inject a global object into every page (window.ethereum, window.solana, ...). Reading which globals exist enumerates your installed wallets — and out you as a crypto user.
Details
EIP-6963 lets wallets announce themselves via window events instead of fighting over window.ethereum. Asking for announcements lists every compliant wallet by name and reverse-DNS id.
Details
Browser extensions
Passive traces extensions leave in the DOM and on window.
Popular extensions leave traces in the page: Grammarly and password managers annotate the DOM, React/Vue devtools install global hooks. Observing those traces reveals which extensions you run.
Details
Ad blockers hide elements whose class names look like ads. Planting a fake 300x250 ad unit and checking whether it gets styled away reveals whether a content blocker is active.
Details
Desktop antivirus and security suites inject marker elements and globals into every page to hook banking protection and link scanning. Those markers quietly reveal which security product guards your machine.
Details
Extensions that modify the page often leave chrome-extension:// URLs in text nodes or attributes. Walking the DOM for those URLs reveals active extensions with no hardcoded target list.
Details
Network
What your connection reveals — some probes call third parties and only run with your consent.
An RTCPeerConnection with no ICE servers still reveals your local network addresses as host candidates. Nothing is sent anywhere — yet your LAN layout, and sometimes a public IP, leaks to any page.
Details
With a STUN server (stun.l.google.com — contacted only if you run this probe), WebRTC learns the public IP your NAT presents to the world. If that differs from your VPN's IP, the tunnel is leaking.
Details
Cloudflare's speed test endpoint reports how the network sees you: public IP, ASN and organization, the edge datacenter you hit and your approximate location. This probe contacts speed.cloudflare.com.
Details
Resolving a random test.nextdns.io hostname reveals whether your DNS resolver is NextDNS, along with the profile id — a glimpse into how your DNS is filtered. This probe contacts test.nextdns.io.
Details
ipinfo.io answers with the public IP it sees plus a geolocation guess and the owning organization — a second, independent opinion to compare against Cloudflare's. This probe contacts ipinfo.io.
Details
Advanced probes
Noisy or touchy techniques. Each runs only when you explicitly start it.
Probes your own machine for common dev-service ports (dev servers, Ollama, Docker, MongoDB) by fetching 127.0.0.1 — a reachable port resolves the fetch, a closed one fails fast. Expect failed-request noise in the console while it runs.
Details
Fetches known web-accessible assets of popular extensions — a successful load proves the extension is installed. Chrome/Edge only, and every miss logs a console error, so expect noise in devtools.
Details
Probes a 6,000-entry dictionary of known extension resources — the industrial-scale version of extension detection. Takes up to a minute, fires thousands of requests, and logs console errors for every miss. Chromium only.
Details
Developer tools detected
This demonstration runs only in an unmodified browsing session. Close the developer tools to continue.