Keyboard Tester
Press every key and watch it light up, measure how many keys register at once to check rollover, and read lock state and the physical key code the browser reports.
Capture paused
Click Start capture, then press keys on the physical keyboard.
Capture is paused. Key presses are ignored until you start capture.
Last key
None
Physical code
None
Pressed now
0
Keys tested
0
Max at once
0
Hold several keys together
System Labels
Keyboard Size
Active Keys
No keys are currently held.
Event Log
Press a key after starting capture.
The code is the key, the character is not
A keyboard event carries two different identities for the key you pressed, and confusing them is the single most common reason a tester looks wrong. KeyboardEvent.code names the physical position on the board. Press the key one row down and to the left of your right pinky and you get Semicolon, regardless of what is printed on the cap or which language your system is set to. KeyboardEvent.key is the character that position produces after the layout is applied, so the same physical key can yield a semicolon, or something else entirely on a non-US layout.
The on-screen keyboard here follows the physical code, which is why it stays accurate on AZERTY, QWERTZ, Dvorak, or a keyboard you have remapped. If you have swapped Caps Lock to Control in your operating system, the position of the physical Caps Lock key still lights up as CapsLock, while the event log shows the character it now produces. That split is deliberate: a hardware test wants to know the switch under a specific cap works, not what your software decided that switch should type.
When you are checking whether a specific key on a laptop has died, watch the virtual keyboard. When you are debugging why a shortcut in an application does not fire, watch the event log, because that is where the character, the modifiers, and the auto-repeat flag live.
Rollover and ghosting: the test most keyboard checkers skip
Pressing one key at a time proves each switch is alive. It does not prove the keyboard can report the keys you actually use together while typing fast or gaming. That is rollover, and the Max at once counter is here to measure it. It records the largest number of keys the browser saw held simultaneously, so you can hold a real chord and compare the count against the number of fingers you have down.
Inexpensive membrane keyboards wire their switches into a shared grid. Because several keys sit on the same electrical lines, the controller can only be sure of a few presses at once. Push a fourth or fifth key in the wrong combination and one of two things happens: a press is dropped, so your count stalls below the number of keys down, or a key you never touched appears in the event log, which is ghosting. Either behaviour is why a budget keyboard feels like it misses inputs during fast typing or when you hold a movement key and press two more.
Try a diagonal-plus-action chord such as W, A, Shift, and Space, then add a letter. A keyboard advertised with n-key rollover should keep counting well past six. One that plateaus at two or three under the same fingers has hit its hardware limit, and no driver update changes that. This is the measurement to run before you trust a keyboard for gaming or for shortcut-heavy work, and it is the one a plain key-by-key check cannot give you.
Stuck key, or just lost focus?
A key held for more than five seconds is flagged, because a real stuck switch keeps sending its down state and never releases. But there is an innocent cause that looks identical: if you Alt+Tab or Command+Tab away while a key is down, the browser stops delivering the release event, and the key would hang forever. This tester clears held keys the moment the window loses focus and tells you it did, so that case is not miscounted. Trust the stuck-key warning only when the page kept focus the whole time.
Keys the browser never sees
Not every key produces a web event. Fn is resolved inside the keyboard controller, so pressing it alone usually sends nothing at all; it changes what the other keys report instead. Media, brightness, and volume keys are frequently swallowed by the operating system before a page can see them. If one of these stays dark here it is not proof of a fault. A letter, number, arrow, or modifier that refuses to register while a second keyboard registers it fine is the result that actually points at hardware.
Lock keys report a state, not a press
Caps Lock, Num Lock, and Scroll Lock are not momentary keys. Tapping one toggles a state that stays on until you tap it again, which is why the page shows them as pills reading on or off rather than a brief green flash. That state is read directly from the keyboard event through the browser’s modifier query, so it reflects what the operating system currently believes, matching the light on the keyboard where one exists.
This is genuinely useful for two everyday problems. If your numpad is typing nothing, check whether Num Lock is off; when it is off, the number keys act as the arrow and navigation cluster instead. If your password keeps failing, glance at Caps Lock. Scroll Lock rarely does anything on modern software, but a few spreadsheet programs still change arrow-key behaviour when it is on, so it is worth confirming.
Because the state comes from the event, you may need to press any key once after toggling a lock for the pill to refresh. The pill then tracks the real state for the rest of the session.
Reading the event log
The log records the most recent presses and releases with five details each. Location separates keys that share a name: a left Shift reports location Left and a right Shift reports Right, and a numpad 4 is Numpad while the row-4 above the letters is Standard. That is how you confirm both Shift keys work, or that a numpad digit is distinct from its counterpart on the main rows.
The Repeat column marks events the operating system generated because you held the key, rather than pressed it again. When you hold a letter and it starts repeating, every event after the first is flagged yes. If a key you tapped once shows a burst of repeats, the switch may be chattering, registering multiple contacts from one press, which is a hardware fault worth noting. Modifiers show which of Ctrl, the Windows or Command key, Alt or Option, and Shift were down at that moment, which is what you check when a keyboard shortcut in another program is not firing.
For testing the pointing devices next to the keyboard, the Touchpad Tester covers taps, scrolling, and pointer events, and the Gamepad Tester does the same for controller buttons and sticks.
What this test cannot tell you
It cannot measure actuation force, key travel, switch type, or how a keyboard feels. Those are physical properties no browser can read. It cannot see keys the firmware or operating system consumes before the page, so a silent Fn or media key is inconclusive rather than confirmed broken.
It cannot report true rollover beyond what your browser and operating system pass through, and some systems cap simultaneous key reporting regardless of the hardware, so a low Max at once on a laptop can be a software limit rather than a keyboard one. It cannot detect a key that works electrically but produces the wrong character due to a firmware remap, because from the browser’s side that is the correct output.
What it does do is honest and local: it shows the physical key behind each event, counts how many keys register together, reads lock state from the event itself, and refuses to call a focus change a stuck key. Nothing you type is uploaded or stored, and the page keeps only the last several events in memory.
How to Use
Choose Mac or Windows labels and the closest size so the on-screen keyboard matches yours.
Click Start capture, then press each key once and confirm the matching key turns green.
Hold several keys together and watch Max at once to see how many the keyboard reports simultaneously.
Read the event log for the key value, physical code, location, modifiers, and auto-repeat flag.
Reset before testing another keyboard, and treat a key held over five seconds as a real stuck key only if focus stayed on the page.
Features
Common Questions
Test a keyboard in the browser before buying, selling, repairing, or cleaning it. This tester highlights each physical key by its KeyboardEvent.code, measures how many keys register at once so you can check rollover and ghosting, reads Caps Lock, Num Lock, and Scroll Lock state, and separates a genuine stuck key from a key left held when focus moved away.
About Keyboard Tester
Highlight every browser-detectable key by its physical KeyboardEvent.code on Mac, Windows, laptop, mechanical, USB, and Bluetooth keyboards. A max-keys-at-once counter measures rollover and exposes ghosting, lock keys report their on or off state, held keys clear when focus leaves the page so lost focus is not misread as a stuck key, and the event log shows key, code, location, modifiers, and auto-repeat locally in your browser.
Also known as: test keyboard, key tester, check keyboard keys, key rollover test, n-key rollover checker, keyboard ghosting test, how many keys can my keyboard press at once, stuck key test, is caps lock on, why is my numpad not working, keyboard chatter test, physical key code viewer.
Processing Note
Keyboard Tester runs in your browser, so the input you enter is processed locally on this page and is not uploaded to a ToolMintX account.
Tool Limits
IT tools provide quick diagnostics and transformations. They cannot see every private network, deployment setting, proxy, firewall, or production edge case.
Explore More
AI VRAM Calculator
Estimate GPU VRAM for LLM inference and training using model, quantization, users, and context length.
Client-sideAI API Cost Calculator
Compare and estimate AI API costs across OpenAI, Claude, Gemini, DeepSeek and more for text, image, video, and embeddings.
Client-sideAPI Key and .env Secret Generator
Generate secure .env secrets plus selectable Hugging Face, OpenAI, JWT, database, and webhook variables.
Client-sideSubnet Calculator
IPv4 subnet calculator: network and broadcast address, subnet and wildcard mask, usable host range, and host count from any IP and CIDR prefix.
Client-side