Collectors
Collector sources
One page per wire id: the collector's own source with every helper only it can reach, 143 in total.
Generated by npm run slice. One file per wire signal id: the collector, every module-level
helper only that collector can reach, and a header carrying what the signal measures, the status
codes it can report, the constants it compares against and the tests it branches on.
Helpers reachable from more than one collector are shared plumbing; they are listed with their
line in agent/agent.clean.js rather than copied into every slice that touches them.
A slice is source text, not a runnable program: it is cut out of the cleaned bundle and still refers to the globals, vault tables and shared helpers that live there.
| id | module | stage | binding | own | shared | measures |
|---|---|---|---|---|---|---|
| s1 | cm | 3 | sig_s1_oscpu | 1 | 4 | navigator.oscpu |
| s2 | cm | 3 | sig_s2_browserLanguage | 1 | 6 | navigator.browserLanguage, navigator.languages.split(","), navigator.systemLanguage, navigator.userLanguage |
| s3 | cm | 3 | sig_s3_colorDepth | 1 | 4 | window.screen.colorDepth |
| s4 | cm | 3 | sig_s4_deviceMemory | 1 | 6 | navigator.deviceMemory |
| s5 | cm | 3 | sig_s5_height | 1 | 5 | screen.height, screen.width |
| s6 | cm | 2 | sig_s6_availLeft | 4 | 5 | screen.availLeft, screen.availTop, document.exitFullscreen, document.fullscreenElement |
| s7 | cm | 3 | sig_s7_hardwareConcurrency | 1 | 6 | navigator.hardwareConcurrency |
| s9 | cm | 3 | sig_s9_date | 1 | 5 | Date, window.Intl.DateTimeFormat |
| s10 | cm | 3 | sig_s10_sessionStorage | 1 | 4 | window.sessionStorage |
| s11 | cm | 3 | sig_s11_localStorage | 1 | 4 | window.localStorage |
| s12 | cm | 3 | sig_s12_indexedDB | 1 | 0 | window.indexedDB |
| s13 | cm | 3 | sig_s13_openDatabase | 1 | 4 | window.openDatabase |
| s14 | cm | 3 | sig_s14_cpuClass | 1 | 4 | navigator.cpuClass |
| s15 | cm | 3 | sig_s15_webkitRequestFullscreen | 1 | 7 | Element.prototype.webkitRequestFullscreen, navigator.platform, window.MediaSource, screen.height |
| s16 | cm | 3 | sig_s16_plugins | 1 | 4 | navigator.plugins.length, navigator.plugins |
| s17 | cm | 2 | sig_s17_canvas | 2 | 17 | document.createElement("canvas"), TextEncoder |
| s19 | cm | 3 | sig_s19_touchEvent | 1 | 5 | document.createEvent("TouchEvent"), window.ontouchstart, navigator.maxTouchPoints, navigator.msMaxTouchPoints |
| s20 | cm | 2 | sig_s20_hidden | 3 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s21 | cm | 2 | sig_s21_domRectList | 3 | 6 | window.DOMRectList, window.OfflineAudioContext, window.ontransitioncancel, window.RTCPeerConnectionIceEvent |
| s22 | cm | 3 | sig_s22_webAssembly | 0 | 0 | window.WebAssembly, window.WebAssembly.validate, window.WebAssembly.validate() |
| s23 | cm | 2 | sig_s23_clipboardItem | 2 | 11 | window.ClipboardItem, window.PerformanceEventTiming, window.RTCSctpTransport, navigator.webkitPersistentStorage |
| s24 | cm | 3 | sig_s24 | 0 | 0 | eval.toString() |
| s26 | cm | 2 | sig_s26_mediaDevices | 4 | 12 | navigator.mediaDevices, navigator.mediaDevices.enumerateDevices, navigator.mediaDevices.enumerateDevices(), navigator.permissions.query() |
| s27 | cm | 3 | sig_s27_vendor | 1 | 4 | navigator.vendor |
| s28 | cm | 3 | sig_s28 | 1 | 4 | window |
| s29 | cm | 2 | sig_s29 | 2 | 14 | DOMException, TextEncoder, clearTimeout(), setTimeout() |
| s30 | cm | 3 | sig_s30_doNotTrack | 0 | 0 | navigator.doNotTrack |
| s32 | cm | 3 | sig_s32_cookie | 1 | 4 | document.cookie.indexOf("cookietest="), document.cookie |
| s33 | cm | 3 | sig_s33_brave | 1 | 3 | Navigator.prototype.brave, Navigator.prototype.connection, window.braveEthereum, window.braveSolana |
| s36 | cm | 2 | sig_s36_div | 4 | 10 | document.createElement("div"), document.body, document.body.appendChild(), document.createElement() |
| s37 | cm | 3 | sig_s37_colorGamut | 1 | 4 | matchMedia((color-gamut: ${})) |
| s38 | cm | 3 | sig_s38_prefersContrast | 2 | 4 | matchMedia((prefers-contrast: ${})) |
| s39 | cm | 3 | sig_s39_forcedColors | 2 | 4 | matchMedia((forced-colors: ${})) |
| s40 | cm | 3 | sig_s40_dynamicRange | 2 | 4 | matchMedia((dynamic-range: ${})) |
| s41 | cm | 3 | sig_s41_invertedColors | 2 | 4 | matchMedia((inverted-colors: ${})) |
| s42 | cm | 3 | sig_s42_minMonochrome | 1 | 4 | matchMedia("(min-monochrome: 0)"), matchMedia((max-monochrome: ${})) |
| s43 | cm | 3 | sig_s43_prefersReducedMotion | 2 | 4 | matchMedia((prefers-reduced-motion: ${})) |
| s44 | cm | 3 | sig_s44_prefersColorScheme | 1 | 0 | matchMedia((prefers-color-scheme: ${})) |
| s45 | cm | 3 | sig_s45_date | 1 | 0 | Date |
| s46 | cm | 3 | sig_s46 | 3 | 17 | TextEncoder |
| s48 | cm | request | sig_s48 | 0 | 0 | - |
| s49 | cm | 3 | sig_s49 | 0 | 0 | window |
| s50 | cm | 3 | sig_s50_performance | 0 | 6 | window.performance, TextEncoder |
| s51 | cm | 2 | sig_s51_iframe | 3 | 10 | document.createElement("iframe"), document.body, document.body.appendChild(), navigator.vendor.indexOf("Apple") |
| s52 | cm | 2 | sig_s52_origin | 1 | 27 | window.origin, window.AudioBuffer, window.PushManager, window.ServiceWorker |
| s55 | cm | request | sig_s55_localStorage | 10 | 0 | document.cookie.split(";"), localStorage, localStorage.getItem.call(), document.cookie |
| s57 | cm | 3 | sig_s57_devicePixelRatio | 0 | 0 | window.devicePixelRatio |
| s58 | cm | 2 | sig_s58 | 1 | 0 | navigator |
| s59 | cm | 3 | sig_s59_msPointerEnabled | 0 | 6 | navigator.msPointerEnabled, window.MSCSSMatrix, window.msIndexedDB, window.msSetImmediate |
| s60 | cm | 3 | sig_s60_msLaunchUri | 0 | 7 | navigator.msLaunchUri, navigator.msSaveBlob, window.MSStream, window.msWriteProfilerMark |
| s61 | cm | 3 | sig_s61_webkitPersistentStorage | 0 | 6 | navigator.webkitPersistentStorage, navigator.webkitTemporaryStorage, window.BatteryManager, window.webkitMediaStream |
| s62 | cm | 3 | sig_s62_applePayError | 0 | 6 | navigator.vendor.indexOf("Apple"), window.ApplePayError, window.Counter, window.CSSPrimitiveValue |
| s63 | cm | 3 | sig_s63_ongestureend | 0 | 6 | window.ongestureend, window.safari, window.TouchEvent, window.orientation |
| s64 | cm | 3 | sig_s64_style | 0 | 6 | document.documentElement.style, navigator.buildID, window.CanvasCaptureMediaStream, window.CSSMozDocumentRule |
| s65 | cm | 3 | sig_s65_audio | 0 | 8 | Audio, window.onorientationchange, window.SharedWorker, navigator.connection |
| s66 | cm | 3 | sig_s66_createElement | 1 | 4 | document.createElement("a") |
| s68 | cm | 3 | sig_s68_audioBuffer | 0 | 6 | window.AudioBuffer, window.PushManager, window.ServiceWorker, navigator.geolocation |
| s69 | cm | request | sig_s69_subtle | 5 | 9 | window.crypto.subtle, navigator.msLaunchUri, navigator.msSaveBlob, window.MSStream |
| s70 | cm | 2 | sig_s70_textDecoder | 11 | 45 | TextDecoder, navigator.gpu.getPreferredCanvasFormat(), window.GPUBufferUsage.COPY_DST, window.GPUBufferUsage.COPY_SRC |
| s71 | cm | 3 | sig_s71 | 0 | 0 | window |
| s72 | cm | 3 | sig_s72 | 0 | 0 | navigator |
| s74 | cm | 3 | sig_s74_canvas | 1 | 9 | document.createElement("canvas"), document.documentElement.style, navigator.buildID, window.CanvasCaptureMediaStream |
| s75 | cm | 3 | sig_s75_canvas | 9 | 24 | document.createElement("canvas"), navigator.vendor.indexOf("Apple"), window.ApplePayError, window.Counter |
| s76 | cm | 3 | sig_s76_canvas | 0 | 15 | document.createElement("canvas"), TextEncoder |
| s79 | cm | 2 | sig_s79_url | 3 | 12 | window.URL, window.DataTransfer, window.File, window.RegExp |
| s80 | cm | 3 | sig_s80_pdfViewerEnabled | 1 | 4 | navigator.pdfViewerEnabled |
| s81 | cm | 3 | sig_s81 | 1 | 4 | - |
| s82 | cm | 3 | sig_s82_language | 0 | 0 | navigator.language |
| s83 | cm | 3 | sig_s83_languages | 0 | 0 | navigator.languages |
| s84 | cm | 2 | sig_s84_hidden | 0 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s85 | cm | 2 | sig_s85_blob | 2 | 10 | window.Blob, window.indexedDB.deleteDatabase(), window.indexedDB.open(), window.indexedDB |
| s86 | cm | 3 | sig_s86_removeItem | 1 | 9 | window.localStorage.removeItem("test"), window.localStorage.setItem("test"), window.onafterprint, window.PointerEvent |
| s87 | cm | 2 | sig_s87_hidden | 0 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s89 | cm | 2 | sig_s89_storage | 0 | 6 | navigator.storage, navigator.storage.getDirectory, navigator.storage.getDirectory(), document.removeEventListener("visibilitychange") |
| s91 | cm | 3 | sig_s91_prefersReducedTransparency | 2 | 4 | matchMedia((prefers-reduced-transparency: ${})) |
| s92 | cm | 2 | sig_s92_createDocumentFragment | 0 | 11 | document.createDocumentFragment(), document.createElement("math"), document.createElement("mmultiscripts"), document.createElement() |
| s93 | cm | 2 | sig_s93_hidden | 0 | 11 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s94 | cm | 1 | sig_s94_webkitRTCPeerConnection | 12 | 13 | window.webkitRTCPeerConnection, crypto, crypto.getRandomValues(), window.RTCPeerConnection |
| s95 | cm | 2 | sig_s95_atomics | 6 | 8 | window.Atomics, window.CSSRule, window.Error, navigator.requestMediaKeySystemAccess("org.w3.clearkey") |
| s96 | cm | 3 | sig_s96_audioContext | 1 | 8 | AudioContext, window.AudioContext, Audio, window.onorientationchange |
| s97 | cm | 2 | sig_s97_dataTransfer | 3 | 11 | window.DataTransfer, window.File, window.RegExp, document.createElement() |
| s98 | cm | 3 | sig_s98 | 0 | 0 | Navigator.prototype |
| s99 | cm | 3 | sig_s99_isSecureContext | 0 | 0 | window.isSecureContext |
| s101 | cm | 3 | sig_s101_userAgent | 1 | 3 | navigator.userAgent |
| s102 | cm | 3 | sig_s102_userAgentData | 0 | 0 | navigator.userAgentData |
| s103 | cm | 3 | sig_s103_appVersion | 1 | 3 | navigator.appVersion |
| s104 | cm | 3 | sig_s104_rtt | 1 | 3 | navigator.connection.rtt, navigator.connection |
| s106 | cm | 2 | sig_s106_notification | 1 | 3 | window.Notification, window.Notification.permission, navigator.permissions, navigator |
| s117 | cm | 3 | sig_s117_plugins | 1 | 3 | navigator.plugins.length, navigator.plugins |
| s118 | cm | 3 | sig_s118_plugins | 0 | 0 | Plugin.prototype, PluginArray.prototype, navigator.plugins, navigator |
| s119 | cm | 3 | sig_s119 | 1 | 3 | - |
| s120 | cm | 3 | sig_s120 | 0 | 0 | - |
| s123 | cm | 3 | sig_s123 | 1 | 3 | navigator |
| s130 | cm | 3 | sig_s130_sourceBuffer | 0 | 0 | SourceBuffer, SourceBufferList |
| s131 | cm | 3 | sig_s131 | 1 | 3 | document.documentElement, document |
| s132 | cm | 3 | sig_s132 | 0 | 0 | window.close, window.close.toString() |
| s133 | cm | 3 | sig_s133_external | 1 | 3 | window.external, window |
| s135 | cm | 3 | sig_s135_mimeTypes | 0 | 0 | navigator.mimeTypes.length, navigator.mimeTypes |
| s136 | cm | 3 | sig_s136_mimeTypes | 1 | 3 | MimeType.prototype, MimeTypeArray.prototype, navigator.mimeTypes, navigator |
| s139 | cm | 3 | sig_s139_css | 0 | 0 | CSS, CSS.supports("backdrop-filter") |
| s142 | cm | 3 | sig_s142_matchMedia | 0 | 0 | window.matchMedia, window.matchMedia("(-webkit-min-device-pixel-ratio: 2), (mi") |
| s144 | cm | 3 | sig_s144_sharedArrayBuffer | 0 | 0 | window.SharedArrayBuffer |
| s145 | cm | 3 | sig_s145 | 0 | 0 | navigator |
| s146 | cm | 3 | sig_s146_objectToInspect | 0 | 0 | objectToInspect |
| s148 | cm | 3 | sig_s148 | 1 | 3 | - |
| s149 | cm | 3 | sig_s149 | 1 | 3 | window |
| s150 | cm | 3 | sig_s150_innerHeight | 1 | 3 | window.innerHeight, window.innerWidth, window.outerHeight, window.outerWidth |
| s151 | cm | 3 | sig_s151 | 0 | 0 | document |
| s152 | cm | 2 | sig_s152_hidden | 0 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s153 | cm | 3 | sig_s153_onLine | 0 | 0 | navigator.onLine |
| s154 | cm | 2 | sig_s154_brave | 3 | 26 | navigator.brave, navigator.requestMediaKeySystemAccess(), window.MediaKeys, window.MSMediaKeys |
| s155 | cm | 3 | sig_s155 | 0 | 0 | window |
| s156 | cm | 3 | sig_s156 | 1 | 4 | window, TextEncoder |
| s157 | cm | 3 | sig_s157 | 6 | 3 | window.document, window |
| s158 | cm | 2 | sig_s158_hidden | 0 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s159 | cm | 3 | sig_s159_function | 0 | 0 | window.Function, window.Object, navigator |
| s160 | cm | 2 | sig_s160_origin | 1 | 13 | window.origin, window.AudioBuffer, window.PushManager, window.ServiceWorker |
| s162 | cm | 3 | sig_s162_languages | 1 | 0 | navigator.languages |
| s163 | cm | 2 | sig_s163_applePayError | 1 | 20 | navigator.vendor.indexOf("Apple"), window.ApplePayError, window.Counter, window.CSSPrimitiveValue |
| s165 | cm | 3 | sig_s165_event | 0 | 0 | window.Event |
| s166 | cm | 3 | sig_s166 | 2 | 4 | Navigator.prototype, TextEncoder |
| s167 | cm | 1 | sig_s167_atob | 7 | 22 | atob(), window.clearTimeout(), window.setTimeout(), navigator.brave |
| s200 | cm | 3 | sig_s200_timeOrigin | 0 | 0 | performance.now(), performance.timeOrigin |
| s201 | cm | 3 | sig_s201_srChannelCount | 1 | 5 | Audio.prototype, Audio.prototype.srChannelCount, Audio.prototype.srLatency, Image.prototype |
| s202 | cm | 3 | sig_s202_intl | 1 | 4 | window.Intl, window.Intl.DateTimeFormat |
| s203 | cm | 3 | sig_s203_createElement | 0 | 0 | document.createElement("a") |
| s204 | cm | 2 | sig_s204_hidden | 0 | 10 | DOMException, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
| s205 | cm | 3 | sig_s205_url | 0 | 0 | URL |
| s206 | cm | 2 | sig_s206_style | 0 | 12 | document.documentElement.style, navigator.buildID, window.CanvasCaptureMediaStream, window.CSSMozDocumentRule |
| s207 | cm | 2 | sig_s207_fontFace | 0 | 0 | FontFace |
| s209 | cm | 3 | sig_s209_getRandomValues | 2 | 6 | window.crypto.getRandomValues(), document.createElement("canvas"), TextEncoder |
| s210 | cm | 2 | sig_s210_gpu | 3 | 9 | navigator.gpu, navigator.gpu.requestAdapter(), document.documentElement.style, navigator.buildID |
| s211 | cm | 2 | sig_s211_decodingInfo | 7 | 10 | navigator.mediaCapabilities.decodingInfo(), navigator.mediaCapabilities, TextEncoder |
| s212 | cm | 3 | sig_s212_getComputedStyle | 1 | 1 | window.getComputedStyle(), document.documentElement |
| s213 | cm | 1 | sig_s213_getCurrentPosition | 3 | 8 | navigator.geolocation.getCurrentPosition(), navigator.permissions.query, navigator.permissions.query(), navigator.permissions |
| s214 | cm | 2 | sig_s214_storageBuckets | 1 | 17 | navigator.storageBuckets, navigator.storageBuckets.delete, navigator.storageBuckets.delete(), navigator.storageBuckets.open |
| s215 | cm | 2 | sig_s215_publicKeyCredential | 2 | 4 | window.PublicKeyCredential, window.PublicKeyCredential.getClientCapabilities, window.PublicKeyCredential.getClientCapabilities(), document.removeEventListener("visibilitychange") |
| s216 | cm | 2 | sig_s216_managed | 2 | 14 | navigator.managed, navigator.managed.getManagedConfiguration, navigator.managed.getManagedConfiguration(), window.crypto.getRandomValues() |
| s217 | cm | 2 | sig_s217_getBattery | 2 | 12 | navigator.getBattery, navigator.getBattery(), DOMException, TextEncoder |
| s219 | cm | 1 | sig_s219_webkitRTCPeerConnection | 1 | 24 | window.webkitRTCPeerConnection, crypto, crypto.getRandomValues(), window.RTCPeerConnection |
| s221 | cm | 3 | sig_s221_canvas | 2 | 0 | document.createElement("canvas") |
| s222 | cm | 2 | sig_s222_keyboard | 1 | 6 | navigator.keyboard, navigator.keyboard.getLayoutMap, navigator.keyboard.getLayoutMap(), window.DOMException |
| s223 | cm | 2 | sig_s223_presentationRequest | 0 | 4 | window.PresentationRequest, document.removeEventListener("visibilitychange"), document.addEventListener("visibilitychange"), document.hidden |
Browser identity
Legacy OS strings1
Apple platform checks15
Plugin lists16
Browser vendors27
Vendor globalss28
Brave detections33
Client hintss58
PDF viewer enableds80
User agents101
User agent datas102
App versions103
Plugin counts117
Product subs123
MIME type counts135
Locale and time
Legacy language propertiess2
Date formattings9
Timezone offsetss45
Primary languages82
Language lists83
Language list rechecks162
Intl formatss202
Display and window
Screen colour depths3
Screen sizes5
Screen work areas6
Colour gamuts37
Contrast preferences38
Forced colourss39
Dynamic ranges40
Inverted colourss41
Monochrome depths42
Reduced motions43
Colour schemes44
Device pixel ratios57
Reduced transparencys91
Pixel ratio media querys142
Window metricss150
Hardware
Device memorys4
CPU threadss7
CPU classs14
Touch supports19
Heap size limits50
Batterys217
Keyboard layouts222
Graphics
Canvas renderings17
WebGPU renders70
WebGL renderer stringss74
WebGL parameterss75
WebGL draw hashs76
Canvas noise checks209
WebGPU adapters210
WebGL2 extensionss221
Audio and speech
Media and DRM
Media devicess26
EME session drifts95
iOS app probes97
Media source prototypess130
DRM key systemss154
Widevine CDM probes167
Media capabilitiess211
Presentation APIs223
Storage
Session storages10
Local storages11
IndexedDBs12
WebSQLs13
Storage quotas29
Cookies enableds32
Storage round trips55
Filesystem URL probes79
IndexedDB blob errors85
Storage removal quirks86
Origin private filesystems89
Storage bucketss214
Network and permissions
Do Not Tracks30
WebRTC candidatess94
Connection round trips104
Notification permissions106
Online flags153
Geolocation permissions213
Passkey capabilitiess215
Managed configurations216
WebRTC candidates, second passs219
Layout and text
Font enumerations20
Font metrics baselines51
Iframe box metricss84
CSS metrics batterys87
MathML metricss92
Text box metricss93
CSS support probess139
Subpixel border metricss152
Iframe layout probes158
CSS calc parsings203
Scrollbar metricss204
Form control fonts206
FontFace APIs207
Extensions and ad blocking
Automation and tampering
WebDriver flags72
Plugin prototypess118
Window close sources132
Window externals133
MIME type prototypess136
Navigator method namess145
Inspector globals146
Function bind sources148
Process globals149
Descriptor typo checks151
Native getter sourcess155
Window property sets156
Automation globalss157
Getter toggle behaviours159
Navigator prototype hashs166
JavaScript engine
Blink feature votes21
WebAssembly supports22
Chromium feature votes23
Eval source lengths24
Math precisions46
Random sequences48
Timer resolutions49
Legacy IE feature votes59
Legacy Edge feature votes60
Chromium storage votes61
WebKit feature votes62
iOS feature votes63
Gecko feature votes64
Chromium audio votes65
Modern API votes68
Float byte orders81
Service worker on prototypes98
Error stack shapes119
toSource supports120
SharedArrayBuffers144
WebKit feature rechecks163
Event trust flags165
URL parser quirkss205