What it measures
The signal tests a curated cross-platform font list covering Windows, macOS, Linux, and Android. For each font, a hidden span is rendered using that font as the primary family and a generic fallback. If the rendered dimensions differ from a pure-fallback baseline, the font is considered installed.
Because fonts are installed at the OS level rather than the browser level, the same presence set is reported by Chrome, Safari, and Firefox on the same machine, making the signal hardware-bound.
How it's collected
The collector creates a hidden off-screen container, renders a baseline span in the fallback family, and records its rendered width and height. Each candidate font is then rendered in turn with the same content; if its dimensions diverge from the baseline, the font is marked present.
The collector yields to the main thread periodically (using scheduler.yield() on Chrome 115+ or setTimeout 0 as a fallback) to avoid blocking the UI. The hidden container is removed from the DOM in a finally block. If document is undefined, the result is absent immediately.
Confidence rules
| Confidence | Trigger |
|---|---|
| normal | Measurement returned a non-null presence array |
| absent | document is undefined, or any unhandled exception |
Why hardware-bound
Font measurement relies solely on offsetWidth and offsetHeight of DOM spans, which is deterministic across all browser engines for a given installed font set. Chrome, Safari, and Firefox all perform the same comparison: rendered span vs. fallback baseline. Because installed fonts are an OS and hardware property, not a browser property, the presence bitmap is stable across browsers on the same device.
The document.fonts.check() API was considered and rejected. In Chrome it returns true for any syntactically valid font-family name because it silently falls back, causing false positives across the entire list. Dimension measurement is the only reliable installed-font test.
Things worth knowing
- The hash encodes the full presence bitmap, not just the detected font names. Two devices with different installed font sets but the same count of detected fonts will produce different hashes.
- Firefox resistFingerprinting does not interfere with offsetWidth/offsetHeight of hidden spans. The signal returns normal even when resistFingerprinting is active.
- Brave Standard mode does not farble font enumeration because it is dimension-based rather than canvas-based. The signal is unaffected by Brave privacy settings.
- In SSR or non-browser environments where document is undefined, the signal returns absent immediately without attempting measurement.
- The exact list of probed fonts, the test string, font size, and fallback family are deliberately not published. Treat the result shape and confidence as the stable interface; the probe list evolves between releases.
Last reviewed 2026-06-04

