# Keyboard Tester

> Test every key in your browser: a visual keyboard tracks presses, shows key/code details, measures N-key rollover and detects key chatter. Free online.

- URL: https://bytescope.dev/en/keyboard-test/
- Locale: en · Also: [ja](https://bytescope.dev/ja/keyboard-test.md) · [zh-Hant](https://bytescope.dev/zh-Hant/keyboard-test.md)
- Runs: Everything runs locally in your browser — nothing is uploaded.
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

Press any key and it lights up on a visual keyboard (ANSI, ISO or JIS layout; 60%, TKL or full-size), then stays shaded so you can walk the whole board key by key — the exact workflow for checking a new keyboard or verifying a used one. Every press also logs the full event detail — `event.key`, `event.code`, legacy keyCode, location, repeat — in a copyable mono log, with a live modifier bar for Ctrl/Shift/Alt/Meta and the CapsLock/NumLock lock states.

Two checks go beyond what most testers offer. Rollover: hold down as many keys as you can and the tool reports how many register simultaneously (your keyboard's real N-key rollover, current and session-max). Chatter: when one physical press registers as two — the classic worn mechanical switch fault — the tool flags any key whose release-to-press gap is under 30 ms, marks it magenta and counts occurrences, so an intermittently double-typing switch shows up with evidence.

The page is honest about what a browser can't see: OS-reserved shortcuts (Cmd+Tab, some Win-key combos) and Fn-layer keys never reach the page, and they're listed as such rather than shown as failures. A full-screen mode reclaims some combos the OS would otherwise swallow, and keys that would scroll or navigate the page are intercepted while testing.

A typing-speed & rhythm mode has you type one short sample sentence and reports WPM alongside the mean, median and standard deviation of the gap between your keystrokes, plus a small histogram of that rhythm — a better feel for a switch or keycap profile than a WPM number alone. Where Chrome/Edge support it, a toggle loads the Keyboard Layout API and overlays the actual character each physical key produces on your OS layout directly on the visual keyboard — genuinely useful once you're off a US layout, where the default QWERTY diagram is misleading; unsupported browsers are told so plainly instead of shown a broken button. And a full stress-test report turns a whole test session into one copyable summary: completion percentage for every key on the selected layout, the exact list of keys you haven't pressed yet, every chatter event detected, and the highest simultaneous-key count you reached — a paste-ready writeup for a marketplace listing or a warranty claim.

## Limits

Does not remap keys or test keyboards the operating system has not recognised; it shows what key events the browser receives.

## Machine output

Copy JSON copies an envelope `{ tool, url, generatedAt, userAgentHint, result }`. `tool` is `"keyboard-test"`; `result` is a de-duplicated, sorted set of `code` values. `key` values, composed strings, press-order lists, timestamp sequences, and per-code counts are omitted.

- `layoutVariant` (string | null) — `"ansi"` | `"iso"` | `"jis"`. `null` = layout variant not set.
- `layoutSize` (string | null) — `"60"` | `"tkl"` | `"full"`. `null` = layout size not set.
- `detectedCodes` (string[]) — Detected `code` values, de-duplicated and sorted lexicographically.
- `notPressedCodes` (string[]) — Layout codes that never produced a keydown, sorted. This is "not pressed yet", not "broken".
- `unresponsiveCodes` (string[] | null) — Codes judged unresponsive (pressed, no event). `null` = not judged (this page has no dead-key confirmation). Never filled from `notPressedCodes`.
- `chatterCodes` (string[]) — Codes that tripped chatter detection, sorted. Counts are omitted.
- `sessionMaxHeld` (number) — Peak concurrent held keys. `0` = none held this session.
- `lastEventAtMs` (number | null) — Timestamp of the most recent captured event. `null` = no event this session.

## FAQ

### A key doesn't light up — is it broken?

First check whether it's on the not-testable list (OS-reserved combos, Fn layer, some media keys) — the browser never receives those, and the page lists them explicitly. If a normal letter/number key shows nothing in the event log either, and the same key fails in another app, the switch or membrane is genuinely dead.

### What is key chatter and how does the detector work?

Chatter is one physical keypress registering as multiple presses — a worn or dirty mechanical switch bouncing electrically. The detector flags any key whose keyup→keydown gap is under 30 ms, far faster than a human double-tap. If a key accumulates chatter events during normal typing, that switch needs cleaning or replacing.

### How many keys should register at once?

Office keyboards commonly support 6-key rollover (6KRO) plus modifiers; gaming keyboards advertise NKRO — every key simultaneously. Hold down as many keys as you can across the board: the max-simultaneous count is your real rollover, and if it caps at 6, that's 6KRO hardware (or a USB mode limit some boards let you switch).

### Why don't Cmd+Tab / Win+L / Fn keys show up?

The operating system consumes those shortcuts before the browser sees any event — it's a security/UX boundary, not a keyboard fault. Full-screen mode recovers some combos, and Fn-layer behavior lives entirely inside the keyboard's own controller, invisible to any software test.

### What does the typing-speed mode actually measure?

Standard gross WPM — (characters typed / 5) divided by minutes elapsed — plus the rhythm behind that number: the mean, median and standard deviation of the gap between consecutive keystrokes, and a small histogram of that distribution. It's honest about its own limits too: timing is measured as delivered to the browser tab, so it includes any OS/browser input-lag jitter, not just your fingers, and held-down auto-repeat is never counted as a fresh keystroke.

### Why show my keyboard's real layout at all — isn't the diagram already right?

The visual keyboard is drawn as a physical reference (US ANSI/ISO/JIS), but what each key actually types depends on your OS keyboard layout setting — on AZERTY, Dvorak, or a non-Latin layout, that can be very different from the printed diagram. The "Show my layout" toggle calls the Keyboard Layout API to overlay the real character per key. It's Chromium-only (Chrome/Edge); other browsers get an honest "not available" label instead of a silently wrong overlay.

### What's in the full stress-test report?

One copyable plain-text summary: how many of the current layout's keys you've pressed and what percentage that is, the exact codes of any keys you haven't tested yet, every chatter event detected (which keys, how many times), and the highest number of keys you held down simultaneously (your observed rollover). It's built for pasting into a marketplace listing, a warranty claim, or a forum post about a specific unit.
