gekro
GitHub LinkedIn

Typing Speed Test

Measure your typing speed in 30, 60 or 120 seconds with the standard words-per-minute formulas. Plain text, live accuracy, saved personal bests, nothing uploaded.

Time left 1:00

Net WPM -

Accuracy -

Her neighbour lent her a ladder, and together they cleaned the gutters before the storm. The tall lighthouse stood on the rocks and its light swept slowly across the dark water. Warm bread, soft butter and a bowl of soup made the cold evening feel much shorter. Pack light, wear comfortable shoes and always keep a spare charger in your bag. Our flight was delayed, so we spent the evening reading magazines and watching planes take off. Traffic moved slowly across the bridge as the morning fog lifted from the river. The library closes at 8 tonight, so return your books early if you can. The market in the old town sells bread, olives, cheese, fresh flowers and handmade soap.

Click the box and start typing. The clock starts on your first keystroke.

Your saved bests (this browser only)

Best net WPM and number of finished tests for each duration
DurationBest net WPMTests
30 s - 0
60 s - 0
120 s - 0

One word is 5 characters. Gross WPM = (characters typed / 5) / minutes. Net WPM = (correct characters / 5) / minutes. Accuracy = correct characters / characters typed. Backspace is allowed. Esc restarts the same text; Tab moves out of the box. Pasting is turned off. Right characters have a solid green line under them, wrong characters a wavy rose line, and the next character has a sky-blue bar beside it.

How the numbers are worked out

The clock starts on your first keystroke and the test ends when the full time has passed. Each character in the box is compared with the character in the same place in the text, case and spaces included. Net WPM counts only the correct characters, so a wrong character that is still there costs speed through the formula but is not subtracted a second time. Mistakes made counts a wrong character the moment it is typed, even if you fix it later; errors left are the wrong characters still in the box at the end. For the first second the elapsed time is counted as 1 second, so the first keystrokes cannot give a silly number. Results from tests that were cancelled, that held less than one word, or that ran above 500 gross WPM are not saved.

As-is, no warranty. These apps are free under their listed license and run entirely in your browser. Use at your own risk — don't blame me if your PC catches fire, your dog runs away, or the math turns out wrong. Verify anything that actually matters. None of this is professional financial, medical, legal, or engineering advice.

© 2026 Rohit Burani · MIT · Built at gekro.com · View source ↗

Guide

How to play

Pick a duration, click the box under the text and start typing. The clock starts on your first keystroke, not before, and the test ends when the time is up. Type exactly what you see, capitals, spaces and punctuation included.

While you type, each character in the passage changes. A correct character gets a soft green highlight and a solid line under it. A wrong one gets a rose highlight and a wavy line under it, so you can tell the two apart without relying on colour. The next character to type has a blue bar beside it. The text itself keeps the normal text colour, so it stays easy to read. Backspace works, so you can fix a mistake or leave it and keep going.

Esc restarts with the same text. New passage and Try again give you different text. If you get within about 100 characters of the end of the passage, more sentences are added, so nobody runs out of text. Pasting is turned off, and the tab being hidden cancels a running test.

At the end you get a result card: net WPM, gross WPM, accuracy, characters correct, errors left and mistakes made, plus a note on your personal best for that duration.

The numbers

These are the usual typing-test definitions, and they are also written on the page:

  • One word is 5 characters, including spaces and punctuation. This is a convention, so a word like “a” is not one word and “internationalisation” is more than one.
  • Gross WPM = (characters typed / 5) / minutes.
  • Net WPM = (correct characters / 5) / minutes. So 300 correct characters in 60 seconds is 60 WPM.
  • Accuracy = correct characters / characters typed, rounded down to one decimal so 100% means exactly 100%. With nothing typed it is shown as 100%, not as an error.
  • Mistakes made counts a wrong character at the moment you type it, even if you fix it a second later. Errors left are the wrong characters still in the box when time runs out.

Net WPM counts only correct characters, so a wrong character that is still there costs you speed through the formula but is not subtracted a second time. A corrected mistake lowers your pace because you spent keystrokes on it, but it does not appear in accuracy. That is why mistakes made and errors left are shown separately.

How it works

The engine is a small set of pure functions and one state machine, with the clock passed in rather than read, so a whole test can be replayed from a list of typed texts and timestamps.

  • Comparison. The typed text and the passage are split into Unicode characters and compared by position. The page only restyles the characters that changed on each keystroke, which keeps it smooth on a phone at fast speeds.
  • Passage. Sentences come from a bank of more than 60 plain-English sentences written for this page, shuffled with the browser’s secure random generator. When more text is added, every sentence already in the passage is avoided, so a sentence is not repeated until the whole bank has been used; after that a fresh shuffled pass begins.
  • Zero-time safety. For the first second the elapsed time is counted as one second, so the first keystrokes cannot divide by zero or show a silly speed.
  • Late keystrokes. An input stamped after the time has run out is not counted.
  • Bulk input. More than 30 new characters in a single input event, or more than 6000 characters in the box, is ignored as paste, autofill or a script rather than typing.

The test suite checks the formulas against known values, replays scripted tests with timestamps, throws hostile strings (emoji, combining marks, newlines, very long text) at the comparison, and checks the sentence bank is plain ASCII with sensible lengths and no duplicates.

Privacy and storage

Nothing is uploaded and there is no account. What you type is compared in memory and is never stored. Your best net WPM and the number of finished tests for each duration are saved in your browser’s local storage, as small numbers inside a small JSON object, under one key. Only tests that ran the full time, held at least one word and stayed at or under 500 gross WPM are counted. Clearing site data, or the Clear saved results button, removes them.

Limits

  • Words per minute depends on the text. Common short words are quicker to type than long or unusual ones, and this tool does not adjust for that.
  • The passages are plain English with basic punctuation. They do not test symbols, code, other languages or other keyboard layouts.
  • A finished test above 500 gross WPM is not saved, which keeps scripted input out of your bests. The result card says so instead of showing a best.
  • Characters are compared one Unicode character at a time, so an accented letter built from a base letter and a separate mark counts as two characters.
  • Phone keyboards that insert whole words from suggestions can look like bulk input if they add more than 30 characters at once. Turn off prediction for a fair result.
  • A score on one keyboard or device is not directly comparable with a score on another, and this is not an official or certified measurement.

Everything runs locally in your browser.

All Fun tools →

For informational purposes only. Not financial, medical, or legal advice. You are solely responsible for how you use these tools.