A terminal-first typing game inspired by MonkeyType and TypeRacer.
Project description
⌨ TYPEFASTER
A terminal-first typing game inspired by MonkeyType and TypeRacer — race quotes, beat your ghost, climb leaderboards, and play live multiplayer with friends. Pure TUI, no browser, no GUI.
brew install Anoshor/typefaster/typefaster # or: pipx install typefaster-cli
typefaster
Install
Homebrew (macOS / Linux)
brew install Anoshor/typefaster/typefaster
pipx (any OS with Python 3.11+) — fastest
pipx install typefaster-cli
Verify: typefaster version
Play (offline — no account, no internet)
Just run it:
typefaster
Keyboard-only menu:
- Quick Race — a fresh random quote each time; race your personal-best ghost.
- Time Attack — type for 30 / 60 / 120s (←/→ to change the duration inline).
- Practice — pick a mode/ghost.
- Daily Challenge — same quote for everyone each day, local leaderboard.
- Stats / History / Profile / Leaderboard / Settings.
Live WPM, accuracy, progress, and an animated ghost bar. Backspace corrects mistakes (original errors still count, MonkeyType-style). All progress is saved locally in SQLite.
Direct commands too:
typefaster race # quote race
typefaster race --mode time --time 60
typefaster daily
typefaster stats | typefaster history
Play online (multiplayer lobbies)
It works out of the box against the public server — no setup. From the main menu pick Account to register/login, then Play Online:
Account → Register / Login (password, GitHub, or Google)
Play Online → ➕ Create a lobby → share the join code
→ or type a friend's code + Enter to join
In the waiting room press R to ready; the server runs the countdown, sends everyone the same quote, shows live progress bars, and scores results authoritatively (with anti-cheat). Esc leaves.
Prefer the CLI?
typefaster register <name> # or: typefaster login --github / --google
typefaster lobby create --name "Friday" --time 60
typefaster lobby join ABC123
typefaster leaderboard global # global | daily | weekly
Self-host the server (optional)
The game ships pointing at a public server, but you can run your own:
git clone https://github.com/Anoshor/typefaster-cli && cd typefaster-cli
cp .env.example .env # set TYPEFASTER_JWT_SECRET
make up # Redis + FastAPI server on :8000 (Docker)
typefaster config set-server http://localhost:8000
Deploy guides: docs/deploy-oracle.md (free 24/7 VM) ·
docs/deploy-fly.md · TLS + hardening in
docs/SECURITY-REVIEW.md.
How it works
- Client: Python · Typer (CLI) · Textual + Rich (TUI) · SQLite (local progress) · httpx + websockets (online).
- Server: FastAPI · WebSockets · Redis · Pydantic — server-authoritative race timing and scoring.
- Deep dive:
docs/DEEPDIVE.md· architecture:docs/architecture.md.
Develop
make install # editable install + dev deps
make play # run it
make check # ruff + mypy + pytest
Contributions welcome — see CONTRIBUTING.md.
License
MIT — see LICENSE. Crafted by Anoshor Paul.
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 typefaster_cli-0.2.0.tar.gz.
File metadata
- Download URL: typefaster_cli-0.2.0.tar.gz
- Upload date:
- Size: 125.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27428ae6f698f5ce001183c9c03a4560ebe1c24479d873f4766675401481b800
|
|
| MD5 |
cc1ffa34a5038aa2e618064e031fd19a
|
|
| BLAKE2b-256 |
85c64f4af83f79e07fde36e4f06df6e03ab30e0ee8723c9fb57fb1f4d4a7f1fd
|
Provenance
The following attestation bundles were made for typefaster_cli-0.2.0.tar.gz:
Publisher:
release.yml on Anoshor/typefaster-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typefaster_cli-0.2.0.tar.gz -
Subject digest:
27428ae6f698f5ce001183c9c03a4560ebe1c24479d873f4766675401481b800 - Sigstore transparency entry: 1810293091
- Sigstore integration time:
-
Permalink:
Anoshor/typefaster-cli@8e2ead324fbbf67aa4cae80fd4fb5d561b59c9a1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Anoshor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8e2ead324fbbf67aa4cae80fd4fb5d561b59c9a1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file typefaster_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: typefaster_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 75.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d09722fb75dc6328be22e51ae29aea0ba31fdc729575de9e5bb116feab26f395
|
|
| MD5 |
6ae50a9e22cef06791c4229d194de674
|
|
| BLAKE2b-256 |
239b0995712152209c00b2f5cf307c677cd29ce5d28962f203235ae1e8f34e0d
|
Provenance
The following attestation bundles were made for typefaster_cli-0.2.0-py3-none-any.whl:
Publisher:
release.yml on Anoshor/typefaster-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typefaster_cli-0.2.0-py3-none-any.whl -
Subject digest:
d09722fb75dc6328be22e51ae29aea0ba31fdc729575de9e5bb116feab26f395 - Sigstore transparency entry: 1810293152
- Sigstore integration time:
-
Permalink:
Anoshor/typefaster-cli@8e2ead324fbbf67aa4cae80fd4fb5d561b59c9a1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Anoshor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8e2ead324fbbf67aa4cae80fd4fb5d561b59c9a1 -
Trigger Event:
push
-
Statement type: