clavirioProgressive lessons for QWERTY, Dvorak & Colemak.
Real-time stats, a virtual keyboard with finger hints, and session history — in a fast,
lightweight binary built with Rust and ratatui.
clavirio — from Latin clavis (key).



Research on typing skill suggests that skilled typing relies more on implicit procedural control than on explicit knowledge of key locations. The paper also suggests that the keyboard is represented in terms of its row-and-column structure, not as a memorized list of individual letters.
Clavirio follows that idea by teaching the keyboard row by row with the same 7-lesson progression for each row:
index pair → middle pair → ring pair → pinky pair → reach pair → full row → row + Shift
Each lesson introduces only 2 new keys and uses only characters from earlier lessons. The same progression is used for QWERTY, Dvorak, and Colemak, so the lesson structure stays consistent across layouts.
The paper does not compare typing tutors directly, so it does not prove that this exact sequence is optimal. It does support the broader design choice: structured, incremental repetition that builds reliable finger-to-key habits instead of relying on conscious recall of key positions.
5/6 in practice modew after a drill to practice that session's weakest keys, or select Weak Keys from the menu for cumulative stats~/.clavirio/history.json with per-lesson tracking and averagesCtrl-F or --fileLessons 1-21 are layout-specific — 7 lessons per row (home, top, bottom), 2 new keys each. Lessons 22-27 are shared (numbers and symbols).
| # | Lesson | QWERTY | Dvorak | Colemak |
|---|---|---|---|---|
| 1 | Home: Index | f j | u h | t n |
| 2 | Home: Middle | d k | e t | s e |
| 3 | Home: Ring | s l | o n | r i |
| 4 | Home: Pinky | a ; | a s | a o |
| 5 | Home: Reach | g h | i d | d h |
| 6 | Home Row | full row | full row | full row |
| 7 | Home + Shift | + caps | + caps | + caps |
| 8 | Top: Index | r u | p g | p l |
| 9 | Top: Middle | e i | . c | f u |
| 10 | Top: Ring | w o | , r | w y |
| 11 | Top: Pinky | q p | ' l | q ; |
| 12 | Top: Reach | t y | y f | g j |
| 13 | Top Row | full row | full row | full row |
| 14 | Top + Shift | + caps | + caps | + caps |
| 15 | Bottom: Index | v m | k m | v m |
| 16 | Bottom: Middle | c , | j w | c , |
| 17 | Bottom: Ring | x . | q v | x . |
| 18 | Bottom: Pinky | z / | ; z | z / |
| 19 | Bottom: Reach | b n | x b | b k |
| 20 | Bottom Row | full row | full row | full row |
| 21 | Bottom + Shift | + caps | + caps | + caps |
| # | Lesson | Focus |
|---|---|---|
| 22 | Numbers | 1 2 3 4 5 6 7 8 9 0 |
| 23 | Symbols I | / ? : ' " |
| 24 | Symbols II | [ ] { } < > | \ |
| 25 | Symbols III | ` ~ ! - _ + = |
| 26 | Symbols IV | @ # $ % ^ & * ( ) |
| 27 | Numbers & Symbols | Review |
Download from GitHub Releases (macOS, Linux, Windows):
# macOS / Linux
tar xzf clavirio-*.tar.gz
sudo mv clavirio /usr/local/bin/
# Windows — extract the .zip, then add the folder to your PATH
macOS: On first run, macOS may block the binary. Go to System Settings → Privacy & Security and click Allow Anyway.
cargo install clavirio
git clone https://github.com/alexylon/clavirio.git
cd clavirio
cargo build --release
clavirio # interactive menu
clavirio -w # 100 random words (english 200)
clavirio -w 50 -l 1k # 50 random words (english 1k)
clavirio -w -l rust # 100 code tokens (rust)
clavirio -t 60 # 60-second timed session
clavirio -t 30 -l python # 30-second timed (python)
clavirio -w -p -n # words with punctuation and numbers
clavirio -f path/to/file.txt # custom file
| Flag | Description |
|---|---|
-w, --words [N] |
Practice with N random words (default: 100) |
-t, --time N |
Timed practice for N seconds |
-l, --list LIST |
Word list (default: 200) |
-p, --punctuation |
Inject punctuation into word practice |
-n, --numbers |
Inject numbers into word practice |
-f, --file FILE |
Load a custom text file |
-h, --help |
Print help |
-V, --version |
Print version |
Available word lists: 200, 1k, rust, python, javascript (js), go, c (cpp), java, html (css)
Best with a maximized terminal window so text, keyboard, and stats fit comfortably.
| Key | Action |
|---|---|
↑/↓ k/j |
Navigate |
Enter |
Start |
m |
Toggle lessons / practice |
h |
Session history |
t |
Cycle theme |
l |
Cycle layout |
Ctrl-F |
Load file |
q / Esc |
Quit |
1-3 |
Toggle fingers / hints / keyboard |
4 |
Toggle error stop |
5/6 |
Toggle punctuation / numbers (practice only) |
| Key | Action |
|---|---|
Backspace |
Correct mistake |
Esc |
Pause menu |
Ctrl-R |
Restart |
| Key | Action |
|---|---|
r |
Restart |
w |
Practice weak keys |
n |
Next lesson (lessons mode) |
Esc |
Back to menu |
| Key | Action |
|---|---|
Space / Enter |
Resume |
r |
Restart |
n |
Next lesson (lessons mode) |
Esc |
Back to menu |
q |
Quit |
Preferences are stored in ~/.clavirio/settings.toml and saved automatically.
[keyboard]
layout = "qwerty" # qwerty, dvorak, colemak
[display]
show_keyboard = true
show_hints = true
show_fingers = true
theme = "dark" # dark, light
include_punctuation = false
include_numbers = false
practice_mode = false
error_stop = false # true = block on error, false = advance past errors