{"id":46941115,"url":"https://github.com/alexylon/clavirio","last_synced_at":"2026-03-12T08:02:00.634Z","repository":{"id":342806270,"uuid":"1173938354","full_name":"alexylon/clavirio","owner":"alexylon","description":"A terminal typing tutor built with Rust and ratatui","archived":false,"fork":false,"pushed_at":"2026-03-10T17:55:44.000Z","size":4879,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-11T11:12:43.619Z","etag":null,"topics":["colemak","dvorak","qwerty","ratatui","ratatui-rs","rust","rust-lang","rustlang","terminal-ui","touch-typing","touch-typing-tutor","tui","tui-rs","typing","typing-practice","typing-trainer","typing-tutor"],"latest_commit_sha":null,"homepage":"https://www.clavir.io","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexylon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T22:50:12.000Z","updated_at":"2026-03-10T17:55:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alexylon/clavirio","commit_stats":null,"previous_names":["alexylon/ferrotype","alexylon/clavirio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alexylon/clavirio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexylon%2Fclavirio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexylon%2Fclavirio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexylon%2Fclavirio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexylon%2Fclavirio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexylon","download_url":"https://codeload.github.com/alexylon/clavirio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexylon%2Fclavirio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30419274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T07:30:13.030Z","status":"ssl_error","status_checked_at":"2026-03-12T07:29:54.885Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["colemak","dvorak","qwerty","ratatui","ratatui-rs","rust","rust-lang","rustlang","terminal-ui","touch-typing","touch-typing-tutor","tui","tui-rs","typing","typing-practice","typing-trainer","typing-tutor"],"created_at":"2026-03-11T07:04:51.155Z","updated_at":"2026-03-12T08:02:00.629Z","avatar_url":"https://github.com/alexylon.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# clavirio\n\n![](https://github.com/alexylon/clavirio/actions/workflows/rust.yml/badge.svg) \u0026nbsp; [![Crates.io](https://img.shields.io/crates/v/clavirio.svg?color=blue)](https://crates.io/crates/clavirio)\n\n[www.clavir.io](https://www.clavir.io)\n\n*From Latin **clavis** (key) — a terminal typing tutor.*\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"/assets/images/screenshot_dark.png\" style=\"width: 800px;\" alt=\"clavirio\"\u003e\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"/assets/images/screenshot_light.png\" style=\"width: 800px;\" alt=\"clavirio\"\u003e\u003c/div\u003e\n\nA terminal typing tutor built with Rust and [ratatui](https://ratatui.rs). Practice with built-in lessons or any text file while a virtual keyboard tracks your keystrokes in real time.\n\n## Features\n\n- **15 built-in lessons** — progressive drills from home row basics to full paragraphs and code; lessons 1–9 are tailored to each keyboard layout, lessons 10–15 are shared\n- **Live stats** — WPM, accuracy %, elapsed time, keystrokes, and line progress update as you type\n- **Keyboard layouts** — supports QWERTY, Dvorak, and Colemak; switch with `l` on the main menu\n- **Virtual keyboard** — highlights the expected next key (including Shift) with a finger hint (**P**inky, **R**ing, **M**iddle, **I**ndex, **T**humb) on the top border; adapts to macOS and PC layouts\n- **Error feedback** — wrong keystrokes are shown inline and block progress until corrected with Backspace\n- **Completion summary** — final WPM, accuracy percentage, and your weakest keys\n- **Session history** — results saved to `~/.clavirio/history.json` with per-lesson tracking, scrollable history view, and averages across completed sessions\n- **Display settings** — toggle fingers, hints, keyboard, and dark/light theme from the main menu (`1`–`4`); all preferences saved to `~/.clavirio/settings.toml`\n- **Progress tracking** — the menu cursor remembers your last built-in lesson: points to it if unfinished, advances to the next if completed\n- **Custom text** — load any text file via `Ctrl-F` or as a CLI argument\n- **Graceful shutdown** — in-progress sessions are saved on SIGTERM/SIGHUP\n\n## Lessons\n\nLessons 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.\n\n| # | Lesson | QWERTY | Dvorak | Colemak |\n|---|--------|--------|--------|---------|\n| 1 | Index Keys | f j | u h | t n |\n| 2 | Middle Keys | d k (+ f j) | e t (+ u h) | s e (+ t n) |\n| 3 | Ring \u0026 Pinky | s l ; (+ f j d k) | o n s (+ a) | r i o (+ a) |\n| 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 |\n| 5 | Home Reach | g h | i d | d h |\n| 6 | Top Intro | e i r u | p c r l | f p l u |\n| 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 ; |\n| 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 , . |\n| 9 | All Letters | Pangrams | Pangrams | Pangrams |\n\n| # | Lesson | Focus |\n|---|--------|-------|\n| 10 | Capitals \u0026 Shift | Mixed case |\n| 11 | 0-9 Numbers | Numbers in context |\n| 12 | Punctuation \u0026 Symbols | Special characters |\n| 13 | Common Words | High-frequency words |\n| 14 | Full Paragraphs | Real-world text |\n| 15 | Code (Rust) | Programming syntax |\n\n## Build \u0026 Run\n\n```\ncargo build --release\ncargo run\n```\n\nOptionally pass a file directly:\n\n```\ncargo run -- sample.txt\n```\n\n## Terminal Size\n\nclavirio is a terminal UI application — your terminal window should be large enough to display all elements (text panel, keyboard, stats).\nOn a laptop screen this usually means a maximized terminal window.\n\n## Controls\n\n| Key | Action |\n|-----|--------|\n| `↑`/`↓` or `k`/`j` | Navigate lesson menu / scroll history |\n| `Enter` | Start selected lesson |\n| `l` | Cycle keyboard layout: QWERTY → Dvorak → Colemak |\n| `1` | Toggle finger hints (requires hints on) |\n| `2` | Toggle key hints |\n| `3` | Toggle virtual keyboard |\n| `4` | Toggle dark/light theme |\n| `h` | View session history |\n| `Ctrl-F` | Open file path input |\n| `Ctrl-R` | Restart current text |\n| `Ctrl-C` | Save and quit immediately |\n| `Esc` | Save and back to menu / quit |\n| `Backspace` | Correct a mistake |\n| `r` | Restart (completion screen) |\n\n## Settings\n\nPreferences are stored in `~/.clavirio/settings.toml` and saved automatically.\n\n```toml\n[keyboard]\nlayout = \"qwerty\"      # qwerty, dvorak, colemak\n\n[display]\nshow_keyboard = true\nshow_hints = true\nshow_fingers = true\ntheme = \"dark\"          # dark, light\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexylon%2Fclavirio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexylon%2Fclavirio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexylon%2Fclavirio/lists"}