A collection of polished terminal mini-games, in one binary.
35 games — Snake · Tetris · 2048 · Minesweeper · Pong · Wordle · Chess · Sokoban · Breakout · Solitaire · and many more, all in your terminal, built on ratatui.
brew install furybee/homebrew-tap/cli-gamescurl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/furybee/cli-games/releases/latest/download/cli-games-installer.sh | shgit clone https://github.com/furybee/cli-games
cd cli-games
cargo install --path crates/appcli-games # open the menu and pick a game
cli-games snake # launch a game directly by id| Navigate the menu | ↑ / ↓ (or j / k) |
Enter to play |
| Filter the menu | f (or /) then type |
Esc clears the filter |
| In a game | q / Esc back to menu |
Ctrl-C quit |
Controls are shown in-game. Most games also accept
w/a/s/d.
All 35 games, launched from the menu or directly with cli-games <id>:
cli-games is a Cargo workspace built so many games can be developed in parallel
without ever colliding — each game is a self-contained crate that registers
itself with the launcher.
crates/
core/ game_core — the Game trait, runtime context, registry
app/ cli-games — launcher TUI (menu + frame loop)
games/
_registry/ games_all — links every game so it's discovered at runtime
snake/ game_snake — reference game / template
<game>/ one crate per game
- A game depends only on
game_core(+ratatui) and implements one small trait. - It self-registers with the
register_game!macro — there's no central list to edit. - The launcher discovers games at link time via
inventory. - Adding a game means a new crate plus two append-only lines — so parallel work merges without conflicts.
See docs/ADD_A_GAME.md for the full walkthrough, and CLAUDE.md for the conventions. In short:
cp -r crates/games/snake crates/games/<game> # start from the template
# implement the Game trait, then register it
cargo run -p cli-games -- <game> # try itSpin up isolated sessions for several games at once:
./scripts/spawn-games.sh tetris 2048 minesweeper # prints a `claude --worktree` command per gamecargo run -p cli-games # run the launcher
cargo build # build everything
cargo test --workspace # run tests
cargo clippy --workspace # lint (CI runs this with -D warnings)
cargo fmt --all # formatCI runs fmt, clippy (-D warnings), build, and tests on every push and PR.
MIT © furybee
