How Chatter Detection Works
A keyboard that types double letters almost always has one bouncing switch. Mechanical switches close a physical contact, and a worn or dirty contact does not close cleanly — it makes and breaks several times within a few milliseconds. The keyboard's controller is supposed to filter that out with a debounce window, typically five milliseconds. When a switch degrades far enough that its bounce outlasts the debounce window, the controller reports two presses for one push. That is chatter.
This page finds it by timing. Every keydown is stamped with a high-resolution timestamp, and for each key we measure the gap to that same key's previous press. Human limits give us a clean cutoff: the fastest deliberate double-tap of one finger lands around 80 to 100 milliseconds, and even a trained drum-roll with two fingers on one key rarely goes below 50. So a gap of 30 milliseconds or less on the same key is not something you did. It is the hardware.
Type for at least a minute of normal text before you trust the result. Chatter is intermittent by nature — a switch that fails one press in fifty will not show up in a dozen keystrokes, and a short sample can just as easily produce a false clean bill of health as a false alarm. The counter tells you when there is enough data.
The threshold is adjustable because different situations need different strictness. 10ms is the conservative setting — a hit at that gap is unambiguous hardware failure with no plausible human explanation. 30ms is the default and the right general-purpose choice. 50ms catches marginal switches that are starting to go, at the cost of occasionally flagging a genuine fast double-tap, so read those hits alongside what you were actually typing.
Two honest limitations. Auto-repeat from a held key is excluded — the browser marks those events and we skip them — so holding a key down will never register as chatter, correctly. And browsers deliberately coarsen their high-resolution timestamps to make fingerprinting harder: Firefox rounds to whole milliseconds without cross-origin isolation, Chrome to roughly a tenth of one. That is fine for a 30-millisecond threshold and meaningless below about two, so do not read significance into a reported gap of 1ms versus 2ms.
If the report comes back clean but your keyboard still misbehaves, the fault is probably elsewhere. Keys that fire continuously belong in the stuck key test; keys that drop out under load belong in the ghosting test; and a general sweep for dead keys is what the full keyboard test is for.