Net speed per second
After valid input begins, this area shows the net speed for each second in the current unit, along with the latest value, peak, and sample count.
Choose a practice passage from ChaosLens's eight default languages and measure net speed, gross speed, accuracy, uncorrected errors, corrections, and completion progress locally in your browser.
Test settings and live input
Choose one of the eight ChaosLens passage languages. The default language is English.
Longer durations use longer passages; finishing the passage or reaching the time limit ends the test.
Timing begins with the first grapheme. Input-method composition is supported; pasting and dragging are blocked.
English, Spanish, and German display WPM; Simplified Chinese, Traditional Chinese, Korean, Japanese, and Thai display CPM. Scores across different languages, passages, and input methods should not be compared directly.
After valid input begins, this area shows the net speed for each second in the current unit, along with the latest value, peak, and sample count.
English, Spanish, and German: gross WPM = total input grapheme clusters ÷ 5 ÷ elapsed minutes. Simplified Chinese, Traditional Chinese, Korean, Japanese, and Thai: gross CPM = total input grapheme clusters ÷ elapsed minutes. Net speed = max(0, gross speed − uncorrected errors ÷ elapsed minutes). Accuracy = correctly positioned grapheme clusters ÷ total input grapheme clusters × 100%.
Timing uses the unrounded millisecond value from performance.now(). All decisions and calculations use the original values; speed and percentages are rounded only for display.
With 300 correct graphemes typed in 60 seconds, a CPM language should show 300 CPM. With 250 correct graphemes in a WPM language, it should show 50 WPM. One hundred correct graphemes and ten uncorrected errors produce 90.91% accuracy.
Passage length, difficulty, language, CPM/WPM conventions, and input methods are not directly comparable; composition is scored only after the final text is committed; Thai combining characters use Unicode grapheme clusters; pasting and dragging are blocked; focus loss pauses while preserving progress; short passages fluctuate more.
English, Spanish, and German use WPM based on five grapheme clusters per standard word; Simplified Chinese, Traditional Chinese, Korean, Japanese, and Thai use CPM based on Unicode grapheme clusters. Net speed then subtracts the per-minute penalty for uncorrected errors, with a floor of zero.
English, Spanish, and German use WPM. Simplified Chinese, Traditional Chinese, Korean, Japanese, and Thai use CPM. The units use different conventions, so their numbers should not be compared directly.
Some input methods are still composing syllables, characters, or candidate words. The tool waits for compositionend and the final input text before comparing it, so an intermediate candidate is not counted as an error.
All eight built-in passages, input, timing, and statistics are processed locally in this browser. Nothing is uploaded, no remote API is called, and no URL or local storage is written.
No third-party runtime code or assets are reused. The algorithm and interface are independently implemented; external links explain browser APIs and timing standards only.