GitType

unhappychoice·unhappychoice.gittype

A typing practice tool using your own code repositories

GitType is a Rust CLI typing game that turns source code from real repositories into typing challenges. It parses code with tree-sitter, renders a terminal UI, tracks real-time WPM/accuracy/consistency metrics, and unlocks developer titles through a ranking system. Multi-language support includes Rust, TypeScript, JavaScript, Python, Go, Ruby, Swift, Kotlin, Java, PHP, C#, C, C++, Haskell, Dart, Scala, Clojure, Elixir, Erlang, and Zig.

winget install --id unhappychoice.gittype --exact --source winget

Latest 0.10.1·July 25, 2026

Release Notes

✨ Features

  • feat: add winget package distribution (e202bd9) 🐛 Bug Fixes
  • fix(clippy): remove useless borrow in println! argument (aff9611)
  • fix(nix): use rust-overlay's latest stable for unstable package (6b54544)
  • fix: update Dart parser queries for tree-sitter-dart 0.2.0 (dbc6aaa)
  • fix: guard run_screen entrypoints against non-tty environments (3d77af5) 📝 Other Changes
  • chore: bump version to v0.10.1 (b05843b)
  • chore(deps): bump glob from 0.3.3 to 0.3.4 (8179e1e)
  • chore(deps): bump clap from 4.6.3 to 4.6.4 (5c7dc7f)
  • chore(deps): bump clap from 4.6.2 to 4.6.3 (70990ce)
  • chore(deps): bump ignore from 0.4.30 to 0.4.31 (ab5555b)
  • chore(deps): bump anyhow from 1.0.103 to 1.0.104 (b6e1c8d)
  • chore(deps): bump serde_json from 1.0.150 to 1.0.151 (b43f537)
  • chore(deps): bump async-trait from 0.1.89 to 0.1.91 (e082137)
  • chore(deps): bump thiserror from 2.0.18 to 2.0.19 (eb839bc)
  • chore(deps): bump serde from 1.0.228 to 1.0.229 (aed2298)
  • chore(deps): bump ignore from 0.4.29 to 0.4.30 (cd0c127)
  • chore(deps): bump uuid from 1.23.5 to 1.24.0 (0f5164f)
  • chore(deps): bump clap from 4.6.1 to 4.6.2 (f6e835e)
  • chore(deps): bump ignore from 0.4.28 to 0.4.29 (10fdcf5)
  • chore(deps): bump open from 5.3.6 to 5.4.0 (f3489bf)
  • chore(deps): bump uuid from 1.23.4 to 1.23.5 (6e2c8d4)
  • chore(deps): bump ignore from 0.4.27 to 0.4.28 (7afa878)
  • chore(deps): bump rand from 0.10.1 to 0.10.2 (cab3a52)
  • chore(deps): bump ignore from 0.4.26 to 0.4.27 (225abf4)
  • chore(deps): bump open from 5.3.5 to 5.3.6 (4fb6d24)
  • chore(deps): bump anyhow from 1.0.102 to 1.0.103 (6845c6a)
  • chore(deps): bump env_logger from 0.11.10 to 0.11.11 (87f3a94)
  • chore(deps): bump uuid from 1.23.3 to 1.23.4 (9865500)
  • chore(deps): bump log from 0.4.32 to 0.4.33 (880a8a3)
  • chore(deps): bump ratatui from 0.30.1 to 0.30.2 (f0bd102)
  • chore(deps): bump insta from 1.47.2 to 1.48.0 (d811d53)
  • chore(deps): bump rusqlite from 0.40.0 to 0.40.1 (0cbfad9)
  • chore(deps): bump uuid from 1.23.2 to 1.23.3 (03a67cb)
  • chore(deps): bump ratatui from 0.30.0 to 0.30.1 (00f54d4)
  • chore(deps): bump tree-sitter-erlang from 0.18.0 to 0.19.0 (da73532)
  • chore(deps): bump ignore from 0.4.25 to 0.4.26 (79f8d3a)
  • chore(deps): bump chrono from 0.4.44 to 0.4.45 (d9326d6)
  • chore(deps): bump log from 0.4.31 to 0.4.32 (349f44b)
  • chore(deps): bump tree-sitter-swift from 0.7.2 to 0.7.3 (35fd7fc)
  • chore(deps): bump log from 0.4.30 to 0.4.31 (662f472)
  • chore(deps): bump rusqlite from 0.39.0 to 0.40.0 (ba4b7c7)
  • chore(nix): update flake.lock to refresh rust-overlay/nixpkgs (fcf7408)
  • chore(deps): bump git2 from 0.20 to 0.21 (d24b88d)
  • chore(deps): bump uuid from 1.23.1 to 1.23.2 (9193c72)
  • chore(deps): bump log from 0.4.29 to 0.4.30 (ad283ac)
  • chore(deps): bump reqwest from 0.13.3 to 0.13.4 (c35a39a)
  • chore(deps): bump serde_json from 1.0.149 to 1.0.150 (7d286a4)
  • chore(deps): bump tree-sitter-erlang from 0.17.0 to 0.18.0 (7ebcd01)
  • test: cover animation screen downcast behavior (6435d9e)
  • test: cover session summary screen provider (e3abc8c)
  • test: cover typing screen session manager fallbacks (f99ea3a)
  • test: cover stage repository title and difficulty fallbacks (0eb5c80)
  • test: cover JavaScript JSX leaf capture fallback (18f7204)
  • test: cover export command missing output failure (93423cc)
  • test: cover default typing content view render (9b14825)
  • test: cover Ruby extractor chunk and attr fallbacks (6c4b636)
  • test: cover repo play and Java extractor fallbacks (64aa7bc)
  • test: cover loading and repository list fallbacks (e4d32cc)
  • test: cover TypeScript and analytics view fallbacks (f2bfc4d)
  • test: cover TUI stage completion fallbacks (de653f3)
  • test: cover stage builder challenge selection fallbacks (0ce9663)
  • test: cover source code parser progress reporting (a58a620)
  • test: cover generating step cache save skip (2c5a1d0)
  • test: cover local git repository invalid directory error (2b43f29)
  • test: cover Go extractor block name fallbacks (fe68a4f)
  • test: cover trending repository list fallbacks (cbce243)
  • test: cover repository list language fallbacks (5fa0566)
  • test: cover TUI view fallback rendering (16220b7)
  • test: cover C# extractor leaf name fallbacks (6fb7649)
  • test: cover domain service fallback paths (27eae3f)
  • test: cover PHP extractor leaf name fallback (f9b7e34)
  • test: cover gradation text color segments (83ecf82)
  • test: cover typing view session metrics fallback (5a61600)
  • test: cover typing dialog disabled skip option (1a4b82c)
  • test: cover repository DAO row type errors (5ffbe68)
  • test: cover loading step git repository fallbacks (e969c37)
  • test: cover performance metrics view fallbacks (2de8c26)
  • test: cover stage details view rendering (db960ad)
  • test: cover session recording missing repository error (665ebc4)
  • test: cover rank and typing header view fallbacks (119225d)
  • test: cover loading view fallback rendering (f0542eb)
  • test: cover challenge analytics and comment fallbacks (a447116)
  • test: cover zero-width comment range truncation (e2f7f13)
  • test: cover cpp extractor missing variable fallback (941d7eb)
  • test: cover challenge DAO rowid type errors (94c159c)
  • test: cover scala extractor fallback behavior (0d26b1a)
  • test: cover ruby and typescript extractor name fallbacks (5ff97c8)
  • docs: add Discord and blog mentions to Support section (d46cca6)
  • docs: add general hashtags to share links (4a43bc1)
  • test: cover haskell extractor capture fallbacks (bcea73f)
  • docs: add Support section with star and share links to README (322183d)
  • test: cover parser cache bounds and challenge DAO schema errors (e9d260c)
  • test: cover c extractor leaf capture fallbacks (186e4bf)
  • test: cover rust extractor unknown capture fallback (549820b)
  • test: cover whitespace before newline skip behavior (9420b56)
  • test: cover typing animation line advance delay (1933c12)
  • test: cover screen runner context drop cleanup (8932b53)
  • test: cover erlang function name extraction fallbacks (01a490e)
  • test: cover compressed file storage serialization failure (f846610)
  • test: cover CLI runner repo list, play, and default command without tty (a310fac)
  • test: cover score view fallback without best status (e1fcb6b)
  • chore(deps): bump tree-sitter-erlang from 0.16.0 to 0.17.0 (7b5bb32)
  • test: cover analytics screen language details render fallback when detailed stats missing (70a8e9e)
  • test: cover total summary share screen provider, escape/ctrl-c navigation, and share platform key pop events (66dc552)
  • test: cover initial schema migration tables/indexes, idempotency, trait dispatch, and migrations registry (7f378e3)
  • test: cover cpp extractor constructor/operator/type/function extract_name fallback branches (1c5fcad)
  • test: cover session manager skip and finalize current stage session challenge recording (8883f4e)
  • test: cover trending language selection screen space selection, key navigation clamps, unhandled keys, and downcast (0455a36)
  • test: cover csharp namespace/field fallback, javascript destructuring/jsx fallback, and compressed file storage type mismatch error (a9131bc)
  • test: cover database trait dispatch, oss insight client default, and file storage mock read_dir/remove_dir_all (be12ab1)
  • test: cover trending repository selection screen init fallback, key navigation clamps, space selection, and downcast (43f5b74)
  • test: cover ascii theme language color lookup and session result tier name mapping across score tiers (55ade2f)
  • test: cover dart extract_name recursion into function_signature and initialized_variable_definition children (9a3698a)
  • test: cover c extractor variable/function/struct/macro extract_name fallback branches (9a75294)
  • test: cover elixir extract_name dot-target call argument identifier and no-identifier fallback (d12886f)
  • test: cover records screen init fallback, key handling, sort/filter cycles, and rendering branches (46a71d9)
  • test: cover title screen builder setters, init fallback, unhandled keys, and downcast (34a829f)
  • test: cover repo play screen selection accessors, navigation clamps, key release, and downcast (646b979)
  • test: cover panic screen location-line render, provider, downcast, and timestamp fallback (1854628)
  • test: cover screen transition manager non-concrete session manager handlers and in-progress skip-start branch (75d6fee)
  • test: cover records screen filter state defaults, sort/date variants, and selection guards (623544b)
  • test: cover session detail screen init guards, scroll bounds, and render after scroll (a96d3f0)
  • test: cover best records view rendering with status flags, score fallback, and missing records (72d1f1f)
  • test: cover session summary share screen init fallback, render, and share key paths (26f82f5)
  • test: cover local git client remote parsing, dirty tree, and interface dispatch (948391e)
  • test: cover stage summary screen render, key handling, and trait methods (60c1561)
  • test: cover help screen section navigation, scrolling, and trait methods (c0b0ae7)
  • test: cover repo clear command short-circuit and screen runner non-tty error (9f4e2cd)
  • test: cover session details dialog and failure screen fallback init and trait methods (aac0abf)
  • test: cover total summary share screen provider, key handling, and share URLs (e7f17e9)
  • test: cover animation screen init fallback, key handling, and trait methods (a1644c6)
  • test: cover total summary screen data provider and screen trait methods (2ccf0bb)
  • test: cover logging fallback paths and sharing URL encoding (43e8b43)
  • test: cover analytics screen navigation keys and view mode helpers (1a95d2f)
  • test: cover session dao filtered queries and missing repository_id errors (4ad5024)
  • test: cover clojure extractor capture name and extract_name branches (ffca957)
  • test: cover session summary screen key actions and lifecycle (26cbca7)
  • test: cover loading screen update, completion, and trait methods (274c49b)
  • test: cover repository dao language aggregation and lookup branches (6a4ed9c)

Installer type: zip

x64C9D3D7AD28C8C95F27C46BADD8AFF6A0CB26D76F91EA1971079D6CB1AC2AAF76

Details

Homepage
https://github.com/unhappychoice/gittype
License
MIT
Publisher
unhappychoice
Support
https://github.com/unhappychoice/gittype/issues
Copyright
Copyright (c) unhappychoice
Moniker
gittype

Tags

clicodedevelopergitpracticeterminaltuityping

Older versions (1)

0.10.0
x6462E625B18AD860235BF9E1A618525FB20B7E0BFF5614D142E2803629D163A8B8