Skip to main content

A terminal-first typing game inspired by MonkeyType and TypeRacer.

Project description

⌨ TYPEFASTER-CLI

CI Python License: MIT

A terminal-first typing game inspired by MonkeyType and TypeRacer.

Not a web app. Not a browser game. Not a desktop GUI. A polished Python terminal application that works offline first, then scales to internet multiplayer.

typefaster

…and you're racing within seconds. No login, no server, no Docker, no internet required.


What Phase 1 delivers

  • Instant offline races — random quote, live WPM / accuracy / progress / timer.
  • 30 / 60 / 120 second race modes.
  • Ghost races against your personal-best, last, or a random historical run, animated live.
  • Local profile & stats in SQLite — races played/won, best/avg WPM, best/avg accuracy, total chars, total time, full history.
  • Daily challenge — same quote for everyone each day, with a local daily leaderboard.
  • Polished TUI built on Textual + Rich, keyboard-only, resize-aware.

Planned CLI

typefaster                                   # launch straight into the game
typefaster race --time 60 --ghost personal-best
typefaster race --ghost last
typefaster race --ghost random
typefaster daily
typefaster profile
typefaster stats
typefaster history

Tech stack

Client (Phase 1): Python 3.11+, Typer, Rich, Textual, SQLite (stdlib), platformdirs. Server (Phase 2): FastAPI, asyncio, WebSockets, Pydantic, Redis, Docker Compose.

Repository layout

typefaster-cli/
├── client/typefaster/   # CLI app: domain · services · infra · ui · net · assets
├── server/app/          # FastAPI server: routers · ws · repositories · security
├── shared/              # shared schemas, WS protocol, scoring, anti-cheat
├── infra/               # redis.conf · nginx.conf (TLS + WS proxy)
├── docs/                # architecture, schemas, protocol, deployment, roadmap
├── tests/               # client unit · integration · UI smoke
├── scripts/             # quote dataset tooling
├── docker-compose.yml   # redis + server (+ nginx via --profile proxy)
├── pyproject.toml · Makefile · README.md

See docs/architecture.md for the full design.

Online play (Phase 2)

Run the server stack (Redis + FastAPI + WebSockets) with Docker:

cp .env.example .env       # set TYPEFASTER_JWT_SECRET
make up                    # redis + server on :8000  (make up-proxy adds nginx TLS)

Then, from the client:

typefaster register alice          # create an account
typefaster login alice
typefaster lobby create --name "Friday Sprint" --time 60
typefaster lobby join ABC123       # join a friend's private lobby
typefaster lobby list              # browse public lobbies
typefaster leaderboard global      # global | daily | weekly
typefaster logout

The server is authoritative: it controls race start/finish, re-scores every result, and runs anti-cheat before writing leaderboards. See the docs:

The client points at http://localhost:8000 by default; set server_url in ~/.config/typefaster/auth.json to target a deployed server.

Development

make install   # editable install + dev deps
make play      # launch the game
make test      # pytest
make lint      # ruff
make typecheck # mypy
make format    # black + ruff --fix
make check     # lint + typecheck + test (CI parity)

Note on the monorepo layout: the importable package lives at client/typefaster. A normal install (pip install ., used by Docker and end users) places it on the path automatically. For local development the Makefile exports PYTHONPATH=client, so make play / make test always work. If you invoke tools directly, prefix with PYTHONPATH=client (e.g. PYTHONPATH=client python -m typefaster).

Design preferences locked for Phase 1

  • Quotes: curated public-domain set, tagged short / medium / long for difficulty buckets and 30/60/120s fit.
  • Backspace: allowed (MonkeyType-style) — corrections permitted, original errors still count toward accuracy; exposed as a Settings toggle.

License

MIT.

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

typefaster_cli-0.1.2.tar.gz (111.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

typefaster_cli-0.1.2-py3-none-any.whl (70.3 kB view details)

Uploaded Python 3

File details

Details for the file typefaster_cli-0.1.2.tar.gz.

File metadata

  • Download URL: typefaster_cli-0.1.2.tar.gz
  • Upload date:
  • Size: 111.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for typefaster_cli-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ea890b89dba7e54ec2b01005b964a6554772dd73f171854c7e454954384f7139
MD5 fe053c3d18d705aa9e174afd97daf285
BLAKE2b-256 f8e309874126d15fcdf0cbacfe79c3ff7ec88aefc3a678b105d4e79103904b89

See more details on using hashes here.

Provenance

The following attestation bundles were made for typefaster_cli-0.1.2.tar.gz:

Publisher: release.yml on Anoshor/typefaster-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file typefaster_cli-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: typefaster_cli-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 70.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for typefaster_cli-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 db3e9e36d29d66628219147eca52359b6cf6fe6a3d24abc687c28c0dd36011fe
MD5 69da0c896e688633e2f237e068890dd8
BLAKE2b-256 753b12121a94a2a6715513347ed1ac8f62c70039b4e29488744397f164b30857

See more details on using hashes here.

Provenance

The following attestation bundles were made for typefaster_cli-0.1.2-py3-none-any.whl:

Publisher: release.yml on Anoshor/typefaster-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page