These APIs were designed to help websites adapt their content — serve the right resolution, pick the right codec, show the right language. The side effect is that every value you expose for legitimate adaptation is also a dimension of a fingerprinting vector.
The combination of hardware concurrency, device memory, color depth, pixel ratio, touch points, timezone, language, and screen dimensions creates a joint probability space. Each value alone is widely shared. Together, the intersection is rare — typically 1 in tens of thousands to 1 in millions, depending on the device.
None of these require a permission dialog. They are readable synchronously on the main thread with zero user interaction. They are stable across browser restarts, private windows, and VPN changes.
navigator.hardwareConcurrency — logical CPU core countnavigator.deviceMemory — GB of RAM (rounded to nearest power of 2)screen.colorDepth — bits per pixel in the displaywindow.devicePixelRatio — physical vs CSS pixel rationavigator.maxTouchPoints — max simultaneous touch contactsIntl.DateTimeFormat().resolvedOptions().timeZone — IANA timezone stringnavigator.language / navigator.languages — locale preference chainscreen.width × screen.height — physical screen resolution