JavaScript Information
A complete, read-only report of what the JavaScript runtime in your browser exposes to any web page right now — engine, document, screen, locale, the full navigator object, Client Hints, Battery, Network, Bluetooth, Web Audio, Speech synthesis, plugins, and MIME types.
Probing JavaScript runtime…
What this tool measures
Your browser ships with a JavaScript engine — V8 in Chromium, SpiderMonkey in Firefox, JavaScriptCore in Safari — that decides how fast your code runs and which APIs are available. This page probes the runtime from inside it: the shape of Error.stack identifies the engine; the navigator, screen, document, and Intl objects describe the device; and modern APIs (User-Agent Client Hints, getBattery(), connection, bluetooth.getAvailability(), AudioContext, speechSynthesis) expose hardware and network characteristics. The final section enumerates every remaining property on window.navigator so you can see the full surface a tracker could read.
Why JavaScript features matter for privacy
Every feature your browser exposes is a potential data point for a fingerprinting script. Combined with fonts, canvas, and WebGL renderer information, the numbers reported here contribute to a signature that can re-identify you across sessions even with cookies cleared.
- •hardwareConcurrency — roughly 3–5 bits of entropy on desktop.
- •deviceMemory — 3 common buckets on mobile, 4 on desktop.
- •Engine — narrows you to one browser family.
- •Time zone — often pinpoints you to a single metro area.
Frequently Asked Questions
What is a JavaScript engine?
A JavaScript engine is the software inside your browser that parses and executes JavaScript code. The three major engines are V8 (used by Chrome, Edge, Opera, Brave, and Node.js), SpiderMonkey (used by Firefox), and JavaScriptCore (used by Safari). Different engines optimize code differently, so the same script can run at very different speeds depending on which engine is running it.
How does this tool detect the engine?
Each engine produces a distinctive Error.stack format. V8 prefixes every frame with 'at ', SpiderMonkey and JavaScriptCore use 'funcName@url:line:col', and we use a handful of engine-specific globals (InternalError, etc.) to disambiguate the last two. This is a heuristic check — the user agent header is authoritative — but the stack-shape check confirms the actual runtime executing the page, which is useful when a browser ships a custom engine or when the UA is spoofed.
Why does navigator.hardwareConcurrency matter?
hardwareConcurrency reports the number of logical CPU cores your browser can schedule threads onto. Web apps use it to size Web Worker pools, to tune WASM SIMD batch sizes, and to decide whether to run heavy algorithms in parallel. It is also a strong fingerprinting signal — combined with device memory, screen resolution, and GPU it can narrow your browser to a small crowd of users.
Why is SharedArrayBuffer sometimes unavailable?
SharedArrayBuffer lets multiple threads read and write the same memory, which is essential for high-performance WASM. After the Spectre and Meltdown CPU vulnerabilities, browsers restricted it to pages served with Cross-Origin Opener Policy (COOP) and Cross-Origin Embedder Policy (COEP) headers that isolate the page from other origins. If your page does not send those headers, SharedArrayBuffer appears as undefined.
What are User-Agent Client Hints?
Client Hints are the modern replacement for the User-Agent string. Instead of sending one long string on every request, the browser exposes navigator.userAgentData with low-entropy fields (brand, mobile, platform) by default and a getHighEntropyValues() method that resolves high-entropy fields (architecture, bitness, full version list, model, platform version) on demand. Chromium ships them today; Firefox and Safari have declined to implement them, so the API shows as unsupported on those browsers.
Why does Web Audio appear here?
Web Audio is a fingerprinting signal, not just an audio feature. Even without playing a sound, a tracker can create an AudioContext, read destination.maxChannelCount and the default sample rate, and compute a device-specific hash from analyser-node output. The values reported here are the same ones fingerprinting libraries sample; changing your audio device or OS audio settings can shift them.
More Tools
Full Browser Inspector
See all 80+ data points your browser exposes
What Is My IP?
Check your public IP, location, and ISP
What Is My Browser?
Detect your browser, version, OS, and device type
IPv6 Leak Test
Check whether your IPv6 address leaks alongside your VPN's IPv4
WebRTC Leak Test
Detect local and public IPs exposed by WebRTC, even behind a VPN
DNS Leak Test
See which resolver answers your queries and whether it bypasses your VPN
Canvas Fingerprint
See the unique image your browser renders and how trackers use it
Geolocation API Test
Check what coordinates your browser exposes via the Geolocation API
TLS Client Test
Inspect your ClientHello, cipher suites, and JA3 fingerprint
Incognito / Private Mode Test
Detect whether your browser is in Incognito or Private Browsing mode