About this CPS test
A small, fast, dependency-free tool for one job: counting how many times you click in a fixed window and reporting the exact rate. No account, no upload, and nothing you click is ever recorded anywhere but your own browser.
How the timer and count work
The first click starts the round. From that moment, every click event the browser reports — a real mouse click, a tap, or (with keyboard mode on) a spacebar press — increments a plain counter for exactly as long as the chosen duration, then the pad freezes.
The score is deliberately simple:
CPS = clicks ÷ seconds, rounded only for display — the pass-through comparison used to decide whether a run beat your previous best always uses the full-precision value, never the rounded one.
The "seconds" in that division is always the duration you chose — 1, 2, 5, 10, 15, 30, 60 or 100 — not a stopwatch reading of however long the round's timer loop actually took to notice the window had closed. A requestAnimationFrame loop is not perfectly exact to the millisecond, and letting that small jitter leak into the denominator would mean two runs of "the same" 5-second test silently divided by very slightly different numbers. Using the fixed, chosen duration means the "Elapsed" figure shown in your result and the number the CPS score was actually computed from are always identical.
How the best-score logic works
Each duration keeps its own best score, stored under its own key in your browser's local storage — a 5-second best and a 30-second best are different numbers and never compared against each other. After each run, the new score is compared against the stored best for that duration; it only overwrites storage if it is strictly higher, and a run that ties or falls short leaves the stored value untouched.
How it was verified
The scoring function has no branching complexity to speak of — it is one division — but it was still checked against fixed pairs with known answers before shipping:
| Clicks | Duration | Expected CPS | Computed |
|---|---|---|---|
| 20 | 5s | 4.00 | 4.00 |
| 17 | 5s | 3.40 | 3.40 |
| 142 | 10s | 14.20 | 14.20 |
| 7 | 2s | 3.50 | 3.50 |
| 0 | 5s | 0.00 | 0.00 |
The best-score comparison was checked the same way: a candidate score is only ever accepted as a new best when it is strictly greater than whatever was stored, a missing or corrupted stored value is treated as "no best yet" rather than crashing, and a candidate of zero or an invalid number is never written to storage.
How the site is built
- Static HTML, one small stylesheet, two small scripts. No framework, no build step, no bundler.
- Nothing here needs the network. No CDN framework, no web font, no remote image; the favicon is an inline SVG data URI. Once loaded, the page keeps working offline.
- System font stack. Your operating system's own UI font, so nothing has to download and nothing shifts as it loads.
- What you click never leaves your device. The whole test runs in your browser; click counts and the CPS score are never uploaded anywhere. The only thing written to storage is a best-score number per duration, kept in your browser's own local storage.
- Dark mode follows your system setting via
prefers-color-scheme.
Scope and honesty about limits
This measures exactly one thing: click events your browser reports, divided by a fixed duration. It cannot see past the browser's own input pipeline, so it cannot tell you your mouse's true polling rate, verify a specific clicking technique, or serve as evidence for a competitive ruling. It is not a medical tool and says nothing about repetitive strain risk beyond the honest, general note on the main page — if a technique hurts, stop.