{"id":47516142,"url":"https://github.com/emanuel2718/termitype","last_synced_at":"2026-04-01T07:00:45.862Z","repository":{"id":277931025,"uuid":"857594352","full_name":"emanuel2718/termitype","owner":"emanuel2718","description":"TUI typing game, inspired by a certain typing test you might know.","archived":false,"fork":false,"pushed_at":"2026-03-02T18:48:15.000Z","size":10255,"stargazers_count":10,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-02T20:47:03.366Z","etag":null,"topics":["rust","terminal","tui","typing","typing-game","typing-practice","typing-test","typingtest"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emanuel2718.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":"2024-09-15T04:30:07.000Z","updated_at":"2026-03-02T18:48:19.000Z","dependencies_parsed_at":"2025-04-12T20:22:41.516Z","dependency_job_id":"60585fd7-3b20-41c3-8c01-fe1d08f883b0","html_url":"https://github.com/emanuel2718/termitype","commit_stats":null,"previous_names":["emanuel2718/termitype"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/emanuel2718/termitype","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emanuel2718%2Ftermitype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emanuel2718%2Ftermitype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emanuel2718%2Ftermitype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emanuel2718%2Ftermitype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emanuel2718","download_url":"https://codeload.github.com/emanuel2718/termitype/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emanuel2718%2Ftermitype/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31269179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T06:57:45.811Z","status":"ssl_error","status_checked_at":"2026-04-01T06:57:42.389Z","response_time":53,"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":["rust","terminal","tui","typing","typing-game","typing-practice","typing-test","typingtest"],"created_at":"2026-03-27T13:00:30.252Z","updated_at":"2026-04-01T07:00:45.854Z","avatar_url":"https://github.com/emanuel2718.png","language":"Rust","funding_links":[],"categories":["\u003ca name=\"typing\"\u003e\u003c/a\u003eTyping test and practice"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🦀 termitype\n\n[![Crates.io](https://img.shields.io/crates/v/termitype.svg)](https://crates.io/crates/termitype)\n[![Build Status](https://github.com/emanuel2718/termitype/workflows/CI/badge.svg)](https://github.com/emanuel2718/termitype/actions)\n[![License: GPL-3](https://img.shields.io/badge/License-GPL3-blue.svg)](https://opensource.org/license/GPL-3.0)\n\n**Feature-rich terminal typing test**\n\n\u003cp align=\"center\"\u003e\n    Heavily inspired by a certain typing test you might know.\n    \u003cbr /\u003e\n    \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\n    ·\n    \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\n    ·\n    \u003ca href=\"#mappings\"\u003eMappings\u003c/a\u003e\n    ·\n    \u003ca href=\"#options\"\u003eOptions\u003c/a\u003e\n    ·\n    \u003ca href=\"#development\"\u003eDevelopment\u003c/a\u003e\n    ·\n    \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n    ·\n    \u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\n    ·\n    \u003ca href=\"#acknowledgments\"\u003eAcknowledgments\u003c/a\u003e\n  \u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/emanuel2718/termitype/main/assets/demo.gif\" alt=\"Termitype demo\" width=\"600\"\u003e\n\u003c/p\u003e\n\n## Installation\n\n### Quick Install\n\nInstall the latest pre-built binary for your platform (recommended):\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/emanuel2718/termitype/main/scripts/install.sh | bash\n```\n\nBinaries are available on the [GitHub releases page](https://github.com/emanuel2718/termitype/releases).\n\n### Homebrew\n\n```sh\nbrew tap emanuel2718/termitype\nbrew install termitype\n```\n\n### Arch Linux (AUR)\n\n```sh\nyay -S termitype\n```\n\n### From Crates.io\n\n```sh\ncargo install termitype\n```\n\n### From Source\n\n```sh\ncargo install --git https://github.com/emanuel2718/termitype.git termitype\n```\n\n## Usage\n\n### Basic Usage\n\n```sh\n# Start typing\ntermitype\n\n# See available CLI arg options (all options can also be configured via the in-game menu)\ntermitype --help\n```\n\n## Mappings\n\n| Mapping        | Mode      | Action                              |\n| -------------- | --------- | ----------------------------------- |\n| `\u003cC-Space\u003e`    | `Global`  | Toggle Menu                         |\n| `\u003cC-c\u003e`        | `Global`  | Quit Application                    |\n| `\u003cC-z\u003e`        | `Global`  | Quit Application                    |\n| `\u003cC-p\u003e`        | `Global`  | Toggle Command Palette              |\n| `\u003cC-l\u003e`        | `Global`  | Toggle Leaderboard Screen           |\n| `\u003cC-t\u003e`        | `Global`  | Randomize Theme                     |\n| `\u003cEsc\u003e`        | `Global`  | Toggle Menu                         |\n| `\u003cS-N\u003e`        | `Results` | Restart                             |\n| `\u003cS-R\u003e`        | `Results` | Redo last test                      |\n| `q`            | `Results` | Quit Application                    |\n| `m`            | `Results` | Switch to `Minimal` Variant         |\n| `n`            | `Results` | Switch to `Neofetch` Variant        |\n| `g`            | `Results` | Switch to `Graph` Variant           |\n| `\u003cUp\u003e`         | `Results` | Cycle to next ASCII Art             |\n| `\u003cDown\u003e`       | `Results` | Cycle to previous ASCII Art         |\n| `\u003cEsc\u003e`        | `Menu`    | Go back                             |\n| `/`            | `Menu`    | Start Search                        |\n| `\u003cC-y\u003e/\u003cCR\u003e`   | `Menu`    | Confirm selection                   |\n| `\u003cSpace\u003e`      | `Menu`    | Toggle selection (if toggable item) |\n| `\u003cC-n\u003e/\u003cDown\u003e` | `Menu`    | Next item                           |\n| `\u003cC-p\u003e/\u003cUp\u003e`   | `Menu`    | Previous item                       |\n| `j/k`          | `Menu`    | Next/previous (in normal mode)      |\n\n## Options\n\n| Option                       | Description                                                                                     |\n| :--------------------------- | :---------------------------------------------------------------------------------------------- |\n| `-t`, `--time \u003cSECONDS\u003e`     | Test duration in seconds. Enforces Time mode                                                    |\n| `-w`, `--words \u003c\"WORD1 ..\"\u003e` | Custom words for the test. Enforces Word mode                                                   |\n| `-c`, `--count \u003cCOUNT\u003e`      | Number (count) of words to type                                                                 |\n| `-n`, `--use-numbers`        | Include numbers in the test word pool                                                           |\n| `-s`, `--use-symbols`        | Include symbols in the test word pool                                                           |\n| `-p`, `--use-punctuation`    | Include punctuation in the test word pool                                                       |\n| `-l`, `--language \u003cLANG\u003e`    | Language dictionary the test will use                                                           |\n| `--theme \u003cTHEME\u003e`            | The theme of the application                                                                    |\n| `--ascii \u003cASCII\u003e`            | The ASCII art used in the `Neofetch` results                                                    |\n| `--cursor \u003cSTYLE\u003e`           | Cursor style variant: beam, block, underline, blinking-beam, blinking-block, blinking-underline |\n| `--results \u003cSTYLE\u003e`          | Results style variant: minimal, neofetch, graph                                                 |\n| `--lines \u003cCOUNT\u003e`            | Number of visible text lines [default: 3]                                                       |\n| `--hide-live-wpm`            | Hide live WPM counter                                                                           |\n| `--hide-notifications`       | Hide notifications                                                                              |\n| `--no-save`                  | Do not save tests results                                                                       |\n| `--reset`                    | Resets everything back to default state                                                         |\n\n### Examples\n\n```sh\n# All of the options below can also be changed at runtime via the menu.\ntermitype -t 60                        # Run a 60-second typing test\ntermitype -c 100                       # Test will contain exactly 100 random words\ntermitype --theme \"catppuccin-mocha\"   # Use catppuccin-mocha theme\ntermitype -l spanish                   # Use Spanish test words\ntermitype -spn                         # Enable symbols, punctuation, and numbers\ntermitype --results neofetch           # Use neofetch inspired results\ntermitype --no-save                    # Do not save tests results\ntermitype --hide-notifications         # Do not show notifications\n```\n\n## Development\n\n### Prerequisites\n\n- Rust 1.88+\n- Cargo\n\n### Quick Start\n\n1. **Clone the repository**:\n\n```sh\ngit clone https://github.com/emanuel2718/termitype.git\ncd termitype\n```\n\n2. **Run the application**:\n\n```sh\n# Development build\ncargo run\n\n# Release build\ncargo run --release\n```\n\n## Themes\n\nTermitype includes a curated collection of themes sourced from the [iTerm2 Ghostty Color Schemes Repo](https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master/ghostty) repository. Themes can be previewed and changed in real-time.\n\n## Contributing\n\n\u003e [!Warning]\n\u003e TODO: write out the contribution guideline just in the case there's one person interested in this.\n\n## Roadmap\n\n### Upcoming Features\n\n- [ ] **Package Distribution**: Release on Homebrew, AUR, nixpkgs, etc.\n- [ ] **User config file**: Have a user editable config file in `$XDG_CONFIG_HOME/termitype/config.toml`\n- [ ] **Configurable Mappings**: Custom mappings\n- [ ] **Custom ASCII arts**: Allow usage of custom ASCII arts\n- [ ] **Custom theme**: Allow setting custom themes with names\n- [ ] **Wordlist Improvements**: Improve the quality and distribution of words\n- [ ] **Multiplayer**: Race other people in realtime with private rooms of sort (will use websockets for this)\n- [x] **Local Results Tracking**: Track test results over time (best use case is to track highest WPM on specific modes) with opt-out option\n\n## License\n\nThis project is licensed under the GPL-3.0 license - see [LICENSE](LICENSE) for details.\n\n## Acknowledgments\n\n- [Monkeytype](https://github.com/monkeytypegame/monkeytype) for the inspiration.\n- [Ratatui](https://github.com/ratatui-org/ratatui) for the amazing TUI framework.\n- [iTerm2 Ghostty Color Schemes](https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master/ghostty) for the themes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femanuel2718%2Ftermitype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femanuel2718%2Ftermitype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femanuel2718%2Ftermitype/lists"}