{"id":16609869,"url":"https://github.com/chinese-soup/cursestype","last_synced_at":"2026-04-23T10:33:29.607Z","repository":{"id":43818101,"uuid":"424437401","full_name":"chinese-soup/cursestype","owner":"chinese-soup","description":"Simple Linux TUI-only MonkeyType clone written in Python and curses","archived":false,"fork":false,"pushed_at":"2022-11-05T00:31:54.000Z","size":763,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-22T19:59:15.195Z","etag":null,"topics":["curses","keyboard","monkeytype","ncurses","ncurses-tui","python","python3","terminal","terminal-app","terminal-based","terminal-game","test","tui","typing","typingspeedtest","wpm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chinese-soup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-04T01:40:51.000Z","updated_at":"2022-10-31T18:18:06.000Z","dependencies_parsed_at":"2022-08-25T17:40:56.029Z","dependency_job_id":null,"html_url":"https://github.com/chinese-soup/cursestype","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chinese-soup/cursestype","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinese-soup%2Fcursestype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinese-soup%2Fcursestype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinese-soup%2Fcursestype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinese-soup%2Fcursestype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chinese-soup","download_url":"https://codeload.github.com/chinese-soup/cursestype/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinese-soup%2Fcursestype/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32176696,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["curses","keyboard","monkeytype","ncurses","ncurses-tui","python","python3","terminal","terminal-app","terminal-based","terminal-game","test","tui","typing","typingspeedtest","wpm"],"created_at":"2024-10-12T01:29:19.862Z","updated_at":"2026-04-23T10:33:24.598Z","avatar_url":"https://github.com/chinese-soup.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cursestype\n\n## About\n* A bad [MonkeyType](https://monkeytype.com) (or any generic WPM typing tester app) clone build exclusively using Python's built-in `curses` wrapper.\n* Work in progress.\n\n### (Obligatory) current state screenshot\n![GIF recording of the program in action](assets/screenshot.gif)\n\n## Motivation\n* Just for fun \u0026 learning about ncurses\n\n## Requirements\n* Python \u003e 3.7\n### Why `curses`\n* It's built-in and no external dependencies are required.\n\n## Usage\nSo far it's just:\n### Start with language wordlist (stored in words/*.py):\n```bash\n$ chmod +x cursestype.py\n./cursestype.py czech\n```\nNote: `curses` is not supported in Windows `cmd.exe`, use Windows Subsystem for Linux.\n\n## Limitations\n* Only supports Latin alphabet languages\n\n## TODO\n- [ ] keep a dictionary of currently OK chars\n- [ ] don't let user go back a word if he commits it (space) like MonkeyType doesn't (Confidence mode?)\n- [x] if a user backspaces a green thing (a CORRECT char), make it gray again\n- [ ] Multiline w.move()s - SOME work done\n  - [x] refactor this, need to be able to go back to previous line\n  - [ ] refactor this, needs to be dynamic! \n        - how about it uses the \"keep a dictionary of currently OK chars\" to rebuild?\n        - with of course, also proper w.move()\n    - [ ] with dynamic i also mean maybe CONSIDER: Do it like monkeytype where two lines are visible, then third, but the active one after finishing the 1st one is ALWAYS the 2nd one and they scroll up (this is true for timed, for set ones the last line is obviously finished as well on screen)\n    \n- [ ] newlines only as text wrapping\n- [ ] don't count newlines as a character\n- [ ] Menu to change language file etc.\n- [ ] Let user specify a text file to load to type OR just generate words from language files that user selects\n- [x] Languages other than ANSI english\n- [ ] Reafctor language files system\n- [ ] Command line parameters\n- [ ] Timed gamemode (15s/30s/45s/60s)\n- [ ] Record \u0026 replay the run (and save replays?)\n- [ ] Put the text into seperate curses window!!!!\n    - [ ] Stop refreshing the whole win (`w`) to get rid of flashes(?)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchinese-soup%2Fcursestype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchinese-soup%2Fcursestype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchinese-soup%2Fcursestype/lists"}