Mouse Tester

Check all five mouse buttons, scroll wheel direction and delta, double-click intervals and an estimated polling rate, live in your browser.

🌐 Español

Last button pressed: Click inside the box below to begin.

Buttons held right now (0): none

Buttons tested: 0 / 5

Left
Middle
Right
Back
Forward

Move your mouse, click, and scroll inside this box.

Move your mouse here to measure its polling rate.

Double-click speed

Click the same button twice to measure.

Compared against a common ~500ms OS default — your own OS setting may differ.

Scroll wheel

Scroll inside the box above to see direction and delta here.

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Five button codes, and the two that most mice do not have

The row of tiles above the test area is not a picture of your mouse. It is the complete vocabulary a web page gets: the five values a pointer event can carry in its button field, which map to Left, Middle, Right, Back and Forward in that order. Everything your hand does has to arrive through one of those five slots.

That has a consequence worth knowing before you start counting failures. Buttons 3 and 4 are the pair on the thumb side, and a plain three-button office mouse has neither, so the counter will read 3 out of 5 no matter how long you sit there. That is a fact about the mouse, not a fault. Equally, a gaming mouse with twelve programmable buttons will not fill twelve tiles, because the extra ones are almost always sent by the vendor’s driver as keystrokes rather than as mouse buttons. To see what those are really emitting, the keyboard tester listens across the whole window rather than inside one box, which is what a macro-bound button needs.

Working through the dashed box

  1. Move the pointer into the panel headed Move your mouse, click, and scroll inside this box. Every listener in this tool is bound to that one element rather than to the page, so nothing outside it is being watched.
  2. Press and release each button in turn. A tile fills with the accent color while you hold it and settles to green once you let go, and the Buttons tested counter climbs.
  3. Click the same button twice in quick succession. The Double-click speed panel drops its “Click the same button twice to measure.” prompt and starts logging intervals.
  4. Roll the wheel up and down, and sideways too if yours tilts. Each event lands in the Scroll wheel panel with its direction, both delta values and its unit.
  5. Keep the pointer moving inside the box until the hint line stops offering to measure and starts reading Apparent polling rate.
  6. Press Reset test to clear the counters, both logs and the movement sample buffer in one go.

The box swallows a few things on purpose while you are in it. Right-clicking does not open the context menu, the wheel does not scroll the page, and each press cancels the browser’s own default action for it, which is what keeps behaviour like middle-click autoscroll from interrupting the test. Step outside the dashed border and all of that works normally again.

Reading the double-click log against a 500 millisecond yardstick

Every press is timed against the previous press of the same button, and only that button, so alternating left and right still writes a row for each of them, timing across the opposite-button click you made in between rather than a real double-click attempt. The gap is printed in milliseconds next to a word from a fixed five-step scale: below 150 is “Very fast”, below 300 is “Fast”, up to and including 500 is “Typical”, up to 800 is “Slow”, and anything longer is “Too slow for a double-click”. The note in parentheses after it is a separate yes or no, and its rule is simply 500 milliseconds or less.

The honest part is that 500 is a stand-in. It is a widely used default double-click time, but it is a slider on every desktop operating system and no browser interface reports the value currently set on your machine. So the verdict answers “would this have passed a common default”, not “will this pass on your computer”. Somebody who has pushed that slider toward the fast end will miss double-clicks the panel calls Typical, which is worth knowing before you decide the hardware is at fault.

Triple-clicking writes two rows, because every press after the first has a predecessor to compare against. Both this panel and the wheel panel keep the five most recent entries, newest at the top, and drop the rest.

Where the scroll panel’s delta numbers come from

Each wheel event carries a horizontal and a vertical delta, and the tool prints both rather than just the one it picked. The direction shown is whichever axis moved further, with vertical winning a tie because that is overwhelmingly the common case, so a diagonal trackpad flick still resolves to a single arrow.

The unit printed after the two deltas is the part people do not expect. A wheel event also reports which scale its numbers are in, and browsers genuinely disagree here: the same physical notch can arrive measured in pixels, in lines or in pages depending on the operating system, the pointing device and the browser build. The panel labels it rather than converting it, because a raw number with no unit is how scroll handling bugs get written in the first place. Anyone debugging their own scroll code will get more out of this panel than out of the button tiles.

What the polling rate figure is actually counting

