Chinese Typing Speed Test
Type the Traditional Chinese passage with your own input method — Zhuyin, Cangjie, or Pinyin. The 60-second timer starts on your first keystroke, and you get characters per minute plus accuracy at the end.
Time left
60s
Characters typed
0
The timer starts the moment you begin typing.
Best Speed
-
Recent Results
-
How It Works
- Click the input box and start typing the passage shown above it — the timer starts automatically.
- Correct characters turn green and mistakes turn red. You can backspace to fix errors.
- Finish a passage and the next appears. After 60 seconds you get your speed, accuracy, and rank.
Speed Ranks
- Under 15 CPM — Warming Up: everyone starts somewhere.
- 15–29 CPM — Steady Hands: solid everyday typing.
- 30–49 CPM — Keyboard Regular: faster than most casual typists.
- 50–79 CPM — Typing Expert: professional-level speed.
- 80+ CPM — Zhuyin Master: your fingers barely touch the keys.
Tips to Type Faster
Read a few characters ahead instead of one at a time — batching phrases into one conversion is much faster.
Trust your input method's candidate ranking; picking the first candidate and fixing later usually beats hunting through lists.
Accuracy first: a wrong character costs more time to fix than a slightly slower correct one.
Practice a little every day. Typing speed comes from muscle memory, not bursts of effort.
Behind the Engineering: How Chinese IME Composition & Daily Seeded Passages Work
Building a Traditional Chinese typing test in React exposes a classic browser DOM subtlety: React’s synthetic onChange event is wired to the native input event, which fires on every intermediate phonetic keystroke (Zhuyin / Bopomofo or Pinyin) while the user is still composing a character. If a typing judge scores uncommitted phonetic symbols inside onChange, every intermediate keystroke is wrongly penalized as a typo.
Even more subtly, in the author’s July 2026 record with macOS Zhuyin, the final native input event emitted during composition still carries isComposing: true, and no subsequent input event fires after compositionend. Therefore, guarding onChange with if (event.nativeEvent.isComposing) return is not enough—it drops the final committed character! This tool tracks composition state via a dedicated ref across onCompositionStart and onCompositionEnd, settling the committed string both when non-composing input arrives and when compositionend fires, while deduplicating passage transitions via settledValueRef.
For the Daily Challenge mode, players on the same local date receive the same passage sequence without a central passage database. The client hashes the local date string (kof-daily-YYYY-MM-DD) into a 32-bit integer seed and drives a deterministic Mulberry32 PRNG Fisher-Yates shuffle, while the countdown timer computes elapsed wall-clock time from Date.now() so background-tab throttling cannot freeze the 60-second clock.
About This Test
This test runs in your browser. Nothing you type is uploaded or stored on any server — your best score and history live only in your browser's local storage. Only if you choose to submit to the daily leaderboard do we send the nickname you enter and your result (speed and accuracy).
All passages are original Traditional Chinese text written for this test, using everyday vocabulary so the test measures typing speed rather than rare-character knowledge.
You Might Also Like
Reaction Test
Test your reaction speed in milliseconds. Practice and track your improvement.
Learn more →KeepOnFirst Focus
Block the apps you pick while you focus. The countdown shows on your Lock Screen and Dynamic Island. A 7-day focus challenge, count-up mode, tasks, and focus stats are included.
Learn more →