clavirio 0.3.6

A terminal typing tutor with virtual keyboard, built-in lessons, and session tracking
clavirio-0.3.6 is not a library.

  Crates.io

www.clavir.io

Learn touch typing without leaving the terminal.

Progressive 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).

Features

  • Lessons mode — 15 progressive drills from home row to full paragraphs and code; lessons 1–9 are layout-specific, 10–15 are shared
  • Practice mode — weak keys, common bigrams, quotes, zen free-typing mode, random words (english 200/1k), and timed sessions (30s/60s), toggle with m
  • Live stats — WPM, accuracy, errors, time, and line progress in a one-row status bar
  • WPM sparkline — see your speed over time on the results screen
  • 3 keyboard layouts — QWERTY, Dvorak, and Colemak
  • Virtual keyboard — highlights the next key with finger hints (Pinky, Ring, Middle, Index, Thumb)
  • Error feedback — wrong keystrokes shown inline, blocked until corrected with Backspace
  • Weak key tracking — per-key accuracy saved across sessions to ~/.clavirio/keystats.json; press w after a session to drill that session's weak keys, or select Weak Keys from the practice menu for cumulative weak keys
  • Session history — saved to ~/.clavirio/history.json with per-lesson tracking and averages
  • Progress tracking — remembers which lesson you're on and advances automatically on completion (practice mode excluded)
  • Custom text — load any file via Ctrl-F or as a CLI argument
  • CLI flags — start modes directly from the command line
  • Dark & light themes

Lessons

Lessons 1–9 are layout-specific (each layout has its own drills matched to that layout's finger positions). Lessons 10–15 are shared across all layouts.

# Lesson QWERTY Dvorak Colemak
1 Index Keys f j u h t n
2 Middle Keys d k (+ f j) e t (+ u h) s e (+ t n)
3 Ring & Pinky s l ; (+ f j d k) o n s (+ a) r i o (+ a)
4 Home Row a s d f j k l ; a o e u i d h t n s a r s t d h n e i o
5 Home Reach g h i d d h
6 Top Intro e i r u p c r l f p l u
7 Top Row q w e r t y u i o p ' , . p y f g c r l q w f p g j l u y ;
8 Bottom Row z x c v b n m , . ; q j k x b m w v z z x c v b k m , .
9 All Letters Pangrams Pangrams Pangrams
# Lesson Focus
10 Capitals & Shift Mixed case
11 0-9 Numbers Numbers in context
12 Punctuation & Symbols Special characters
13 Common Words High-frequency words
14 Full Paragraphs Real-world text
15 Code (Rust) Programming syntax

Build & Run

cargo build --release
cargo run

CLI

clavirio                        # interactive menu
clavirio -w                     # practice: 100 words (english 200)
clavirio -w 50 -l 1k            # practice: 50 words (english 1k)
clavirio -t 60                  # practice: 60-second timed
clavirio -t 30 -l 1k            # practice: 30-second timed (english 1k)
clavirio -f path/to/file.txt    # custom file
Flag Description
-f, --file <FILE> File path to load as typing text
-w, --words [<WORDS>] Start practice mode with N random words (default: 100)
-t, --time <TIME> Start practice mode for N seconds (e.g. 30, 60)
-l, --list <LIST> Word list to use: "200" or "1k" (default: 200)
-h, --help Print help
-V, --version Print version

Terminal size

Best with a maximized terminal window so text, keyboard, and stats fit comfortably.

Controls

Menu

Key Action
/ k/j Navigate lessons / history
Enter Start lesson / practice
m Toggle between lessons and practice
l Cycle layout
14 Toggle fingers / hints / keyboard / theme
h Session history
Ctrl-F Load file
q / Esc Quit

Typing

Key Action
Backspace Correct mistake
Esc Pause menu
Ctrl-R Restart

Finished screen

Key Action
r Restart
w Practice weak keys from this session
n Next lesson (lessons mode only)
Esc Back to menu

Pause menu

Key Action
Space Resume
r Restart
n Next lesson (lessons mode only)
q Quit
Esc Back to menu

Settings

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

forthebadge