_ _
| | _____ _ _| |__ _ __
| |/ / _ \ | | | '_ \| '__|
| < __/ |_| | |_) | |
|_|\_\___|\__, |_.__/|_|
|___/
practice the keys that slow you down
keybr-tui
Adaptive touch-typing practice for the terminal. keybr-tui times every key you press, finds the ones slowing you down, and builds drills aimed straight at them. It is a faithful port of the keybr.com learning algorithm, runs entirely offline, and can import your keybr.com history.
Install
|
The script installs the latest prebuilt binary for your platform. Prefer Cargo? Run cargo install keybr-tui.
Prebuilt binary. Every release ships binaries for Linux (x86_64), macOS (Intel and Apple Silicon), and Windows (x86_64). Unix archives are .tar.gz, Windows is .zip.
From source.
Pin a version for the install script with KEYBR_TUI_VERSION=v0.2.0.
How it adapts
Every session feeds a per-key model of how fast and accurately you type. keybr-tui reads that model to decide what you practice next.
- Start small. You begin with a handful of letters, not the whole keyboard.
- Earn the rest. A new letter unlocks only once your active set reaches a confidence threshold, measured against your target speed.
- Drill the weak spot. The slowest key in your active set becomes the focus key and shows up more often in the text you are given.
- Read like words. A phonetic Markov chain builds pronounceable pseudo-words from your active letters, so practice never feels like random noise.
- Learn from each key. Every keystroke's reaction time updates a smoothed per-key average, the same calculation keybr.com runs.
Because the engine is a faithful port of the keybr.com algorithm, the practice you get in the terminal matches what the website would give you.
Features
| Feature | What you get |
|---|---|
| Adaptive drills | Phonetic Markov text built from your active letters, biased toward your weakest key |
| Per-key tracking | Reaction times smoothed into a confidence score for every key |
| Progressive unlock | Letters open up as you prove proficiency, in keybr.com's frequency order |
| keybr.com import | Bring your full learning state over from a keybr.com data export |
| Two error modes | Forgive mistakes and keep moving, or stop until you correct them |
| Lesson summary | WPM, accuracy, and your weakest keys after every round |
| Local and offline | No account, no network, stats saved as plain local files |
| Terminal-native | Minimal ratatui interface in ANSI colors, no chrome in the way |
Usage
| Flag | Description |
|---|---|
--target-wpm <N> |
Target typing speed in words per minute (default: 35) |
--error-mode <MODE> |
move-on (default) or stop-on-error |
--reset |
Delete saved stats and start fresh |
--data-dir |
Print the data directory path and exit |
--import <FILE> |
Import a keybr.com data export and exit (see below) |
--force |
With --import, replace existing stats (a .bak backup is kept) |
--help |
Show help |
--version |
Show version |
In-session keys: Esc returns to the menu or quits, Enter selects a menu item or dismisses the lesson summary, the arrow keys navigate menus and settings, and Left/Right adjust setting values.
Bring your keybr.com history
Already practicing on keybr.com? Carry your progress over and continue in the terminal.
-
On keybr.com, open your profile and click Download data. You get a
typing-data.jsonfile with your full practice history. -
Import it:
The importer replays every session through the same per-key smoothing keybr.com uses, so your unlocked letters, per-key speeds, and focus letter come out exactly as the website computed them.
A few details worth knowing:
- Your target speed is not part of the export. If you use a non-default target on keybr.com, pass
--target-wpm <N>alongside--import, since the unlocked set is derived against it. With no flag, the target saved in your config is used. - Sessions from non-English layouts are skipped, since this TUI is English-only for now.
- Existing local stats are never overwritten unless you pass
--force, which still writes astats.json.bakbackup first.
Configuration
keybr-tui runs with zero config. To change the defaults, edit ~/.config/keybr-tui/config.toml (the XDG path on Linux):
= 35
= "forgive-mistakes" # or "stop-on-error"
= 100
| Key | Default | Description |
|---|---|---|
target_wpm |
35 |
Target speed in words per minute; drives the confidence threshold |
error_mode |
"forgive-mistakes" |
"forgive-mistakes" advances past typos, "stop-on-error" blocks until you correct them |
fragment_length |
100 |
Characters of practice text generated per lesson |
natural_words |
true |
Prefer real English words, falling back to the phonetic model when none fit your active letters |
daily_goal_minutes |
30 |
Daily practice goal in minutes; 0 hides the daily-goal indicator |
alphabet_size |
0.0 |
Fraction of the non-starter alphabet to force-unlock regardless of confidence (keybr's alphabetSize), clamped to the range 0.0 to 1.0 |
Stats are stored separately. Run keybr-tui --data-dir to find them.
Documentation
- docs/comparison.md: how keybr-tui compares to other typing trainers
- docs/faq.md: frequently asked questions
- docs/troubleshooting.md: common issues and fixes
- CONTRIBUTING.md: building from source, project layout, and the contribution workflow
Credits
Algorithm inspired by keybr.com by aradzie. Built with ratatui and crossterm.