Signal · signalsVersion 14

any_pointer

The pointing devices present, from the any-pointer media query: fine, coarse, fine,coarse (a touch laptop) or none. Reported, not in either id.

any_pointer at a glance (from the library code, signalsVersion 14)
Component nameany_pointer
In the visitorIdno (reported, kept out of both ids)
structuredId groupnone
Hashingplain value; a digest only when longer than 128 characters or not printable ASCII
Excluded underno browser class
Inner timeout1000 ms
Added insignalsVersion 11
Collector revision1 (reported as revision with every result)
In plain words

A device can have more than one way to point: a laptop can have a trackpad and a touch screen. The any-pointer media query asks about all of them. WhiskerJS records every kind present: fine, coarse, both, or none.

What it reads

The CSS any-pointer media feature through window.matchMedia(): the queries (any-pointer: fine), (any-pointer: coarse) and, when neither matches, (any-pointer: none).

How the technique works

  1. Without matchMedia the component is unavailable / no_api.
  2. Each of fine and coarse that matches is kept, in that order, and the kept values are joined with a comma: fine, coarse or fine,coarse.
  3. If neither matches, (any-pointer: none) gives none; if that does not match either, unavailable / no_match.

Unlike the other media query components, it does not stop at the first match, because several input devices can be present at once.

Why it helps

fine,coarse is typical of touch-screen laptops and of tablets with a trackpad cover, a smaller group than plain desktops or phones. On your server it adds context to touch_support and the user agent. The media_query_mismatch integrity flag uses the same query to spot a coarse pointer without any touch points.

Stability

It changes when an input device is attached or removed (a mouse plugged into a tablet, a keyboard cover with a trackpad). That is why it is reported outside both ids. Added in library PR #29 (2026-10-27) at signalsVersion 11: it is outside both ids, so adding it changed no id and needed no version bump.

Browser support and what blocks it

Every current engine answers the query. In the hosted CI runs of PR #29 every browser (Chromium 153, Chrome 155, Firefox with and without its privacy settings, WebKit; headless on Linux) reported fine in every collection. No browser class excludes it.

Privacy

It says which kinds of input devices are attached, nothing about how they are used. No permission, no prompt, no events. Leave it out with collect({ exclude: ['any_pointer'] }) if you do not need it; no id changes.

How WhiskerJS handles noise and failures

Status ruleId When
ok fine, coarse, fine,coarse or none
unavailable no_api no matchMedia
unavailable no_match no query matched
blocked threw, security_error matchMedia throws
excluded caller_excluded you excluded it
timed_out timeout, aborted budget or abort

Example value

"any_pointer": { "status": "ok", "value": "fine,coarse", "hashed": false, "durationMs": 0.1, "revision": 1 }

Questions and answers

Why can any_pointer report two values?

any-pointer describes every input device, not only the main one. A laptop with a touch screen has a trackpad (fine) and a touch screen (coarse), so both match and WhiskerJS reports fine,coarse.

How is it different from pointer?

pointer describes only the primary device. any_pointer describes all of them, so a touch laptop reports pointer fine and any_pointer fine,coarse.