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.1.tar.gz (108.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.1-py3-none-any.whl (70.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: typefaster_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 108.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.1.tar.gz
Algorithm Hash digest
SHA256 2d8a941fac934f24ddc6f989e7d3de3b3906d12be7dc0b837998735f5c5e15c3
MD5 2c5eb985bdaf8f562399c0db76b9f7b6
BLAKE2b-256 af7c47af4fdf9a50b77abbd2151871d0f2eb824c608092a672c85cca6c744b11

See more details on using hashes here.

Provenance

The following attestation bundles were made for typefaster_cli-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: typefaster_cli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 70.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ca95efc505e1fa9e9138d18f2a17804541ff1b69fd97b24dbfa7307f4c34c737
MD5 28bee6596c33f127163297a99a559b47
BLAKE2b-256 e3e47417c0f9afe6c0e7706f63df4fb7278339fcfdf89ea2d2f71425e8c8a150

See more details on using hashes here.

Provenance

The following attestation bundles were made for typefaster_cli-0.1.1-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