a Windows face that loads by name is also visible to text layout
Under a Windows claim on Chromium, every candidate face that loads through local() also changes the width of text when requested as a font-family, in canvas text or in layout.
What a detector infers
This is the row above asked in the other direction. A page can learn whether a font is installed by loading it by name, new FontFace(x, 'local("Franklin Gothic Medium")').load(), or by asking for it as a font-family and measuring whether text drawn with a generic fallback changes width. On Windows both questions are answered from the same DirectWrite font collection. The row above catches a face that measures but will not load, which is a stand-in under a borrowed name.
This one catches a face that loads but does not measure: it is installed, since local() reached it, yet a font-family request for the same name falls back to the generic in canvas text and in layout alike. The only way to produce that is to filter the family lookup while leaving the local() path alone, which is what a browser shaping its font list from the inside tends to do.
The candidate list is 116 Windows faces that loaded and measured on genuine Chrome and Edge 153 on Windows 11. A face that does not load casts no vote, so a list entry missing from some other install only loses coverage and never raises an accusation. Icon fonts are left out, because they have no Latin glyphs and look absent to the probe string even on a real install. The Chromium default generics are left out too.
How to resolve it
A font list has to be the same through every path a page can use to reach it. Filtering the names font-family resolves while local() can still load the face leaves that face both provably installed and provably hidden, which no real Windows install produces. Present the host's fonts as they are, or remove a face from the machine itself rather than from one lookup inside the browser.
Declined off Chromium, because Firefox matches local() against individual face names (so "Segoe UI Light" loads there without being a family), and off a Windows claim, which has not been measured.
Read in the wild by
CloakBrowser issues
A user compared the v150 binary with genuine Chrome on the same Windows 11 machine and found it detected 70 of the 136 fonts Chrome detects. The maintainers answered that the published font set is derived from the profile seed. That answer covers which fonts are shown, but not a face that stays loadable by name while it is hidden from layout.
CloakHQ/CloakBrowser #474 (v150 binary diverges from Chrome for fonts)
CloakHQ/CloakBrowser#474CloakBrowser (measured)
Franklin Gothic Medium loads through local() but moves none of the three generics in canvas text or layout. This held on every launch measured: the 152 SDK defaults with a random seed, nine fixed seeds, headless and headed, the stock configuration of a scraping service, and the 150 and 151 Pro binaries. 146 and 148 show the face through both paths.
116 candidate faces on one Windows 11 host. Chrome 153 in four modes, Edge 153, Brave 153, Clearcote r27 default and seeded, CloakBrowser 146 and 148: 0 hidden. CloakBrowser 150.0.7871.114.3-pro (59 load), 151.0.7922.108.3-pro (97 load) and 152.0.7977.83 (116 load): Franklin Gothic Medium hidden. Firefox 144: 20 single faces load without being families, which is why Gecko is declined.
CloakBrowser (measured)Every attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Engine & OS oracles
- the three heap numbers describe a possible heap
jsheap-triplet-orderingThis check replaces a retired one, and the swap is the lesson. - the platform's system font belongs to the operating system claimed
system-font-vs-claimed-osThe CSS2 system-font keywords — caption, icon, menu, message-box, small-caption and status-bar — are resolved by the HOST platform's font… - text layout uses the font scaler of the operating system claimed
text-scaler-vs-claimed-osEvery operating system draws text with its own font scaler: DirectWrite on Windows, Core Text on macOS, FreeType on Linux, Android and… - core Windows fonts that measure as installed also load by name
windows-fonts-load-by-nameA page can ask whether a font is installed in two ways. It can measure: draw a string in the font with a generic fallback and see whether… - a Windows CJK font answers to its localized family name as well as its English one
font-localized-alias-vs-englishWindows fonts carry their family name in more than one language. - typefaces the claimed OS ships as separate faces measure as separate faces
claimed-os-typefaces-are-distinctA font request is answered by the host's font stack, not by the browser and not by anything the user agent sets, so changing… - the number of font families the page can detect is reported for comparison
font-family-count-vs-claimed-osThe two font rows beside this one ask whether the font layer CONTRADICTS the operating system being claimed. - the rare typefaces deployed collectors probe for are reported beside the claimed OS
rare-face-probe-set-vs-osFont enumeration in a deployed collector is not a sweep of everything installed — it is a short list of deliberately rare faces, chosen…
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 Engine & OS oracles 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 Engine & OS oracles — the family font-loads-by-name-vs-layout belongs to.
