hints / ua · opt-in
Sec-CH-UA-Form-Factors
Sec-CH-UA-Form-Factors classifies the device (Desktop, Mobile, Tablet, XR, Watch) more precisely than the mobile boolean, behind an Accept-CH opt-in.
- Example
Sec-CH-UA-Form-Factors: "Desktop"- JavaScript
getHighEntropyValues(['formFactors'])- Available since
- Chrome 125 (2024)
- Engines
- Chrome Edge Opera Firefox Safari
- References
- MDN · Specification
Sec-CH-UA-Mobile compresses the world into one bit, and the world pushed back: tablets, foldables, TVs, watches, cars and headsets all answer ?0 yet want very different experiences. Sec-CH-UA-Form-Factors is the richer answer: a list of device-class tokens.
Accept-CH: Sec-CH-UA-Form-Factors
Sec-CH-UA-Form-Factors: "Desktop"
Sec-CH-UA-Form-Factors: "Mobile"
Sec-CH-UA-Form-Factors: "Tablet", "Foldable" The vocabulary
The spec currently defines: "Desktop", "Mobile", "Tablet", "XR", "EInk", "Watch", "Automotive", and the combinable "Foldable". It is a list (a folding tablet legitimately reports two tokens), so parse it as a structured-field list of strings, never a single value.
Why it is marked experimental
It shipped in Chrome 125 (2024) and works today across current Chromium, but the token vocabulary is still evolving with the spec, MDN flags the header experimental, and other engines have not signaled adoption. Reasonable to use, with two rules:
- Treat unknown tokens as forward compatibility, not errors.
- Always keep a sane default branch (
"Desktop"-like behavior) for browsers that send nothing.
In JavaScript
const { formFactors } = await navigator.userAgentData
.getHighEntropyValues(['formFactors']);
// e.g. ["Desktop"] Server-side use
The classic case is TV and automotive: an Android-based TV and an Android phone can look identical in the default hints, but "Automotive" or a TV-class token lets an edge worker pick the ten-foot UI on the first request. Until support broadens, treat it as progressive enhancement over the Sec-CH-UA-Mobile + Sec-CH-UA-Model combination.