Movement is sampled into a rolling buffer that holds the sixty most recent timestamps. The reading is one thousand divided by the mean gap between consecutive samples, with zero-length gaps discarded, and nothing is shown at all until the buffer holds two samples with a real gap between them. Because it is an average over a window that keeps sliding, the number wobbles while you are moving and settles when your speed is steady.

The interesting decision is which timestamps go into that buffer. Browsers batch several hardware samples into each move event they actually dispatch, and dispatched events land at roughly your display’s refresh rate, so timing them measures the monitor rather than the mouse. When the browser offers the coalesced events interface, this tool unpacks each dispatched event into the real samples inside it and times those instead, which is where a reading above your refresh rate can come from at all. When that interface is missing, the tool falls back to the single dispatched timestamp and prints a note under the reading saying the number may be capped near your display’s rate.

Limits worth knowing before you blame the mouse

Pen and touch input are filtered out of the button, release and movement handlers, so a stylus will not light anything up here even though the wheel panel is more permissive. Nothing is written to storage, so a reload gives you an empty session. And the whole thing measures what the browser was told, which means a driver profile, a smoothing setting or a remapped side button sits between the switch and this page.

For the failures that a button sweep will not surface, the neighbouring tools are more direct. Sustained clicking is what the click speed test is built around, over runs of 1, 5, 10 or 60 seconds. A misbehaving controller belongs in the gamepad tester, which reads sticks and triggers as analogue values and has its own deadzone control for drift. And if you are checking over a whole secondhand machine rather than one peripheral, the hardware testers guide runs through the screen and keyboard checks alongside the reaction and timing widgets, in an order that makes sense to work down.

See it in action

Screenshot of the Mouse Tester tool with a click target with readouts for the last button pressed and the buttons held right now, tracking all five - left, middle, right, back and forward - against a tested counter
Mouse Tester mid-process: a click target with readouts for the last button pressed and the buttons held right now, tracking all five - left, middle, right, back and forward - against a tested counter.
Diagram: where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen
Where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen.

Frequently asked questions

My mouse has eight buttons but the tester only shows five tiles. Where did the other three go?

A web page can only see the five values the pointer event specification defines for its button field, which are Left, Middle, Right, Back and Forward. Extra thumb and top buttons on a gaming mouse are almost always sent by the vendor driver as keystrokes or macros instead of as mouse buttons, and those arrive at the browser as keyboard events. The Keyboard Tester on this site listens across the whole window and will show you what a bound button is really sending.

A tile stayed filled after I let go of the button. Is the switch stuck?

Check where your hand was first. The release listener is bound to the dashed test area, not to the window, so if you press inside the box and let go with the pointer outside it, the release is never seen and the button is still counted as held. Move back inside and click the same button once to clear it. If it stays lit after a clean press and release entirely inside the box, then the switch is worth suspecting.

Should I trust the polling rate reading in Firefox or Safari?

Treat it as a lower bound there. The reading is built from the timestamps of the individual hardware samples that a browser batches into each dispatched move event, which is what the coalesced events API exposes, and Chromium browsers implement it consistently. Without it the tool can only time the dispatched events themselves, and those are throttled to roughly your display refresh rate no matter how fast the mouse reports. When the tool detects that the API is missing it prints a note saying exactly that, right under the reading.

Does a laptop trackpad work here, or do I need a real mouse?

A trackpad works for most of it. Trackpads identify themselves as a mouse pointer, so taps and clicks light up the Left and Right tiles and dragging feeds the polling estimate. Two-finger scrolling also registers in the wheel panel, because the wheel listener is the one handler with no pointer type filter on it. What you will not get is a Middle, Back or Forward tile, since there is no physical button underneath to report those codes.

The double-click panel calls my clicks Typical but my computer still misses them. Which one is wrong?

Probably neither. Typical is the band from 300 up to 500 milliseconds, and the verdict printed beside it passes anything of 500 or less, but that 500 is a widely used default rather than a reading of your own setting, because no browser interface exposes the value your operating system is currently configured with. Somebody who has dragged that slider toward the fast end will fail double-clicks that this panel happily calls Typical. Compare the numbers here against the setting in your own mouse control panel rather than against the label.

Is anything I click or scroll here kept after I close the tab?

Nothing is kept. The counters, the two logs and the movement sample buffer are all ordinary component state held in memory for as long as the page is open, and the tool never calls any storage interface, so there is nothing to survive a reload and nothing to clear out later. Pressing Reset test wipes the same state immediately without waiting for a reload.

Related tools