form-factor-gated APIs match the form factor the client hints claim
A client-hint claim of mobile comes with none of the desktop-only APIs; a claim of desktop comes with them.
What a detector infers
Some Web APIs are not compiled for every platform, so their presence is a fact about the binary rather than about the user agent. EyeDropper, navigator.keyboard and windowControlsOverlay are desktop-only in Chromium and simply do not exist on Chrome for Android; the client-hint mobile bit, by contrast, is a value the browser reports and a spoof can rewrite in one line.
Two independent sources for one fact, so a disagreement locates the lie: a desktop binary presenting a phone, or a mobile build claiming a desktop. This row scores that gate only.
The wider platform-gated list — BarcodeDetector, navigator.managed, virtualKeyboard — is measured and shown beside the verdict but never scored, because naming which OS ships which of them is precisely the kind of availability table that rots between milestones, and a stale table would convict honest browsers. That is the same discipline the hyphenation row applies: report the reading, do not manufacture a verdict from a list that has to be maintained.
How to resolve it
These surfaces are decided when the binary is built. If the client hints say mobile, run a mobile build — the presence of a desktop-only API cannot be edited away from inside the page, and deleting it would trip the global-object rows instead.
Read in the wild by
FakeBrowser (collector)
Reads BarcodeDetector and BluetoothUUID as part of its window presence matrix, alongside the legacy-engine members — platform-gated surfaces collected specifically so a replayed persona can present the right ones.
dumpWindowProps() key list, script/dumpDD.js
kkoooqq/fakebrowser script/dumpDD.js
Every attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Capability surfaces
- the Web Animations surface is identical in a fresh realm
animation-surface-vs-realmThe Web Animations API exposes a small, precisely specified surface: whether Element.animate exists, whether the timeline and KeyframeEffect… - the platform theme resolves the CSS system colours coherently
system-colors-vs-platformThe CSS system-colour keywords — Highlight, HighlightText, Canvas, CanvasText, ButtonFace, ButtonText, GrayText and their newer siblings… - the user-agent stylesheet resolves identically in a fresh realm
default-style-values-vs-realmEvery browser ships a user-agent stylesheet: the rules that make a heading bold and a button look like a button before any site CSS exists. - the permission descriptors this build accepts are the platform's, not a lookup table's
permission-name-support-setThe Permissions specification deliberately fixes no list of names. - Web Bluetooth is present or absent as the claimed desktop platform requires
bluetooth-availability-vs-platformnavigator.bluetooth is part of Chrome's desktop surface on Windows, macOS and Linux, and it is provided by the platform layer rather than by… - the WebAuthn surface is as complete as the claimed platform's browser ships it
webauthn-surface-vs-platformWebAuthn reaches further down the stack than most web APIs: PublicKeyCredential is not a self-contained JavaScript object but the front door… - the deprecated and modern storage-quota APIs report the same origin quota
legacy-quota-surface-agreementnavigator.webkitTemporaryStorage.queryUsageAndQuota and navigator.storage.estimate() describe the same thing — this origin's storage quota… - the Storage Buckets API reports the same origin quota as navigator.storage
storage-buckets-quota-agreementThere are three ways to ask this origin how much storage it may use, and they all describe one number. navigator.storage.estimate() is the…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Capability surfaces checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Capability surfaces — the family platform-gated-apis-vs-form-factor belongs to.
