A fast, terminal-based typing test application built in Rust with crossterm.
- Multiple modes: Passage, Timed (10s/30s/60s), No Punctuation, and Code
- Real-time stats: WPM, accuracy, and elapsed time displayed while typing
- Persistent history: Results saved to disk (XDG-compliant)
- Diff-based rendering: Efficient terminal updates with dirty-row tracking
- Responsive layout: Auto-centering with word-wrapping and resize support
cargo build --releaseThe binary will be available at target/release/typical.
./target/release/typical| Screen | Key | Action |
|---|---|---|
| Menu | j/↓, k/↑ |
Navigate menu |
| Menu | Enter |
Select |
| Menu | q/Esc |
Quit |
| Typing | Any character | Type |
| Typing | Backspace |
Correct last char |
| Typing | Esc |
Back to menu |
| Results | r |
Restart |
| Results | m |
Back to menu |
| Results | q/Esc |
Quit |
| History | j/↓, k/↑ |
Scroll records |
| History | Esc |
Back to menu |
src/
├── main.rs # Entry point, terminal setup, event loop
├── app.rs # Application state, game logic, WPM/accuracy
├── render.rs # Diff-based renderer with double-buffering
├── layout.rs # Word-wrap and screen position computation
├── passage.rs # Typing passages (normal, no-punct, code)
└── history.rs # Persistent result records (JSON/XDG)
# Run (debug)
cargo run
# Run (release)
cargo run --release
# Build
cargo build
# Check without building
cargo check
# Run Clippy lints
cargo clippy
# Run tests
cargo testMIT