Guides

Signals

Every signal the SDK collects, what it measures, and the weight it carries in similarity matching. A signal's weight is how much it distinguishes one device from another, which is its entropy, not merely how stable it is.

Weights come in four tiers. Distinguishing signals are device-specific and decide identity; bucketing signals are near-ubiquitous and only group candidates. The persistence engine page explains how these weights feed the 0.82 / 0.62 similarity thresholds and the entropy gate.

Signal catalog

SignalWhat it isWeightRationale
canvasHash of a 2D canvas render: text, shapes, blends.Distinguishing · 4High entropy from the exact GPU, driver, and OS text stack. A browser update can rewrite it, so it is never the only signal, but it is a primary distinguisher.
webglHash of a WebGL scene render.Distinguishing · 4High entropy from the GPU pipeline. Same drift risk as canvas, same importance.
webglVendorUnmasked GPU vendor and renderer string.Distinguishing · 4Distinctive and fairly stable. Reads as "Apple M4" versus "Apple M5", so it is the single best separator of similar-model machines.
fontsSet of installed fonts detected by render measurement.Distinguishing · 4User-installed fonts add real entropy on top of the stock OS set, and the set changes slowly. Jaccard overlap tolerates a few additions.
audioHash of an OfflineAudioContext oscillator render.Distinctive · 3Reflects the audio DSP stack. Distinctive, but shifts occasionally, so it sits a tier below the render hashes.
screenResolution including scaling, plus color depth.Distinctive · 3Varies across models and external displays. Docking to a monitor or changing scaling moves it.
hardwareConcurrencyLogical CPU core count reported by the browser.Population · 2Stable, but a whole product line shares one value, so it narrows the field rather than identifying a machine.
languagesOrdered browser language list, e.g. ["de-DE", "en"].Population · 2Narrows locale, but millions share "en-US".
timezoneIANA timezone from the Intl API, e.g. Europe/Berlin.Population · 2Stable and follows the person, but everyone in a city shares it.
platform, vendor, deviceMemory, colorDepth, touch, userAgentOS platform, browser vendor, RAM bucket, color depth, touch class, UA string.Bucketing · 1Near-ubiquitous or fast-changing. Every Mac shares the platform; the RAM bucket is capped and coarse. Useful for grouping candidates cheaply, weak for identity.
ip / asnRequest IP and its autonomous system, resolved server-side.Network hintCorroboration only. Mobile devices rotate IPs daily and whole households share one address, so it can nudge a score but never decide a match.

How to read the tiers

Two devices only merge when their distinguishing signals agree, not when their common signals line up. A browser update that rewrites the canvas and WebGL hashes leaves the GPU renderer, fonts, screen, and audio in agreement, so the same device still re-links. Two different laptops with the same OS, CPU, and browser build differ on the render hashes and GPU renderer, so they stay separate.

Stable is not the same as identifying
Timezone, platform, and core count are stable, but a large population shares each one, so they cannot identify a specific machine. Veriprint weights them low on purpose and reports every match with a confidence score rather than claiming a certain identification.