Physical key check
{{ summaryValue }}

{{ summaryLine }}

Chatter suspects {{ values ? values.suspects : '—' }} Max simultaneous {{ values ? values.maximum : '—' }}

{{ summaryValue }}

Overview shows all keys. Choose a section; arrows scroll. Pressed keys appear automatically.

{{ stageState }}

Start capture, then press and release keys. Exit: Stop, hold Esc for 2 seconds, or Shift+Esc.

On-screen keyboards do not report physical keys. Connect a USB or Bluetooth keyboard.

Physical keyboard test settings
ANSI has a wide Enter key. ISO has a tall Enter and an extra key beside left Shift.
Choose the closest shape; exclude absent keys below. Counts omit Fn. Changes pause capture.
Keys absent from your board

While capture is stopped, check only keys your board physically lacks. They are excluded by you, not classified as failed. Exclusions are included in the settings URL; no typed key data is shared.

Key states, rollover steps and browser limits

Key states: untested (gray), tested (green), held now (blue), chatter suspect (amber), possibly stuck now (red, no release for at least 10 seconds). The ledger/report retain these no-release observations after Stop or focus loss. Hover a key for its physical code and state. A long intentional hold can look stuck.

Rollover check: hold A, S and D, then add J, K, L and Space. Try other combinations too. Compare the keys you physically hold with blue keys on the map; a missing key is evidence to repeat, not a hardware verdict.

{{ limitsText }}

Private by default: key data stays in this tab, with no keystrokes in network requests, storage or URLs. Reset clears the session and notes. Capture stops at 6000 events; the log shows the latest 200. {{ events.length >= 5998 ? 'Session limit reached. Export evidence, then Reset to continue.' : '' }}

Choose Win/Alt or Command/Option labels. Physical key positions stay distinct.
{{ effectiveThreshold }} ms
Leave blank for the standard 50 ms threshold. {{ ruleText }} Changing the threshold reclassifies all retained events.
ms
Model and notes stay in this tab and appear in your exported report. They are never saved or added to the URL.
Labels from your keyboard

Read your operating system’s labels when supported in a secure context. Physical codes still drive the map.

{{ layoutMapAvailable ? labelStatus : 'Layout Map API unavailable here. Physical position labels are shown.' }}

Fullscreen Keyboard Lock

Optional Chromium support can capture more browser shortcuts. It may ask for permission (Chrome 130+). OS-reserved shortcuts can still escape. Hold Esc for 2 seconds to exit; Shift+Esc or Stop also ends capture.

{{ lockStatus || (keyboardAvailable ? 'Available from this explicit action only.' : 'Keyboard Lock unavailable here; use a supporting Chromium browser in a secure context. Normal capture still works.') }}

{{ exportStatus }}

{{ reportText }}

{{ exportStatus }}

Physical keyPhysical codeCoveragePressesRepeatsSuspectsMin gap (ms)No-release countNo-release observations (ms)StateCopy
{{ keyName(row.code) }}{{ row.code }}{{ row.excluded ? 'Excluded by you' : row.mapped ? (row.tested ? 'Registered' : 'Untested') : 'Extra / outside map' }}{{ row.presses }}{{ row.repeats }}{{ row.suspects }}{{ row.min_gap_ms === null ? '—' : row.min_gap_ms }}{{ row.no_release_observations.length }}
Down {{ observation.pressed_ms }}; no release for {{ observation.duration_ms }}; observed through {{ observation.observed_ms }}; {{ observation.ended_by }}.
—
{{ row.excluded ? 'Excluded by you' : row.stuck ? 'Possibly stuck now' : row.held ? 'Held' : row.no_release_observations.length ? 'No-release observed' : row.suspects ? 'Chatter suspect' : row.tested ? 'Tested' : 'Untested' }}

{{ exportStatus }}

Time (ms)TypePhysical keyCodeKeyLocationRepeatModifiersLast-event gap (ms)FlagCopy
{{ row.time_ms }}{{ row.type }}{{ keyName(row.code) }}{{ row.code }}{{ row.key || '—' }}{{ row.loc }}{{ row.repeat }}{{ row.modifiers || '—' }}{{ row.gap_ms === null ? '—' : row.gap_ms }}{{ row.flag }}

Start capture and press physical keys to populate this log.

{{ exportStatus }}

Chart unavailable. The ledger and report retain the measurements.

{{ frequencies.length ? 'Each dot counts gaps of exactly that duration; amber dots fall below the current threshold. No gap values are rounded before grouping.' : 'Press and release the same key at least twice to collect a gap.' }} Zero-ms gaps: {{ values.gaps.filter(gap => gap === 0).length }} (not plotted on a logarithmic axis). Auto-repeat, IME and unmatched releases are excluded.

