Typing race — personal ghosts, accuracy & weak-pair practice
A local typing practice game with original passages and transparent scoring. Choose plain prose, punctuation or code-like text, race a comparable replay and turn mistakes into a focused follow-up drill.
Typing Relay
Choose your inputs, or load the working example to explore the result. Your files stay on this device.
Supported scope: Printable English ASCII passages only. Direct typing and deletion; paste, drag/drop, composition, replacements and undo/redo input are excluded. This release does not claim multilingual or IME typing assessment. · Local unverified scores, not an anti-cheat competition, live room, certificate or guaranteed speed improvement. A hidden tab or early stop marks the run interrupted, excluding it from comparable ghost import. · Passages up to 2400 characters and 6000 edit events. No automatic storage or account; save replay JSON explicitly. Ghost imports up to 600 KB must match the exact passage, code, mode and duration.
Your inputs
Required fields are marked with an asterisk.
Your result
Review your output, then save it to your device.
Make the next step clear.
Your findings, assumptions and next steps will appear here after you run the check.
Typing Relay · https://typing.kitforma.com/ · KitForma
30/60/120-second races with original passages
Own and imported matching ghost timelines
Error-pair drills and portable practice evidence
Understand the evidence.
Focused guides explain the rules, the edge cases and the checks worth doing before you act.
Read a typing score that counts corrections honestly
Keep final text, inserted effort and elapsed time distinct.
Read the guide ↗Field guide / 02Race a matching replay rather than an invented opponent
Understand the difference between a pace guide and a saved run.
Read the guide ↗Field guide / 03Turn missed character pairs into a focused drill
Use the error record as a small practice suggestion.
Read the guide ↗Before you start
How do you calculate WPM and accuracy?
Correct-character WPM counts currently matching target characters, divides by five and by elapsed minutes. Gross WPM counts all inserted characters. Accuracy is correct insertions divided by all insertions, so an error remains in that denominator after you correct it. Each metric is labeled explicitly.
Can I race a friend live?
This release uses matching replay files, not live rooms. Share the challenge link and exchange a completed ghost JSON yourself. Both runs must use the exact same passage and settings. Imported records are unverified local practice data.
Is the default ghost a real player?
No. It is clearly labeled as a generated 40 WPM pacing guide. You can replace it with your previous matching run or an imported matching record. No fabricated player identity or leaderboard is shown.
What happens when I correct a typo?
The current matching-character count is recalculated, but the original wrong insertion remains in accuracy and mistake counts. Expected keys and adjacent expected pairs involved in errors are recorded. This separates final text quality from the effort needed to correct it.
How does the missed-pair drill work?
The tool selects the most-missed expected two-character pairs and finds words from the current original passage containing them. It builds a local repeated practice passage. That drill has a different passage fingerprint, so it cannot be compared as the original daily race.
Are my keystrokes uploaded or saved automatically?
No. The game state and mistake analysis stay in the tab. Save the replay JSON and mistake CSV explicitly if you want to keep them. The editor is excluded from capture, and the product uses only the site’s generic usage events rather than raw typing telemetry.
Sources & assumptions
Formats, algorithms and supported features are documented below. Check the stated scope and inspect your output before using it.
- MDN — InputEvent inputType ↗
Distinguishing direct insertions from paste, composition and replacement events.
- MDN — Performance.now ↗
Monotonic elapsed timing for the local race.
- MDN — Page Visibility API ↗
Marking hidden-tab runs as interrupted rather than pretending they are directly comparable.
Reviewed 2026-10-19. Read our methodology or report an issue.