navigator.userAgentData is the experimental entry point to User-Agent Client Hints. Learn NavigatorUAData low-entropy fields (brands, mobile, platform), how getHighEntropyValues() works, secure-context rules, five examples, and try-it labs.
01
Kind
Read-only property
02
Returns
NavigatorUAData
03
Status
Experimental
04
Context
Secure (HTTPS)
05
Low entropy
brands / mobile / platform
06
High entropy
getHighEntropyValues()
Fundamentals
Introduction
The classic navigator.userAgent string is one long, hard-to-parse label. User-Agent Client Hints offer a cleaner API: structured fields for brand, mobile, and platform — with more detailed data only when you ask for it.
navigator.userAgentData returns a NavigatorUAData object. Beginners usually start with three low-entropy properties:
brands — array of { brand, version } objects
mobile — true if the UA looks mobile
platform — platform brand string (for example "Windows")
💡
Low vs high entropy
MDN: low-entropy values reveal less about the user. High-entropy values (architecture, model, full version list, …) can be more identifying, so they are requested asynchronously with getHighEntropyValues().
Concept
Understanding the userAgentData Property
Think of userAgentData as a modern client-hints door on navigator — not a replacement for feature detection when you need an API.
NavigatorUAData — object returned by the property.
High entropy — request via Promise with getHighEntropyValues().
Secure context — HTTPS / localhost in supporting browsers.
Workers — MDN notes NavigatorUAData is also available via WorkerNavigator.userAgentData.
Limited support — commonly Chromium-based; missing in some major browsers.
Foundation
📝 Syntax
General form of the property:
JavaScript
navigator.userAgentData
Value
A NavigatorUAData object (when supported).
Common patterns
JavaScript
// Always feature-detect first
if ("userAgentData" in navigator) {
console.log(navigator.userAgentData.brands); // MDN example
console.log(navigator.userAgentData.mobile);
console.log(navigator.userAgentData.platform);
} else {
console.log("userAgentData not available — fall back or skip.");
}
// High-entropy hints (async)
if (navigator.userAgentData?.getHighEntropyValues) {
navigator.userAgentData
.getHighEntropyValues(["architecture", "platform", "platformVersion"])
.then((ua) => console.log(ua));
}
Cheat Sheet
⚡ Quick Reference
Goal
Code
Get NavigatorUAData
navigator.userAgentData
Feature detect
"userAgentData" in navigator
Brands list
navigator.userAgentData.brands
Mobile?
navigator.userAgentData.mobile
Platform
navigator.userAgentData.platform
High-entropy hints
getHighEntropyValues([…])
Secure context?
window.isSecureContext
Snapshot
🔍 At a Glance
Four facts to remember about navigator.userAgentData.
Returns
NavigatorUAData
Client Hints
Status
Experimental
Not Baseline
Context
HTTPS
Secure required
Ask more
getHigh…
Async Promise
Compare
📋 userAgent String vs userAgentData
navigator.userAgent
navigator.userAgentData
Shape
One long string
Structured object + methods
Baseline?
Yes (widely available)
No — Limited / Experimental
Privacy model
Often reduced / frozen
Low entropy first; high entropy on request
Best for
Logs / legacy
Structured Client Hints when supported
Feature gates?
Do not sniff brands
Still prefer API feature detection
Hands-On
Examples Gallery
Examples follow MDN navigator.userAgentData patterns. Prefer Try It Yourself in Chrome / Edge on HTTPS — Firefox and Safari may report the API missing.
📚 Getting Started
Detect the API and read the MDN brands example.
Example 1 — Feature Detection
Check support and secure context before reading hints.
navigator.userAgentData belongs to the experimental User-Agent Client Hints API and is not Baseline. Support is limited (commonly Chromium-based). Always feature-detect, use HTTPS, and keep a fallback.
✓ Experimental · Not Baseline
Navigator.userAgentData
NavigatorUAData entry point for Client Hints — brands, mobile, platform, and optional high-entropy values.
LimitedExperimental
Google ChromeClient Hints UA Data / Chromium path
Limited
Microsoft EdgeFollow Chromium Client Hints support
Limited
OperaFollow Chromium Client Hints support
Limited
Mozilla FirefoxTypically unavailable — feature-detect
Unavailable
Apple SafariTypically unavailable — feature-detect
Unavailable
Internet ExplorerNo userAgentData support
Unavailable
userAgentDataLimited
Bottom line: Detect navigator.userAgentData, read low-entropy fields first, request high-entropy values only when needed, and never require the API for core features.
Wrap Up
Conclusion
navigator.userAgentData is the experimental Client Hints entry point on Navigator. Use it for structured low-entropy hints when available, request high-entropy values carefully, and keep feature detection as your source of truth for capabilities.
Treat high-entropy data as free / private-safe forever
Assign to navigator.userAgentData
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about userAgentData
Experimental Client Hints — structured brands, low then high entropy, HTTPS.
5
Core concepts
📄01
Returns
NavigatorUAData
Value
⚡02
Status
Experimental
Limited
🔒03
Context
secure HTTPS
Required
📊04
Low
brands / mobile
Sync
🎯05
High
getHighEntropyValues
Async
❓ Frequently Asked Questions
A NavigatorUAData object from the User-Agent Client Hints API. It exposes low-entropy brand, mobile, and platform hints, plus getHighEntropyValues() for more detailed (higher-entropy) data.
MDN marks it Experimental and Limited availability (not Baseline). It is not Deprecated or Non-standard. Always feature-detect and keep a fallback.
Yes. MDN lists it as a secure-context feature (HTTPS or localhost) in supporting browsers.
Low-entropy NavigatorUAData properties: brands is an array of {brand, version} objects, mobile is a boolean, and platform is a platform brand string.
An async method that requests higher-entropy hints (for example architecture, model, platformVersion, fullVersionList). It returns a Promise so the browser can run checks before revealing more identifying data.
Client Hints are designed to be a better-structured alternative to scraping the UA string — but support is still limited. Prefer feature detection for capabilities, and feature-detect userAgentData before relying on it.
Did you know?
Chromium often includes a greasy brand like "Not A;Brand" in brands on purpose. That anti-fingerprinting trick makes naive brand sniffing less reliable — another reason to prefer feature detection for real capabilities.