Similar tools

Typing a sentence leaves much of a keyboard unchecked. Arrow keys, both Shift keys, the number pad and combinations used in games may behave differently from the letters used in ordinary typing. A useful keyboard test checks whether each physical key registers, whether its release is observed and whether several intended keys can register together. These checks help investigate missed presses, double typing or a problem that needs a repeatable description for a seller or manufacturer.

Checking every key means working through the positions actually present on the keyboard. A compact board legitimately lacks keys found on a full-size model, while a laptop may combine functions on shared keys. An untouched or unseen position is not evidence of a fault. Registration establishes that an event arrived on that occasion; repeated light presses are more informative when a problem occurs only intermittently.

Simultaneous presses introduce three related terms that are often confused:

Ghosting
An unpressed key appears in the reported combination. In a keyboard switch matrix, unintended electrical paths can make an additional position appear pressed.
Blocking
A key that is physically pressed fails to appear in the combination. Some keyboards suppress ambiguous combinations to avoid reporting phantom keys.
Rollover
The ability to recognize overlapping keypresses. N-key rollover, or NKRO, means arbitrary simultaneous combinations can be reported, up to all the keyboard's keys.

A keyboard can recognize one large combination yet miss a different, smaller combination. Testing the keys used together in a game or shortcut therefore matters more than reaching a high count once. The phrase anti-ghosting may describe protection for only part of a keyboard. Comparing the keys actually held with the keys reported distinguishes a missing press from an unwanted extra press.

Double typing concerns successive presses of one key. Mechanical contacts can bounce between open and closed before settling, and debouncing suppresses those extra transitions. When one intended tap produces repeated registrations, switch chatter is one possible explanation. Holding a letter down normally produces operating-system auto-repeat, so a stream of repeated characters during a deliberate hold does not by itself demonstrate chatter. A key that appears held after physical release can also reflect a missed release event.

Physical position and typed character are separate. A browser distinguishes the position of a key from the character or action produced under the current language layout and modifiers. For example, the number-row 2 position can produce @ with Shift on a US layout or " with Shift on a UK layout. Left and right modifiers, and number-row and numpad digits, remain distinct positions even when their visible output looks alike.

A browser observes events that reach it after keyboard and operating-system processing. Fn, some media keys and system shortcuts may never arrive. Focus changes can interrupt release tracking as well. Browser observations can document a reproducible symptom, but they cannot alone identify a failed switch, certify NKRO or establish a hardware latency or polling-rate measurement.

How to Use This Tool:

Use a physical keyboard and match the displayed board to its actual shape before capturing events. On a phone or tablet, connect a USB or Bluetooth keyboard; an on-screen keyboard cannot establish physical-key coverage.

  1. Choose Physical layout and Keyboard size. ANSI has a wide Enter key; ISO has a tall Enter and an extra position beside left Shift. The initial selection is ANSI and Full-size.
  2. Open Keys absent from your board while capture is stopped and select only positions the keyboard physically lacks. Keep a present but unresponsive key included so it remains visible as a coverage gap.
  3. Select Start capture, then press and release the keys row by row, including both sides of modifiers and the numpad when present. Blue shows a currently held key, and registered positions remain marked after release.
    If Check threshold prevents capture, clear Chatter threshold in Advanced to restore 50 ms, or enter a whole number from 1 to 1,000 ms.
  4. Hold A, S and D, then add J, K, L and Space. Compare every physically held key with the map, and repeat with other combinations you actually use. On a narrow screen, the whole-board overview retains the complete view while the enlarged section follows delivered keys.
  5. Select Stop and inspect Defect report for registered keys, flagged observations and the separate list of unpressed positions. Holding Esc for two seconds or pressing Shift+Esc also ends capture. Moving focus away pauses capture; use Resume to continue with the retained observations.
  6. Add the keyboard model and useful reproduction notes in Advanced if they help explain the symptom. They appear in the report alongside the observed results.
  7. Copy the report or download it as TXT when the evidence is ready to share. The Per-key ledger can be copied or downloaded as CSV, or exported as DOCX, when exact physical codes and timings are needed.
    Reset starts a fresh test by clearing observations, model and notes while preserving board settings. Export any evidence you want to keep before resetting.

Interpreting Results:

