Free

Typing Speed Test

A speed test that shows its own arithmetic, because WPM is a definition rather than a measurement.

  • JavaScript
  • CSS
  • HTML

About this project

A typing test with live per-character highlighting, a clock that starts on your first keystroke rather than on page load, and a results panel that shows the working behind every number.

The idea underneath it is that words per minute is not a measurement. A stopwatch measures time and a ruler measures length, but nothing about typing measures "words per minute" — because nobody agrees what a word is. So the field picked one: five characters, spaces and punctuation included. Every WPM score you have ever seen rests on that convention, and this project puts the constant on screen where you can change it.

It is also honest about what it cannot see. Some keyboards — most phone keyboards, and every input method editor — report keystrokes without saying which key was pressed. Rather than compute a percentage from whatever partial sample it caught, the project says so.

What you will learn

  • Define a metric rather than assume one: a "word" is five characters, and every score depends on that choice
  • Start a clock on the first keystroke instead of on page load, and know why the difference matters
  • Compare typed text against a target character by character and highlight the result live
  • Separate gross speed from net speed, and accuracy of the final text from accuracy of the keystrokes
  • Handle input that reports no individual keys at all, which is normal on phone keyboards

Before you start

  • JavaScript basics — variables, functions and events
  • A browser and a text editor. Nothing to install.

New to JavaScript? The free JavaScript course covers everything this project assumes.

Academic integrity notice

These projects are provided for learning, experimentation and reference. Understand the code, modify it for your own requirements, and acknowledge external work according to your institution’s academic policies. Priodemy does not supply work to be submitted as your own.