Browser & OS Detection · Browser Tests

User-Agent Client Hints Test

See which client hints your browser volunteers, and which it makes a site ask for.

Reading client hints…

Every value is read straight from navigator.userAgentData in your browser and never leaves this page. Nothing is guessed: anything your browser withholds is shown as not returned.

On this page
  1. What Client Hints are
  2. The hints sent unasked
  3. Hints a site must request
  4. Why they replaced the UA string
  5. What they mean for privacy

What User-Agent Client Hints actually are

Client Hints are the replacement for the single, overloaded user-agent string. Rather than announcing your browser, version, engine and platform in one line attached to every request, the browser splits them into named values — Sec-CH-UA, Sec-CH-UA-Platform, Sec-CH-UA-Mobile — and releases the most precise ones only when a site asks.

The system has two halves. Request headers carry the values on the wire, and navigator.userAgentData exposes the same values to JavaScript, with a method called getHighEntropyValues() for the detailed set. Chromium browsers — Chrome, Edge, Opera, Brave — implement both. Firefox and Safari implement neither.

Not a plugin, not a setting

You cannot switch client hints on or off. Whether the panel above shows a platform name or an explanation is decided entirely by which browser you happen to be running.

The low-entropy hints sent unasked

Three values are sent with every request without anyone requesting them. The platform, reported as a short string like Windows, macOS or Android; a mobile flag expressed as ?0 or ?1; and the brand list, which carries each brand with its major version only, so Chromium 131 rather than 131.0.6778.86.

The brand list is deliberately awkward to parse. Alongside the real entry, browsers insert decoy brands with names such as Not_A Brand and Not.A/Brand, which change with each major release. This technique, borrowed from TLS and called GREASE, exists so that sites stop writing code that assumes the first brand in the list is the browser. If you are reading the list above and wondering what the nonsense entries are, that is exactly their job.

The high-entropy hints a site has to request

Everything more specific sits behind a request. A server opts in by sending an Accept-CH response header listing what it wants, after which the browser attaches those headers to later requests. A page can also ask directly from JavaScript, which is what the button above does.

  • Architecture and bitness. Reported as x86 or arm, and 32 or 64. A 32-bit browser on 64-bit Windows additionally sets the WOW64 flag, which is a surprisingly specific configuration to be able to name.
  • Platform version. On Android this reads as the real release, for example 14.0.0. On Windows Chromium reports a shortened, mapped value rather than the NT number, which is why it does not look like the “10.0” you see in the user-agent string.
  • Full version list and uaFullVersion. The complete build numbers, one of the most precise single values a browser will hand over.
  • Model. Non-empty on Android and some Chromebooks, where it names the device. Desktop browsers return an empty string.

Why browsers replaced the user-agent string

The old string had two problems. It was sent to everyone — the advertising script, the image host, the analytics pixel — not just the site that needed it. And it had frozen into nonsense, with every browser claiming to be Mozilla/5.0 and AppleWebKit for reasons that stopped being true two decades ago.

Chrome's answer was to reduce the string to a minimal form, where the version reads as Chrome/131.0.0.0, and move the detail into hints. Firefox and Safari took a different route: they kept the classic string but froze the parts that leaked the most, which is why macOS now always reports 10_15_7 regardless of the release you actually run.

The split is the story

A site can no longer treat one string as the truth. It has to decide which browser family it is talking to and use a different detection path for each. The HTTP headers test shows which of these values your browser actually put on the wire.

What client hints mean for privacy

Client hints are often described as a privacy improvement, and in one narrow sense they are: the precise values are no longer broadcast with every subresource request, and a browser can refuse to answer. But the high-entropy set, when granted, is a near-unique build identifier. Exact version, architecture, bitness and platform version together describe a smaller population than the old string did.

The honest reading is that this is a wash for trackers and a real improvement for engineering. Combining architecture and platform version with the graphics signals in a fingerprint gives a tracker another stable column. See the fingerprint test for how these values stack up, and the operating system test to watch client hints disagree with the other two sources that claim to know your OS.

Frequently Asked Questions

What are User-Agent Client Hints?
A set of request headers and a small JavaScript API that replace most of the old user-agent string. Instead of packing the browser, version and platform into one text line, the browser splits them into named values such as Sec-CH-UA-Platform, and the more detailed ones are only released when a site actually asks.
Why does this page show no client hints at all?
Because your browser does not implement the API. Firefox and Safari have declined to adopt User-Agent Client Hints, so navigator.userAgentData is simply undefined in them. They keep sending the classic user-agent string, which you can read in full on our user-agent test.
What is the difference between low-entropy and high-entropy hints?
Low-entropy hints are sent with every request without anyone asking: the platform name, whether you are on mobile, and a brand list that carries only each brand's major version. High-entropy hints — architecture, bitness, exact platform version, model and the full version list — are withheld until a site requests them, either through the Accept-CH response header or by calling getHighEntropyValues().
Can a website read my processor architecture and exact browser build?
On Chromium browsers, usually yes, if the site asks. The high-entropy set includes architecture, bitness and the full version list, and this page proves it by requesting them on your behalf. What you get is only what your browser chooses to expose: the model field is an empty string on most desktop machines.
Do Client Hints make me harder to track?
Not on their own. They make the exchange more deliberate, since the detailed values are not broadcast with every image and script, but the high-entropy set is a precise build identifier. Run the browser fingerprint test to see how much they add on top of the rest of your signals.