The summary describes the retained observations. A complete map and a clean summary support only what was observed during that session.

  • All mapped keys registered means every selected, non-excluded position produced qualifying evidence. It does not establish that every combination works or that an intermittent fault is absent. With Coverage incomplete, follow the unpressed-key checklist and recheck the physical board selection.
  • No keys selected means all mapped positions have been excluded. Restore the positions that are physically present before treating coverage as meaningful.
  • Chatter suspects counts flagged presses, not distinct keys. Find the affected positions in the ledger and repeat slow, separate taps with complete releases. Deliberately rapid tapping can produce the same flag.
  • Review no-release observations means one or more long intervals lacked a delivered release. An intentional hold can qualify. Compare the recorded interval with what you were doing, then repeat a short press and release while the capture area stays focused.
  • Max simultaneous includes modifiers. Compare the reported combination with the keys you actually held. A high number does not certify NKRO, and a missing or extra key needs a repeatable combination before it becomes useful evidence.

With at least one position selected, chatter takes summary priority over no-release observations. Read both flagged-observation groups in the report. The red Possibly stuck now indication clears when live holds are cleared, while qualifying no-release history remains in the report and ledger.

The Release gaps chart counts paired release-to-press intervals of exactly the same duration. Its millisecond axis is logarithmic, so equal horizontal distances represent ratios rather than equal time differences. Amber points lie below the selected threshold. Zero-ms gaps are counted separately because a logarithmic axis cannot display zero. The ledger's Min gap (ms) uses these paired intervals; the event log's Last-event gap (ms) instead measures time since the previous event for that same physical code, which may be a press, release or repeat.

Technical Details:

Physical-key analysis follows press and release events for each position. Character output is recorded for context, but changing a legend or language layout does not merge left and right modifiers or the number row with the numpad. Coverage, rapid re-presses and simultaneous holds use different parts of that event sequence.

Formula Core

Coverage is the percentage of selected physical positions that have registered. Exclusions reduce the set being checked.

C = 100 × R M−E

C is coverage in percent, R is the number of registered, non-excluded mapped positions, M is the selected map's key count, and E is the number of exclusions within that map. The formula applies when M exceeds E. If no positions remain, coverage is reported as 0 of 0 and 0%, with No keys selected. The report rounds the percentage to one decimal place.

A qualifying non-repeat press or a delivered release can register a position. A release without an earlier recorded press therefore counts as registration without adding a press or a held key. Auto-repeat alone, input-method composition and empty or unidentified physical codes do not establish coverage. Events outside the selected map remain available as extra observations but do not increase the numerator.

These counts describe the available browser-key profiles. Size labels do not guarantee that every manufacturer's board has the same inventory, and Fn is omitted from every profile.

Physical positions in each profile before exclusions
Keyboard size ANSI keys ISO keys
Full-size104105
Tenkeyless8788
75% / laptop8182
65%6768
60% compact6162

The 75% and 65% profiles omit right Meta and Menu. The 65% profile also omits the function row and End; both 65% and 60% place Escape at the usual backquote position. Exclusions change coverage only. A delivered event from an excluded or outside-map key can still contribute to chatter, no-release history and simultaneous-key observations.

Chatter uses the interval after release

A chatter sample requires a recorded press, its matching release, and another non-repeat press of the same physical key. The relevant gap begins at the release, so the time spent holding the previous press is not part of it.

Two presses of the same physical key on a timeline, with the interval from the first release to the next press highlighted.
Timing schematic for two presses of the same physical key.

The paired release-to-press gap is calculated in milliseconds.

g= tnext press − tpaired release

A sample is flagged when its nonnegative gap g is strictly less than threshold T. The default T is 50 ms. For example, a release at 1,000 ms followed by a new press at 1,049 ms produces a 49 ms gap and one suspect; a new press at 1,050 ms produces a 50 ms gap and no suspect. These are illustrative event timestamps, not measurements of a particular keyboard.

Operating-system repeat events increase the separate repeat count. A second press event without an intervening release is recorded as down without release, not as another press or a chatter sample. Composition events from an input method editor, abbreviated IME, and unidentified codes are excluded from these measurements. An unmatched release does not supply a paired-release baseline.

The threshold accepts whole numbers from 1 to 1,000 ms. A blank override restores 50 ms; a nonblank invalid value requires correction. Raising the threshold can flag more retained gaps, and lowering it can flag fewer. This changes the classification of observations without filtering or repairing keyboard input. The threshold is a screening choice, not a switch-failure specification.

No-release intervals

A no-release duration runs from an accepted press to its matching release, a stop or focus reset, a Meta-release reset, or the current observation time while it remains held.

d= tobservation end − tpress

The duration d is in milliseconds. An interval qualifies once it reaches 10,000 ms, or 10 seconds. One observation is retained per qualifying interval, including its start, duration, observation end and reason tracking ended. A press at 0 ms closed by a stop at 10,001 ms retains a 10,001 ms observation; it does not keep growing after capture has stopped.

The two flags treat their boundaries differently:

Chatter and no-release classification boundaries
Observation Boundary (ms) Below boundary Exactly at boundary Above boundary
Paired chatter gap at the default threshold50Flag the new pressDo not flagDo not flag
No-release interval10,000Do not record an observationRecord an observationRecord an observation

Caps Lock is exempt from no-release classification on detected Apple platforms, accommodating macOS cases where its release event is omitted. The Mac modifier-label preference does not control that exemption. Clearing live holds preserves completed qualifying intervals and removes the release baselines used for chatter, so gaps are not joined across those interruptions. A delivered Meta release, meaning a Windows or Command key release, also clears the other live holds and release baselines.

Observed rollover and timing limits

The simultaneous-key maximum is the largest set of distinct physical codes held according to the delivered events. Repeats do not enlarge it. The first combination reaching that maximum is retained, and the greatest ordinary-key count is tracked separately. Ordinary keys here exclude left and right Shift, Control, Alt and Meta; that separate maximum need not occur at the same moment as the overall maximum.

USB Human Interface Device, or HID, version 1.11 defines a keyboard boot report with six ordinary-key slots and separate modifier bits. Other report formats can differ. A repeated ceiling at six ordinary keys can therefore suggest that reporting limit, but a browser count cannot identify the active protocol. Repeated blocking at two or three ordinary keys can suggest matrix restrictions; browser or operating-system interception remains another explanation.

Gap comparisons and frequency grouping use the full timestamps supplied by the browser, without rounding first. A zero-ms paired gap qualifies at every allowed chatter threshold, although it is absent from the positive-gap chart data. Preserving timestamp precision does not make these electrical switch measurements. The observations do not measure contact-bounce duration, actuation force, scan rate or end-to-end input latency.

Browser Limits and Privacy:

Capture operates only while the test is running and its keyboard area has focus. Normal capture requests no keyboard-lock permission. Observed keys, character values, model and notes are processed in this tab without being sent as test data or saved in browser storage.

  • Fn and some manufacturer or media keys may be handled before they reach a web page. System combinations such as Alt+Tab, Command+Tab or Ctrl+Alt+Delete can be intercepted. During focused capture, the page blocks default actions where the browser allows it, including Tab navigation, Space scrolling and Save, Print, Find and Reload shortcuts. Other shortcuts can still open or close tabs, so avoid testing them with unsaved work.
  • PrintScreen may deliver only a release event, which can still establish registration. On macOS, Caps Lock can omit its release, and keys released while Command is held can also lose release events. These delivery quirks can make a key look held after you have let go.
  • Fullscreen Keyboard Lock is an explicit optional action in Advanced, available only in a supporting Chromium browser in a secure context. It enters fullscreen and requests the lock; Chrome 130 and later require permission. It can expose more shortcuts but remains subject to operating-system restrictions. A denied or unavailable lock leaves normal capture usable.
  • Use my key labels optionally reads the current keyboard layout when the browser supports it in a secure context. If access fails, physical-position labels remain. This affects labels, not coverage or physical identity.
  • Changing the physical layout, keyboard size, modifier-label preference or chatter threshold pauses running capture and recalculates the retained observations. A settings URL can carry the selected layout, size, modifier labels, exclusions and an explicit threshold override. It does not carry observed events, character values, model or notes. Clearing the threshold override removes it from the URL.
  • The session retains up to 6,000 events, including releases, repeats and capture resets. The Event log and its exports contain only the latest 200 rows; summary counts and the ledger use the full retained session. Export needed evidence before resetting or reloading, because sessions are not saved for later visits.
  • Local event processing does not mean the page makes no network requests; the chart may load supporting resources. Copied or downloaded evidence can contain typed character values, and the report includes browser/platform details plus any model and notes you supplied. Check that content before sharing it.

Worked Examples:

A compact board with one absent position

Suppose an ANSI 75% keyboard physically lacks right Control. Selecting 75% / laptop provides 81 positions, and excluding that absent position leaves 80. If 79 of those positions register, the report shows 98.8% coverage after rounding 98.75%. The remaining position still needs checking. Excluding a present key merely because it did not respond would conceal that gap rather than resolve it.

Eight held keys with only six ordinary keys

If A, S, D, J, K and L plus both Shift keys are delivered and remain held, Max simultaneous reaches eight while the ordinary-key count reaches six. That observation is compatible with six ordinary-key slots and separate modifiers. Add another ordinary key and try different combinations, recording what is physically held and what appears. Even a successful larger combination does not establish that every combination works.