Console touch-typing trainer with gamification
Project description
████████╗██╗ ██╗██████╗ ███████╗██╗ ██╗███████╗██████╗ ██████╗
╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝██║ ██║██╔════╝██╔══██╗██╔═══██╗
██║ ╚████╔╝ ██████╔╝█████╗ ███████║█████╗ ██████╔╝██║ ██║
██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ██╔══██║██╔══╝ ██╔══██╗██║ ██║
██║ ██║ ██║ ███████╗██║ ██║███████╗██║ ██║╚██████╔╝
╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝
A touch-typing trainer that lives in your terminal — a typing course turned into a game you actually want to finish.
Work through a course of lessons, one unlocking the next. Each lesson is gated on speed and accuracy, so you can't sprint past the basics — you earn your way forward. Along the way you rack up XP, climb levels, chase achievements, keep a daily streak alive, and build combos for every key you hit without a typo.
The trainer ships with full English and Russian courses. Your typing language and your menu language are independent — practise Russian text with an English interface, or the other way round.
Quick start
You'll need Python 3.13+. The fastest way in — no install, no cleanup:
uvx typehero
That downloads and runs the latest version in a throwaway environment. (uv is a tiny, fast Python tool runner — brew install uv or see their site.)
Want it to stick around as a real command on your PATH?
uv tool install typehero # or: pipx install typehero
typehero # then just type this anytime
Prefer plain pip into an existing environment? pip install typehero works too — everything it needs (the courses, the interface) comes bundled in.
How to play
- Pick a lesson. The menu is your dashboard: completed lessons are marked, locked ones are greyed out until you clear the one before.
- Take the benchmark (optional but recommended). Before your first lesson, typehero offers a short speed test so it knows where you're starting from. Press
banytime to retake it. - Type the text in front of you. Live stats show your speed, accuracy, and current combo as you go. Pasting is blocked — this is about your fingers, not your clipboard.
- Beat the bar. Clear a lesson by hitting both its target speed and its accuracy threshold. Miss either one and you can retry as many times as you like.
- Watch the numbers climb. Every clear awards XP (more for clean, fast, first-time runs), pushes your level, and may unlock an achievement.
Keys on the menu
| Key | What it does |
|---|---|
b |
Take or retake the speed benchmark |
p |
View your progress — level, XP, stats |
a |
Browse achievements, locked and unlocked |
s |
Settings — switch course or menu language |
q |
Quit |
What you're chasing
- 20 achievements across four themes — speed milestones (40 → 100 WPM), accuracy (95% → flawless), combos (25 → 100 keys in a row), and streaks (3 → 30 days).
- Levels & XP on a rising curve, so each level takes a little more than the last.
- Daily streaks that count calendar days — show up every day to keep the chain.
- Combos that build with every correct key and reset the moment you slip.
Your save file
Your profile lives as a small JSON file under $XDG_CONFIG_HOME (or your platform's default config folder). It's yours — back it up, move it between machines, peek inside. If it ever gets corrupted, typehero backs up the broken copy rather than throwing it away, then starts you a fresh one.
License
MIT. Free to use, free to fork.
Curious how it's built, or want to contribute? The architecture, conventions, and development workflow are documented in CLAUDE.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file typehero-1.1.0.tar.gz.
File metadata
- Download URL: typehero-1.1.0.tar.gz
- Upload date:
- Size: 43.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6554ff0e0943dce4390d37a939c9d58f854e5a5cadb950c4ffa3d749fe3459c
|
|
| MD5 |
0a6215f1343141c41e74a6d6f9664696
|
|
| BLAKE2b-256 |
1dff51bc9194bbde87c6426f80ee3264f2cdc74dcfb0d190f85921aa8634c50b
|
Provenance
The following attestation bundles were made for typehero-1.1.0.tar.gz:
Publisher:
release-please.yml on agolosnichenko/typehero
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typehero-1.1.0.tar.gz -
Subject digest:
a6554ff0e0943dce4390d37a939c9d58f854e5a5cadb950c4ffa3d749fe3459c - Sigstore transparency entry: 1745262541
- Sigstore integration time:
-
Permalink:
agolosnichenko/typehero@e9e7e70293d094d7d2b8c7ec51580dea534c7157 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agolosnichenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@e9e7e70293d094d7d2b8c7ec51580dea534c7157 -
Trigger Event:
push
-
Statement type:
File details
Details for the file typehero-1.1.0-py3-none-any.whl.
File metadata
- Download URL: typehero-1.1.0-py3-none-any.whl
- Upload date:
- Size: 66.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcc1499c7f0799e80f27b5c8854517eb7969d7c5d5016d9adb59988df06dcf4b
|
|
| MD5 |
d6902d62df08008e2ee267ea885b7e32
|
|
| BLAKE2b-256 |
ad72f4f7982d53bfbe00fa092c92dbe4fe2307c8dc13abb6703a6a279321bebc
|
Provenance
The following attestation bundles were made for typehero-1.1.0-py3-none-any.whl:
Publisher:
release-please.yml on agolosnichenko/typehero
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typehero-1.1.0-py3-none-any.whl -
Subject digest:
bcc1499c7f0799e80f27b5c8854517eb7969d7c5d5016d9adb59988df06dcf4b - Sigstore transparency entry: 1745262809
- Sigstore integration time:
-
Permalink:
agolosnichenko/typehero@e9e7e70293d094d7d2b8c7ec51580dea534c7157 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agolosnichenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@e9e7e70293d094d7d2b8c7ec51580dea534c7157 -
Trigger Event:
push
-
Statement type: