{"name":"ReadMyBrowser signals","description":"Every browser signal a website can read client-side, with its detection API, permission requirement, spoofability, an entropy estimate and a primary source.","version":"2.0.0","updated":"2026-08-05","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Data from ReadMyBrowser (https://readmybrowser.com), maintained by FusionStudios. Entropy figures are ReadMyBrowser's own estimates, not measured population statistics; see https://readmybrowser.com/methodology.","documentation":"https://readmybrowser.com/api","methodology":"https://readmybrowser.com/methodology","count":32,"signals":[{"slug":"user-agent","label":"User agent","category":"Browser","categoryUrl":"https://readmybrowser.com/category/browser","url":"https://readmybrowser.com/what-is-my/user-agent","detectionApi":"navigator.userAgent","detectionNote":"Returns one string, always. There is no browser setting that makes it empty, because the same string also travels as the User-Agent request header on every request the browser makes.","requiresPermission":false,"entropyBitsEstimate":10,"entropyBasis":"Our estimate, on the reasoning that the string carries browser, major version, platform and architecture in one field. Chrome's User-Agent Reduction has been shrinking this since 2022.","spoofable":"Yes","spoofNote":"It is a plain header. An extension, the devtools device toolbar or any HTTP client can send whatever it likes, and no site can verify it.","browserSupport":[{"browser":"Chrome and other Chromium browsers","behaviour":"Reduced string: minor version digits report as zeros and the platform detail is flattened. Full detail moved to Client Hints, which a site has to ask for."},{"browser":"Firefox","behaviour":"Rounded version. With resistFingerprinting on, reports a generic string shared by all users of that mode."},{"browser":"Safari","behaviour":"Frozen platform tokens and a coarse version. Safari has reported a near-static string for years."},{"browser":"Tor Browser","behaviour":"One identical string for every user on that platform, by design. Standing out is the thing it is avoiding."}],"sources":[{"label":"MDN: Navigator.userAgent","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent"},{"label":"Chrome for Developers: User-Agent reduction and Client Hints","url":"https://developer.chrome.com/docs/privacy-security/user-agent-client-hints"}],"lastReviewed":"2026-08-05"},{"slug":"browser","label":"Browser","category":"Browser","categoryUrl":"https://readmybrowser.com/category/browser","url":"https://readmybrowser.com/what-is-my/browser","detectionApi":"navigator.userAgentData?.brands ?? navigator.userAgent","detectionNote":"Client Hints give a list of brand and major-version pairs, which is why a Chromium browser can name both itself and Chromium. Where they are unavailable, the name is parsed out of the user agent string, which is guesswork.","requiresPermission":false,"entropyBitsEstimate":2,"entropyBasis":"Our estimate. The brand alone is shared by hundreds of millions of people; the major version narrows it a little, because most users of a browser update within a couple of weeks of each other.","spoofable":"Yes","spoofNote":"Both the brand list and the user agent can be rewritten by an extension. The About page inside the browser cannot, which is why it is the answer to give a support desk.","browserSupport":null,"sources":[{"label":"MDN: Navigator.userAgentData","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData"},{"label":"WICG: User-Agent Client Hints specification","url":"https://wicg.github.io/ua-client-hints/"}],"lastReviewed":"2026-08-05"},{"slug":"os","label":"Operating system","category":"Browser","categoryUrl":"https://readmybrowser.com/category/browser","url":"https://readmybrowser.com/what-is-my/os","detectionApi":"navigator.userAgentData?.platform ?? navigator.userAgent","detectionNote":"Client Hints report a platform name such as \"Windows\" or \"macOS\". The precise version needs a high-entropy hint the browser can refuse. Without Client Hints the platform is read out of the user agent string, which freezes at \"Windows NT 10.0\" for both Windows 10 and 11.","requiresPermission":false,"entropyBitsEstimate":2,"entropyBasis":"Our estimate. A handful of platforms cover almost everyone, so the family is cheap; an unusual one, such as a desktop Linux distribution, is far more distinctive than the average.","spoofable":"Yes","spoofNote":"Same mechanism as the user agent, and just as unverifiable. Mismatches give it away: a site can notice that a claimed macOS platform is drawing text the way Windows does.","browserSupport":null,"sources":[{"label":"MDN: Navigator.userAgentData","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData"},{"label":"MDN: Navigator.userAgent","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent"}],"lastReviewed":"2026-08-05"},{"slug":"language","label":"Language","category":"Browser","categoryUrl":"https://readmybrowser.com/category/browser","url":"https://readmybrowser.com/what-is-my/language","detectionApi":"navigator.languages","detectionNote":"An ordered array of language tags, most preferred first, for example [\"en-GB\", \"en\", \"nl\"]. Falls back to navigator.language, a single tag, in browsers that withhold the list. The same preference travels as the Accept-Language header.","requiresPermission":false,"entropyBitsEstimate":2.5,"entropyBasis":"Our estimate, and the reason it is not lower is the ordering: a single common language is cheap, but a specific ordered list of three or four is a much smaller crowd.","spoofable":"Yes","spoofNote":"Set by your browser or system preferences, so changing it is a settings change rather than a hack. Firefox's resistFingerprinting reports en-US regardless of what you chose.","browserSupport":null,"sources":[{"label":"MDN: Navigator.languages","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/languages"},{"label":"MDN: Navigator.language","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language"}],"lastReviewed":"2026-08-05"},{"slug":"cookies-enabled","label":"Cookies enabled","category":"Browser","categoryUrl":"https://readmybrowser.com/category/browser","url":"https://readmybrowser.com/what-is-my/cookies-enabled","detectionApi":"navigator.cookieEnabled","detectionNote":"A boolean, but an unreliable one: it can report true while every cookie you set is silently discarded. The trustworthy test is the one this page runs, which writes a throwaway cookie, reads it back and deletes it again.","requiresPermission":false,"entropyBitsEstimate":0.3,"entropyBasis":"Our estimate, and deliberately near zero. Almost everyone allows first-party cookies, so the answer \"yes\" tells a site nothing. A \"no\" is rare, and therefore worth more to a tracker than a \"yes\".","spoofable":"No","spoofNote":"There is nothing to fake. A site finds out whether cookies work by trying to set one, and the result is whatever your browser actually does.","browserSupport":null,"sources":[{"label":"MDN: Navigator.cookieEnabled","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/cookieEnabled"}],"lastReviewed":"2026-08-05"},{"slug":"ip-address","label":"IP address","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/ip-address","detectionApi":"fetch('/api/ip')","detectionNote":"There is no JavaScript API that reads your IP address. A page has to make a request and have the other end report back which address the request arrived from. Here that other end is this site's own endpoint, which echoes the address and writes nothing down.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Left out of the fingerprint estimate on purpose. An IP address is an identifier in its own right rather than a signal that narrows a crowd, and mixing the two would inflate the score.","spoofable":"Partly","spoofNote":"You cannot edit it, but you can change which address a site sees by routing through a VPN, a proxy or Tor. The site then sees that exit point instead, which is a real change and not a disguise.","browserSupport":null,"sources":[{"label":"RFC 1918: address allocation for private internets","url":"https://www.rfc-editor.org/rfc/rfc1918"},{"label":"RFC 8305: Happy Eyeballs v2, how clients choose IPv4 or IPv6","url":"https://www.rfc-editor.org/rfc/rfc8305"}],"lastReviewed":"2026-08-05"},{"slug":"ipv4","label":"IPv4 address","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/ipv4","detectionApi":"fetch('/api/ip') then check for ':' in the address","detectionNote":"The same echo endpoint. Whether it returns a 32-bit IPv4 address or a 128-bit IPv6 one is decided by your device, your network and the server, not by the page. A colon in the result means you arrived over IPv6.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: this is the same signal as the IP address, viewed through one filter.","spoofable":"Partly","spoofNote":"Same as the IP address. Disabling IPv6 on your device or network will force IPv4, which is a configuration change rather than a spoof.","browserSupport":null,"sources":[{"label":"RFC 8305: Happy Eyeballs v2, how clients choose IPv4 or IPv6","url":"https://www.rfc-editor.org/rfc/rfc8305"}],"lastReviewed":"2026-08-05"},{"slug":"public-ip","label":"Public IP","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/public-ip","detectionApi":"fetch('/api/ip')","detectionNote":"Identical mechanism to the IP address page. The word public matters: this is the address your router presents to the internet, shared by every device behind it, and it is the only one a website can see without your help.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate, same reasoning as the IP address page.","spoofable":"Partly","spoofNote":"Changed by routing, not by editing. A VPN substitutes its own exit address; a router reboot may earn you a new one from your provider.","browserSupport":null,"sources":[{"label":"RFC 1918: address allocation for private internets","url":"https://www.rfc-editor.org/rfc/rfc1918"}],"lastReviewed":"2026-08-05"},{"slug":"private-ip","label":"Private IP","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/private-ip","detectionApi":"not readable by a website","detectionNote":"Deliberately blank. Reading a local address from a page used to be possible through an RTCPeerConnection side effect; browsers closed that hole by returning randomised mDNS hostnames instead of real local addresses. This page explains where to find yours rather than taking it.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Nothing to contribute: a website cannot read this value at all in a current browser.","spoofable":"No","spoofNote":"Nothing to spoof from a webpage's point of view. Your local address is assigned by your own router, on your own network.","browserSupport":null,"sources":[{"label":"RFC 1918: address allocation for private internets","url":"https://www.rfc-editor.org/rfc/rfc1918"},{"label":"MDN: RTCPeerConnection","url":"https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection"}],"lastReviewed":"2026-08-05"},{"slug":"ip-location","label":"IP location","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/ip-location","detectionApi":"fetch('/api/ip') returning the platform's geo headers","detectionNote":"The hosting platform annotates each incoming request with a city, region and country it looked up from the IP. No GPS is involved and no permission is asked, because nothing is read from your device.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: it is derived from the IP address, so counting it as well would count the same fact twice.","spoofable":"Partly","spoofNote":"Follows the IP address. Route through another country and the estimate follows you there, which is exactly how streaming region checks are defeated.","browserSupport":null,"sources":[{"label":"MDN: Geolocation API, for the contrast with a real location read","url":"https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition"}],"lastReviewed":"2026-08-05"},{"slug":"connection","label":"Connection type","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/connection","detectionApi":"navigator.connection","detectionNote":"Where supported, exposes effectiveType (\"4g\", \"3g\", \"2g\", \"slow-2g\"), downlink in Mbit/s and rtt in milliseconds. Firefox and Safari do not implement it on desktop, so the card is empty there, which is a privacy decision rather than a bug.","requiresPermission":false,"entropyBitsEstimate":1.5,"entropyBasis":"Our estimate. The coarse buckets carry little on their own, but downlink and rtt are noisy continuous values that change between visits, which makes them better for detecting a network than for recognising a person.","spoofable":"Partly","spoofNote":"Not directly settable, but the values describe your current network, so connecting through something else changes them. Devtools network throttling changes them too.","browserSupport":null,"sources":[{"label":"MDN: NetworkInformation","url":"https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation"}],"lastReviewed":"2026-08-05"},{"slug":"headers","label":"Request headers","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/headers","detectionApi":"reconstructed from navigator, not read directly","detectionNote":"A page cannot read the headers its own document was fetched with. What this card shows is the same information rebuilt from the JavaScript equivalents: navigator.userAgent for User-Agent, navigator.languages for Accept-Language, document.referrer for Referer. The server, of course, sees the real thing.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Not counted separately: every field here is already counted on its own page, and double counting is how entropy estimates end up claiming more than there are people.","spoofable":"Yes","spoofNote":"Headers are just text an HTTP client chooses to send. Extensions rewrite them routinely, and any script or command line tool can send anything.","browserSupport":null,"sources":[{"label":"MDN: HTTP Referer header","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referer"},{"label":"MDN: Navigator.userAgent","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent"}],"lastReviewed":"2026-08-05"},{"slug":"referrer","label":"Referrer","category":"Network","categoryUrl":"https://readmybrowser.com/category/network","url":"https://readmybrowser.com/what-is-my/referrer","detectionApi":"document.referrer","detectionNote":"The URL of the page that linked here, or an empty string when you typed the address, used a bookmark, came from an app, or the referring page set a Referrer-Policy that withholds it. Empty is now the common case, not the exception.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate. It says where you came from this once, not what your browser is, so it does not help re-identify you on a later visit.","spoofable":"Yes","spoofNote":"Controlled by the linking page through Referrer-Policy, and by any client that sets the header by hand. It is the linking site's statement about you, not yours.","browserSupport":null,"sources":[{"label":"MDN: Document.referrer","url":"https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer"},{"label":"MDN: HTTP Referer header","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referer"}],"lastReviewed":"2026-08-05"},{"slug":"location","label":"Location","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/location","detectionApi":"navigator.geolocation.getCurrentPosition(success, error)","detectionNote":"Returns latitude, longitude and an accuracy radius in metres, and only after you accept the browser's own prompt. Refusing calls the error handler; the page never sees a coordinate. Accuracy ranges from a few metres on a phone with GPS to several kilometres on a desktop using nearby wifi networks.","requiresPermission":true,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate, because it is never read without an explicit prompt, and a fingerprint is by definition what a site takes silently.","spoofable":"Yes","spoofNote":"Browsers and mobile operating systems both offer location override, and devtools has a sensors panel that will report any coordinates you type in.","browserSupport":null,"sources":[{"label":"MDN: Geolocation.getCurrentPosition","url":"https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition"},{"label":"W3C: Geolocation API specification","url":"https://www.w3.org/TR/geolocation/"}],"lastReviewed":"2026-08-05"},{"slug":"zip-code","label":"Zip code","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/zip-code","detectionApi":"navigator.geolocation.getCurrentPosition then a reverse geocode","detectionNote":"Two steps, and the first one asks. Coordinates come from the Geolocation API; turning them into a ZIP needs a lookup against a geocoding database, which here is OpenStreetMap Nominatim, reached through this site's own relay so the service gets the identification its usage policy requires.","requiresPermission":true,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: consent-gated.","spoofable":"Yes","spoofNote":"Follows the coordinates, so anything that overrides your location overrides this too.","browserSupport":null,"sources":[{"label":"MDN: Geolocation.getCurrentPosition","url":"https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition"},{"label":"OpenStreetMap Nominatim: reverse geocoding documentation","url":"https://nominatim.org/release-docs/latest/api/Reverse/"}],"lastReviewed":"2026-08-05"},{"slug":"postal-code","label":"Postal code","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/postal-code","detectionApi":"navigator.geolocation.getCurrentPosition then a reverse geocode","detectionNote":"The same two steps as the ZIP page, aimed at the rest of the world. What comes back varies by country: six characters in the Netherlands, a mixed alphanumeric outercode and incode in the United Kingdom, four digits in much of continental Europe, and nothing at all in the handful of countries with no postal code system.","requiresPermission":true,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: consent-gated.","spoofable":"Yes","spoofNote":"Follows the coordinates, as the ZIP lookup does.","browserSupport":null,"sources":[{"label":"OpenStreetMap Nominatim: reverse geocoding documentation","url":"https://nominatim.org/release-docs/latest/api/Reverse/"},{"label":"W3C: Geolocation API specification","url":"https://www.w3.org/TR/geolocation/"}],"lastReviewed":"2026-08-05"},{"slug":"address","label":"Address","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/address","detectionApi":"navigator.geolocation.getCurrentPosition then a reverse geocode","detectionNote":"Coordinates in, a formatted address out. The result is the nearest thing the map database knows about, which in a dense city is usually the right building and in the countryside can be a road name several hundred metres away.","requiresPermission":true,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: consent-gated.","spoofable":"Yes","spoofNote":"Follows the coordinates.","browserSupport":null,"sources":[{"label":"OpenStreetMap Nominatim: reverse geocoding documentation","url":"https://nominatim.org/release-docs/latest/api/Reverse/"},{"label":"MDN: Navigator.geolocation","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/geolocation"}],"lastReviewed":"2026-08-05"},{"slug":"timezone","label":"Timezone","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/timezone","detectionApi":"Intl.DateTimeFormat().resolvedOptions().timeZone","detectionNote":"Returns an IANA zone name such as \"Europe/Amsterdam\", read silently with no prompt. It is a stronger location hint than most people expect, because the zone name is a place name, not merely an offset from UTC.","requiresPermission":false,"entropyBitsEstimate":3,"entropyBasis":"Our estimate. There are a few hundred IANA zones but they are used very unevenly, so a common zone is cheap and a rarely used one is unusually revealing.","spoofable":"Yes","spoofNote":"Change your system timezone and it changes. Firefox's resistFingerprinting reports UTC to every site, and Tor Browser does the same.","browserSupport":null,"sources":[{"label":"MDN: Intl.DateTimeFormat.prototype.resolvedOptions","url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions"}],"lastReviewed":"2026-08-05"},{"slug":"elevation","label":"Elevation","category":"Location","categoryUrl":"https://readmybrowser.com/category/location","url":"https://readmybrowser.com/what-is-my/elevation","detectionApi":"position.coords.altitude from getCurrentPosition","detectionNote":"Metres above the WGS 84 reference ellipsoid, or null. Null is the usual answer on a laptop, because altitude comes from GPS and wifi positioning does not produce one. Where a value does arrive it is the least accurate of the three coordinates.","requiresPermission":true,"entropyBitsEstimate":null,"entropyBasis":"Not part of the fingerprint estimate: consent-gated and usually null.","spoofable":"Yes","spoofNote":"Follows the location override, like every other coordinate field.","browserSupport":null,"sources":[{"label":"MDN: Geolocation.getCurrentPosition","url":"https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition"},{"label":"W3C: Geolocation API specification","url":"https://www.w3.org/TR/geolocation/"}],"lastReviewed":"2026-08-05"},{"slug":"screen-resolution","label":"Screen resolution","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/screen-resolution","detectionApi":"screen.width and screen.height","detectionNote":"The full screen in CSS pixels, not the browser window and not the panel's physical pixels. On a scaled display these numbers are smaller than the hardware resolution printed on the box, which is why a 4K monitor commonly reports 2560 by 1440 or even 1920 by 1080.","requiresPermission":false,"entropyBitsEstimate":4.5,"entropyBasis":"Our estimate. A handful of sizes cover most visitors, but the long tail of unusual resolutions is genuinely distinctive, and combining width, height and colour depth compounds it.","spoofable":"Partly","spoofNote":"Not settable from a page, but Firefox's resistFingerprinting and Tor Browser report rounded or fixed values, and some extensions overwrite the properties.","browserSupport":[{"browser":"Chrome, Edge, Safari","behaviour":"Report the real scaled screen size."},{"browser":"Firefox with resistFingerprinting","behaviour":"Reports the window size rounded to a coarse grid instead of the screen, so many users report the same value."},{"browser":"Tor Browser","behaviour":"Letterboxes the content area to fixed step sizes, so the reported dimensions are shared by many users on purpose."}],"sources":[{"label":"MDN: Screen.width","url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen/width"}],"lastReviewed":"2026-08-05"},{"slug":"viewport-size","label":"Viewport size","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/viewport-size","detectionApi":"window.innerWidth and window.innerHeight","detectionNote":"The area your page is actually drawn into, scrollbars included. Changes when you resize the window, open devtools, rotate a phone, or when a mobile browser's address bar slides away, which is why the height on a phone is a moving target.","requiresPermission":false,"entropyBitsEstimate":4,"entropyBasis":"Our estimate. Because a viewport can be nearly any size, it carries more than the screen size does, but it also changes between visits, which limits its use for recognising a returning visitor.","spoofable":"Partly","spoofNote":"You change it by resizing the window. Tor Browser deliberately snaps it to fixed steps so that many users report the same figures.","browserSupport":null,"sources":[{"label":"MDN: Window.innerWidth","url":"https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth"}],"lastReviewed":"2026-08-05"},{"slug":"color-depth","label":"Color depth","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/color-depth","detectionApi":"screen.colorDepth","detectionNote":"Bits used to represent one pixel's colour. In practice every current browser returns 24, including on displays that can do more, because the value was standardised away as a fingerprinting surface. A 30 or 48 here is now more likely to mean an unusual configuration than a better monitor.","requiresPermission":false,"entropyBitsEstimate":0.5,"entropyBasis":"Our estimate, and low on purpose: near enough everybody reports 24, so the value only carries information in the rare case that it does not.","spoofable":"Partly","spoofNote":"Not user-settable, but the specification pushed browsers towards a constant, so in effect it is already normalised for you.","browserSupport":null,"sources":[{"label":"MDN: Screen.colorDepth","url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen/colorDepth"}],"lastReviewed":"2026-08-05"},{"slug":"pixel-ratio","label":"Device pixel ratio","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/pixel-ratio","detectionApi":"window.devicePixelRatio","detectionNote":"How many device pixels make up one CSS pixel. 1 on an old monitor, 2 on most Apple Retina displays, and awkward fractions such as 1.25, 1.5 or 2.625 on Windows scaling and Android phones. It changes when you zoom, which surprises people measuring it.","requiresPermission":false,"entropyBitsEstimate":1.5,"entropyBasis":"Our estimate. A handful of values dominate, but the fractional ones from Windows scaling and Android are numerous enough to split the crowd usefully.","spoofable":"Partly","spoofNote":"Changes with browser zoom, which anyone can do. Privacy-focused browsers round it to whole numbers.","browserSupport":null,"sources":[{"label":"MDN: Window.devicePixelRatio","url":"https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio"}],"lastReviewed":"2026-08-05"},{"slug":"webgl","label":"WebGL renderer","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/webgl","detectionApi":"gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_RENDERER_WEBGL)","detectionNote":"Returns a driver-supplied renderer string that names your graphics chip and often its driver. No prompt, no click. Firefox restricts the debug extension, and Safari returns a generic Apple string, so the card can be vague or empty in either.","requiresPermission":false,"entropyBitsEstimate":7,"entropyBasis":"Our estimate, and the highest single figure on this site apart from canvas. The reasoning: the string is long, precise and names hardware, so it splits visitors far more finely than any browser-level signal.","spoofable":"Partly","spoofNote":"Extensions and hardened browsers can mask or randomise it. Randomising is a mixed blessing: a value nobody else reports is itself distinctive.","browserSupport":[{"browser":"Chrome and Edge","behaviour":"Return the full unmasked renderer string, hardware and driver included."},{"browser":"Firefox","behaviour":"Restricts WEBGL_debug_renderer_info; with resistFingerprinting on, the string is generic."},{"browser":"Safari","behaviour":"Returns a generic Apple GPU string rather than the specific chip."},{"browser":"Tor Browser","behaviour":"Blocks or normalises the value entirely."}],"sources":[{"label":"MDN: WEBGL_debug_renderer_info","url":"https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info"},{"label":"EFF Cover Your Tracks, on how signals combine","url":"https://coveryourtracks.eff.org/"}],"lastReviewed":"2026-08-05"},{"slug":"gpu","label":"GPU","category":"Display","categoryUrl":"https://readmybrowser.com/category/display","url":"https://readmybrowser.com/what-is-my/gpu","detectionApi":"gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_VENDOR_WEBGL)","detectionNote":"The vendor half of the same WebGL lookup: who made the chip, rather than which chip it is. Coarser than the renderer string and correspondingly less identifying.","requiresPermission":false,"entropyBitsEstimate":2,"entropyBasis":"Our estimate. A small number of vendors cover almost every device, so the vendor alone narrows the crowd far less than the renderer does. It is counted separately here to make that difference visible.","spoofable":"Partly","spoofNote":"Masked or randomised by the same tools that handle the renderer string.","browserSupport":null,"sources":[{"label":"MDN: WEBGL_debug_renderer_info","url":"https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info"}],"lastReviewed":"2026-08-05"},{"slug":"device","label":"Device type","category":"Device","categoryUrl":"https://readmybrowser.com/category/device","url":"https://readmybrowser.com/what-is-my/device","detectionApi":"navigator.maxTouchPoints with navigator.userAgent","detectionNote":"There is no API that says \"phone\" or \"laptop\". The category above is inferred from touch capability, the platform tokens in the user agent and the screen dimensions. It is a guess, and it gets touchscreen laptops and tablets in desktop mode wrong regularly.","requiresPermission":false,"entropyBitsEstimate":1,"entropyBasis":"Our estimate. Three broad categories cannot narrow much on their own; the inference is worth more as a cross-check against other signals than as a signal in itself.","spoofable":"Yes","spoofNote":"Every input to the guess can be faked, and the browser's own \"request desktop site\" setting fakes it for you.","browserSupport":null,"sources":[{"label":"MDN: Navigator.maxTouchPoints","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints"}],"lastReviewed":"2026-08-05"},{"slug":"device-memory","label":"Device memory","category":"Device","categoryUrl":"https://readmybrowser.com/category/device","url":"https://readmybrowser.com/what-is-my/device-memory","detectionApi":"navigator.deviceMemory","detectionNote":"Returns your RAM in gigabytes, deliberately rounded down to a power of two and capped, so the only possible answers are 0.25, 0.5, 1, 2, 4 and 8. A machine with 64 GB reports 8. Firefox and Safari do not implement the property at all, so the card is empty there.","requiresPermission":false,"entropyBitsEstimate":1.2,"entropyBasis":"Our estimate. The rounding is the point: capping at 8 and snapping to powers of two was specified precisely to keep this from becoming a precise hardware identifier.","spoofable":"Partly","spoofNote":"Not settable, but a browser can decline to implement it, and two of the four major engines do exactly that.","browserSupport":[{"browser":"Chrome, Edge and other Chromium browsers","behaviour":"Implemented. Returns 0.25, 0.5, 1, 2, 4 or 8, never anything else."},{"browser":"Firefox","behaviour":"Not implemented. navigator.deviceMemory is undefined."},{"browser":"Safari","behaviour":"Not implemented. navigator.deviceMemory is undefined."}],"sources":[{"label":"MDN: Navigator.deviceMemory","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory"},{"label":"W3C: Device Memory specification","url":"https://www.w3.org/TR/device-memory/"}],"lastReviewed":"2026-08-05"},{"slug":"cpu-cores","label":"CPU cores","category":"Device","categoryUrl":"https://readmybrowser.com/category/device","url":"https://readmybrowser.com/what-is-my/cpu-cores","detectionApi":"navigator.hardwareConcurrency","detectionNote":"The number of parallel workers the browser is willing to run, which is a count of logical processors and not of physical cores. On a chip with simultaneous multithreading it is typically twice the physical core count. The specification explicitly allows a browser to report a lower number than the truth, and Safari and Tor Browser both do.","requiresPermission":false,"entropyBitsEstimate":1.8,"entropyBasis":"Our estimate. Common counts such as 4, 8, 12 and 16 dominate heavily, so most visitors land in a handful of large buckets and only unusual counts stand out.","spoofable":"Partly","spoofNote":"A page cannot change it, but the browser is permitted to under-report, and privacy browsers cap it at a low fixed number so their users all look alike.","browserSupport":[{"browser":"Chrome, Edge and other Chromium browsers","behaviour":"Report the logical processor count as the operating system sees it."},{"browser":"Firefox","behaviour":"Reports the logical processor count; with resistFingerprinting on, reports 2."},{"browser":"Safari","behaviour":"Caps the reported value, so high core-count Macs report a lower number than the hardware has."},{"browser":"Tor Browser","behaviour":"Reports 2 for every user."}],"sources":[{"label":"MDN: Navigator.hardwareConcurrency","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/hardwareConcurrency"},{"label":"HTML specification: navigator.hardwareConcurrency","url":"https://html.spec.whatwg.org/multipage/workers.html#navigator.hardwareconcurrency"}],"lastReviewed":"2026-08-05"},{"slug":"battery","label":"Battery","category":"Device","categoryUrl":"https://readmybrowser.com/category/device","url":"https://readmybrowser.com/what-is-my/battery","detectionApi":"navigator.getBattery()","detectionNote":"Resolves to an object with charge level, charging state and time estimates. Firefox and Safari removed it entirely after research showed the combination of level and discharge time acted as a short-lived identifier that survived clearing cookies and switching to private browsing.","requiresPermission":false,"entropyBitsEstimate":1,"entropyBasis":"Our estimate for the value as a static signal. Its real risk was never the snapshot but the trajectory: watched over minutes, a charge curve is close to unique, and that is what got the API removed.","spoofable":"No","spoofNote":"Nothing to fake in the browsers that still expose it. The effective defence was removal, and two engines took it.","browserSupport":[{"browser":"Chrome, Edge and other Chromium browsers","behaviour":"navigator.getBattery() is available."},{"browser":"Firefox","behaviour":"Removed. The card stays empty."},{"browser":"Safari","behaviour":"Never shipped. The card stays empty."}],"sources":[{"label":"MDN: Navigator.getBattery","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery"}],"lastReviewed":"2026-08-05"},{"slug":"touch-support","label":"Touch support","category":"Device","categoryUrl":"https://readmybrowser.com/category/device","url":"https://readmybrowser.com/what-is-my/touch-support","detectionApi":"navigator.maxTouchPoints","detectionNote":"The number of simultaneous contact points the hardware reports. 0 means no touchscreen, 5 or 10 is a typical phone or tablet. It says what the hardware can do, not what you are using: a touchscreen laptop driven entirely by trackpad still reports touch points.","requiresPermission":false,"entropyBitsEstimate":1,"entropyBasis":"Our estimate. The answer is essentially zero or not-zero for most people, so it splits the population roughly in half rather than finely.","spoofable":"Partly","spoofNote":"Devtools device emulation reports touch points on a desktop machine, and extensions can override the property.","browserSupport":null,"sources":[{"label":"MDN: Navigator.maxTouchPoints","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints"}],"lastReviewed":"2026-08-05"},{"slug":"do-not-track","label":"Do Not Track","category":"Privacy","categoryUrl":"https://readmybrowser.com/category/privacy","url":"https://readmybrowser.com/what-is-my/do-not-track","detectionApi":"navigator.doNotTrack","detectionNote":"Returns \"1\" when the preference is on, \"0\" when it is explicitly off, and null when unset. Chrome removed the setting, Firefox deprecated its own in favour of Global Privacy Control, and Safari dropped it years ago on the grounds that the header itself had become a fingerprinting signal.","requiresPermission":false,"entropyBitsEstimate":0.5,"entropyBasis":"Our estimate, low but not zero, and pointing the wrong way: because so few people enable it, having it on makes you slightly easier to single out rather than harder. That irony is the honest summary of the whole standard.","spoofable":"Yes","spoofNote":"It is a preference your browser announces. Any client can announce it or not, and no site is obliged to act on it either way.","browserSupport":null,"sources":[{"label":"MDN: Navigator.doNotTrack","url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/doNotTrack"}],"lastReviewed":"2026-08-05"},{"slug":"fingerprint","label":"Browser fingerprint","category":"Privacy","categoryUrl":"https://readmybrowser.com/category/privacy","url":"https://readmybrowser.com/fingerprint","detectionApi":"the combination of every signal above, hashed locally","detectionNote":"There is no fingerprint API. A fingerprint is what you get when a script reads a dozen ordinary properties and combines them. The hash on this site never leaves your device: it is computed in the page, shown to you, and discarded when you close the tab.","requiresPermission":false,"entropyBitsEstimate":null,"entropyBasis":"This is the total rather than a contributor, so it has no figure of its own. The per-signal estimates and how they are combined are set out on /methodology.","spoofable":"Partly","spoofNote":"You can change individual inputs, but changing them into values nobody else reports makes you easier to single out, not harder. Blending in beats standing out.","browserSupport":null,"sources":[{"label":"EFF Cover Your Tracks","url":"https://coveryourtracks.eff.org/"},{"label":"AmIUnique","url":"https://amiunique.org/"}],"lastReviewed":"2026-08-05"}]}