See which keys landed, which are missing, and which were held together
This keyboard tester draws the signals your browser receives when you press and release keys onto a key map. A key you are holding lights up in the accent color, and every key that has arrived at least once keeps a darker outline. Keep pressing until Keys checked reads 104 / 104 and whatever is left is listed as keys that never arrived. Each press also shows the key's key (what it typed), its code (where it sits on the board) and how long it was held.
Hold several keys at once and the tester keeps the current and maximum number held together, plus the combination at the peak. A key that registers again within 100 ms of being released is marked on the waveform, and Chatter check asks you to press a suspect key slowly 20 times and counts the extra presses. You can switch between Korean, English US, UK and Spanish ISO, Japanese JIS and Mac layouts. Everything is processed inside this browser tab; nothing is saved or sent.
When it is worth testing a keyboard
A key that sometimes does not register, or types twice, is easy to overlook while writing and tends to show up in the middle of a game or a deadline. These are the usual reasons to check every key in one pass.
- A new or used keyboard just arrived: press every key once while you can still return or exchange it. For a second-hand sale, fill the map in front of the seller.
- A game combo gets dropped: if jumping fails when you hold W, A, Shift and Space together, use Multi-key to see whether the board sends that combination at once.
- Letters appear twice: if one press types "ee" or "ll", you may have chatter (double input). The slow-press test helps separate a worn switch from auto-repeat or a software problem.
- After cleaning a laptop or swapping keycaps: check that the refitted spot registers, and the rarely used keys too, such as the numpad and arrow keys.
- A shortcut or layout behaves oddly: seeing which code a key sends, and whether the operating system grabs it first, shows where to fix the setting.
The four tests
- Key check: click Start test or the key map, then press every key once. The panel lists keys not pressed yet, grouped as function, characters, modifiers, navigation and numpad, and shows the last key's key, code, hold time and shortest re-press.
- Multi-key: hold several keys down. The tester keeps the current and maximum count and the keys at the peak, and ticks off five game combinations when they all arrive together, such as W + A + Shift + Space.
- Chatter check: press the suspect key slowly, about once per second, 20 times. The first key you press becomes the test key, and a press that registers within 100 ms of release is counted separately as an extra press.
- Free input: type letters, accents, emoji or symbols in the box. Along with the character count, you get the signals from the input method (IME) in order: composition start, update and end.
Keys are counted only while the test area has focus. Tab leaves it as usual and Esc pauses. Inside the area, keys such as Space, the arrows and F5 are blocked from scrolling or reloading the page, but shortcuts the browser or operating system takes first, like closing a window, cannot be blocked.
Reading the key map, and key counts by layout
A key on the map has four looks. A key that never arrived is paper-colored; one that has arrived has a dark outline; a key you are holding is filled with the accent color; and a key that was pressed again within 100 ms of release has an accent outline. Keys pressed two or more times show the count in the lower right corner. Clicking a key on the map shows its record, but a click does not count as checking it.
| Layout | With numpad | Without numpad | What differs |
|---|---|---|---|
| English US (Windows) | 104 | 87 | One-row Enter, long left Shift (ANSI) |
| UK and Spanish ISO | 105 | 88 | Two-row Enter, one extra key beside left Shift (IntlBackslash), AltGr on the right |
| Korean (Windows) | 104 | 87 | Right Alt position is Han/Eng, right Ctrl position is Hanja |
| Japanese JIS | 109 | 92 | ¥ (IntlYen), ろ (IntlRo), and the 無変換, 変換 and かな keys |
| Mac (US) | 102 | 85 | control, option, command, F13 to F15; fn sends no signal |
On a laptop or tenkeyless board with no numpad, turn off the Numpad switch so the Keys checked total matches your keyboard. Laptops often put Home, End and the arrows behind Fn, so if some keys stay unlit, try them with Fn held.
code is the position, key is what it typed
The browser sends two values with every key press. The W3C specification defines code as information that identifies the physical key the user pressed. So code stays the same at the same spot whatever the input language, while key changes with the input language and Shift. This tool finds a key's place on the map by code.
| Key pressed | code | key examples |
|---|---|---|
| The A position | KeyA | a, A; Process while an IME is composing |
| Left and right Shift | ShiftLeft · ShiftRight | Shift for both |
| Main Enter · numpad Enter | Enter · NumpadEnter | Enter for both |
| Digit row 1 · numpad 1 | Digit1 · Numpad1 | 1; with Num Lock off the numpad key gives End |
| Extra key beside left Shift (UK ISO) | IntlBackslash | Depends on the layout (\ or | on UK) |
| Korean Han/Eng · Hanja | Lang1 · Lang2 (or the right Alt and Ctrl positions) | HangulMode · HanjaMode |
| Japanese ¥ · ろ · 変換 | IntlYen · IntlRo · Convert | Depends on the layout |
| Fn | Usually none | The W3C describes it as typically a hardware key that does not generate a separate code |
Choosing a layout only changes the names printed on the map. It does not change your computer's input language or keyboard settings. If you use software that remaps keys, the code that arrives can differ from the legend on the keycap. The Korean layout is there for Windows keyboards with Han/Eng and Hanja keys; if you do not use one, you can ignore it.
Keys held at once, and the 6-key limit
The simultaneous count is the number of different keys currently reported as down. The maximum is the highest that number reached since the last reset, and the tester also keeps which keys were down at that moment. Auto-repeat from holding a key is not counted as a new press.
The default USB keyboard report (the boot protocol) is 8 bytes: one byte for modifiers and six slots for other keys. The USB HID specification says the limit is six non-modifier keys when using that descriptor. So if the count of regular keys, with Shift, Ctrl, Alt and the Windows key set aside, never goes past six, the keyboard may be connected in that mode. Modifiers are counted separately, so the total can exceed six. Check the manufacturer's manual for whether the board supports NKRO (every key at once) and how to turn it on.
A high maximum does not mean every combination works. It is only what reached the browser for the combinations you tried. Checking the combinations you actually use, as the Combinations to try list does, tells you more than one number.
Ghosting and a dropped key are different things
Ghosting is when pressing several keys makes the computer receive a key you did not press. The opposite case, a key you did press that never arrives, is a dropped key. The tester shows only what reached the browser, so compare the keys lit on the map with the keys you really held to tell the two apart.
"Just because you find some combination of 6 keys that reports correctly does not necessarily mean that every combination of 6 works. In fact, the most straightforward keyboard design has thousands of 3-key combinations that do not work!"Microsoft Applied Sciences, Anti-Ghosting Demo · checked 2026-10-23
In Multi-key, hold three or four keys and look for a key lighting up that you are not pressing. That is ghosting; a held key that stays dark is a dropped key. Repeat with the same keys pressed in another order, and leave out shortcuts the operating system takes first, such as switching windows.
Chatter (double input): press slowly, 20 times
When a mechanical switch closes or opens, its contacts can touch and part several times in a very short time. Keyboard firmware ignores that flutter for a set time, called debouncing; the default in QMK, a widely used keyboard firmware, is 5 ms. If a switch is worn or dirty and the flutter lasts longer than the debounce time, one press can arrive twice. That is chatter.
This tool measures from the moment a key is released to the moment the same key is pressed again. A gap of 100 ms or less is flagged as a quick re-press. Fast tapping can legitimately produce gaps that short, so the verdict is made under the Chatter check condition of one slow press at a time. At about one press per second the gap after release is normally several hundred milliseconds, so a press that registers far sooner was probably not yours.
| Situation | Re-press gap | How it is counted |
|---|---|---|
| A slow press, about once a second | 820 ms | 1 intended press |
| Contacts flutter on release and register again | 6 ms | Extra press (attached to the previous press) |
| Boundary | 100 ms | Extra press (boundary included) |
| Just above the boundary | 101 ms | Intended press |
If none of the 20 presses produces an extra press, no double input showed up in this test. If extras keep appearing, repeat with the same key and then try other keys. A problem on only one key points to that switch. If two intended presses come less than 0.25 seconds apart, the panel tells you to slow down.
Dead keys and input methods: when key is not the letter
Not every key press types a letter right away. On layouts with accent keys, a dead key waits for the next letter. The W3C key values list "Dead" for a dead key combining key, so the key column can read Dead instead of the accent you see on the keycap. An input method (IME), used for accents, emoji, Chinese, Japanese and many other scripts, may collect several key presses into one character. The W3C UI Events specification says that if an IME is processing key input, a keydown returns 229. So in Key check, a press made while an IME is active can show Process, while code still names the physical key and the same spot lights up on the map.
Free input logs, in order, the keydown details (key, code, isComposing, 229), the composition events (compositionstart, compositionupdate, compositionend) and the text that actually went in (input). Type an accented letter, an emoji from your system picker or a word in another script, and compare the log with another app when a character arrives late, doubles or goes missing. Which events a dead key produces can vary by browser and operating system, so use this log as what your own browser sent.
Command, Option and Fn on a Mac
With the Mac layout the map is labeled control, option and command. The browser reports command as Meta and option as an Alt code, so the names and the codes are not the same words. On macOS, a key pressed while command is held may never send its release, which is reported as a Chromium issue. So that nothing stays lit, this tool treats every other key as released when command is released.
The fn key and the brightness, volume and media keys are often handled inside the keyboard or the operating system, so no signal may reach the page. On the Mac map the fn position is dotted and left out of Keys checked.
Common ways to misread the result
- An unlit key means it is broken: Fn, media keys and operating system shortcuts may never send a signal. Check another app and another USB port first.
- Reading fast tapping as chatter: when you tap quickly, a re-press gap under 100 ms is natural. Judge with the slow Chatter check.
- Reading auto-repeat as double input: holding a key makes the system repeat the character. This tool does not count repeat signals as presses.
- Treating the maximum as a product spec: it is an observation for the combinations you tried. Do not compare a count that includes modifiers with a maker's "n-key rollover" claim.
- Counting missing keys with the wrong layout: if the numpad is switched on for a board without one, 17 keys will stay unpressed. Match the layout and the numpad first.
Where your input is processed
Key signals and anything typed in Free input are processed only in this browser; nothing is saved or sent to a server. Refreshing or closing the page erases the log, so use Copy log to keep a result. The copied text holds the layout, keys checked, keys not pressed, maximum held at once, quick re-presses and the chatter result, but never what you typed in Free input. Still, do not type passwords or other sensitive text there.
Limits
- It sees only the signals that reach the browser. It does not measure what happens inside the keyboard, input latency (the time from pressing a key to the signal arriving) or polling rate.
- The maximum held and ghosting are results for the combinations you tried, not a check of every combination.
- Quick re-presses and extra presses are observations; the tool does not diagnose a faulty switch by itself.
- Shortcuts taken first by the operating system or browser, Fn and media keys may not show. On macOS, release signals can go missing for command combinations.
- On-screen phone keyboards do not report physical key positions or simultaneous keys properly. A physical keyboard connected to a tablet depends on the browser.
As of The W3C UI Events specifications, USB HID 1.11, the QMK documentation and the Chromium issue were checked on 2026-10-23.
Sources
- 01W3C: UI Events KeyboardEvent code Valuescode identifies the physical key; Lang1, Lang2 (Han/Eng, Hanja), IntlYen, IntlRo, Convert, IntlBackslash, Fn
- 02W3C: UI EventsA keydown handled by an IME returns 229; isComposing
- 03MDN: KeyboardEvent.repeatrepeat is true while a held key auto-repeats
- 04USB-IF: Device Class Definition for HID 1.11Appendix B boot keyboard report: one modifier byte and six key codes, a limit of six non-modifier keys
- 05QMK Firmware: Debounce APIDefault debounce time of 5 ms, explanation of contact bounce
- 06Microsoft Applied Sciences: Anti-Ghosting DemoOne working 6-key combination does not mean all combinations work; many 3-key combinations fail
- 07Chromium issue 40880986Missing keyup for keys pressed with Command on macOS
- 08MDN: KeyboardEvent.isComposingTells whether a key event happened between compositionstart and compositionend
- 09W3C: UI Events KeyboardEvent key Values"Dead" for a dead key combining key, "Process" for the input method Process key
Frequently asked questions
How do I test my keyboard?
Click the key map or Start test so the test area has focus, then press keys one by one. Each key that arrives keeps its color on the map and Keys checked at the top goes up, for example to 104 / 104. When the list of keys not pressed yet is empty, every key on the map has been checked. First set the layout and the numpad switch to match your keyboard.
A key does not light up. Is it broken?
Not necessarily. The Fn key usually sends no signal of its own, and media keys such as brightness and volume, plus some shortcuts, are taken by the operating system first. Press the same key in another app such as a text editor, and try another USB port or computer. Suspect the key itself only if it fails everywhere.
Why does the count stop at 6 keys held together?
The default USB keyboard report (the boot protocol) carries one byte of modifiers and six regular keys. If regular keys, without Shift, Ctrl, Alt and the Windows key, stop at six, the keyboard may be connected in that mode. If your keyboard has an NKRO setting, see the manufacturer's manual. Holding more modifiers can push the total above six.
How do I check for ghosting?
Ghosting is when pressing several keys makes a key you did not press register. In Multi-key, hold three or four keys and watch whether a key you are not pressing lights up on the map. A held key that stays dark is a dropped key instead. Microsoft notes that even the most straightforward keyboard design has thousands of 3-key combinations that do not work.
How do I check for chatter (double input)?
Choose Chatter check and press the suspect key slowly, about once per second, 20 times. A press that registers within 100 ms of release is counted separately as an extra press. If extra presses keep showing up in the 20, a worn or dirty switch contact is a possible cause, but this result alone does not confirm a fault.
Why does a key show as Process or Dead instead of a letter?
While an input method (IME) is composing, the browser may report key as Process and keyCode as 229. A dead key, such as an accent that waits for the next letter, can report key as Dead. Both are normal. The code value still names the physical key, so the same spot lights up on the map. Free input logs these signals in order.
On a Mac, keys shut off early when I hold Command.
On macOS, a key pressed while Command is held may never send its release to the page. So that nothing stays lit, this tool treats every other key as released when you release Command. For Command combinations, the held count can therefore drop sooner than it really did.
Is what I type saved or sent anywhere?
No. Key signals and anything typed in Free input are processed only in this browser; nothing is saved or sent to a server. Refreshing the page clears the log, so use Copy log to keep a result. Even so, avoid typing passwords or other sensitive text.