A fast, keyboard-driven terminal typing test inspired by monkeytype (source) — built in Rust with ratatui.
🚧 Status: in active development. See
SPEC.mdfor the full design and the implementation roadmap.
time words quote zen serika-dark
the quick brown fox jumps over the lazy dog and then
keeps typing while the words scroll smoothly upward as
your caret blinks along each character in real time
30
- Four modes —
time(15/30/60/120s),words(10/25/50/100),quote(filterable by length), andzen(type freely, end when you like). - Faithful metrics — net & raw WPM, accuracy, consistency, and a full character breakdown (correct / incorrect / extra / missed), computed the way monkeytype computes them.
- Live, smooth typing — 3-line scrolling text, a blinking bar caret, and per-character color feedback.
- Results graph — a WPM/raw-over-time chart with error markers, right in your terminal.
- Command palette —
Ctrl+Kto fuzzy-switch mode, value, theme, and quote length. The test is the home screen; no menus to wade through. - Theming — ships with multiple themes and loads your own from a themes directory.
- Personal bests — every test is saved locally; beat your record and it tells you.
- Single binary, zero config — wordlists, quotes, and default themes are embedded. It just runs.
cargo install monketype# build from source
yay -S monketype
# or prebuilt
yay -S monketype-binDownload a binary for your platform from the Releases page
(Linux / macOS / Windows), then put it on your PATH.
monketypeThe typing test starts immediately. Just type.
| Key | Action |
|---|---|
| type | enter characters |
Backspace |
delete (can cross back into previous words) |
Tab |
restart / start the next test |
Ctrl+K |
open the command palette (mode, value, theme…) |
Esc |
open palette (in a test) / go back (in results) |
Enter |
next test (on the results screen) |
Ctrl+C |
quit |
In zen mode, press Esc, Tab, or Enter to finish.
- time — type for a fixed number of seconds; words keep coming.
- words — type a fixed number of words; finish to see your result.
- quote — type a real quote, filterable by length (short / medium / long / all); the source is shown in your results.
- zen — no target text and no clock pressure: type whatever you want and end the test yourself (reports WPM and characters only).
monketype uses role-based themes (TOML files mapping semantic roles — background, text, accent,
error, caret… — to colors). Switch themes from the command palette (Ctrl+K).
Add your own by dropping a .toml file into your themes directory:
~/.config/monketype/themes/my-theme.toml
name = "my-theme"
bg = "#1e1e2e"
sub = "#6c7086"
sub_alt = "#313244"
text = "#cdd6f4"
accent = "#f5c2e7"
error = "#f38ba8"
error_extra = "#7d3c4a"
caret = "#f5c2e7"Themes use 24-bit (truecolor) RGB; use a truecolor-capable terminal for accurate colors.
| Purpose | Location |
|---|---|
| Config | ~/.config/monketype/config.toml |
| Test history | ~/.local/share/monketype/history.jsonl |
| User themes | ~/.config/monketype/themes/*.toml |
(Exact paths follow your platform's XDG conventions.)
cargo run # run the app
cargo test # run the test suite (core logic is fully unit-tested)
cargo build --releaseThe codebase is split into a pure core/ layer (model, generation, input engine, metrics, config,
persistence, theming — no TUI dependencies, fully unit-tested) and a tui/ layer (event loop, screens,
widgets). See SPEC.md for the full architecture and roadmap.
monketype is heavily inspired by monkeytype by Miodec and contributors, and vendors monkeytype's wordlists and quotes from its open-source repository. All credit for that data and for the original concept goes to the monkeytype project. monketype is an independent, non-commercial clone and is not affiliated with or endorsed by monkeytype.
GPL-3.0. Because monketype includes data from the GPL-3.0-licensed monkeytype project, it is distributed under the same terms: you're free to use, modify, and redistribute it, provided derivative works remain under GPL-3.0 and share their source.