# tetro-tui: a stacking game with rotation systems, replays and Braille graphics

> tetro-tui is a Rust terminal game that takes the familiar tetromino stacking loop and adds a long settings list: several rotation systems, piece randomizers, adjustable DAS, ARR and SDF timings, around a dozen game modes, replay and statistics files, and graphics ranging from plain ASCII to Braille and Elektronika styles. It is published on crates.io and installable with cargo.

**Strophox/tetro-tui** — Terminal-based but modern tetromino-stacking game that is customizable and cross-platform

- Repository: https://github.com/Strophox/tetro-tui
- Website: https://crates.io/crates/tetro-tui
- Stars: 764 · Forks: 18
- Language: Rust
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/strophox-tetro-tui

## The base loop is the original game, and everything else is configuration

Tetro TUI is a tetromino stacking game in a terminal. The rules are stated without embellishment: pieces fall from the top of a two dimensional field, horizontal lines clear automatically, and everything stacked above drops down. A skilled player can keep going indefinitely, and the different modes change the conditions without changing that core loop.

What makes the project more than a clone is the size of the settings surface. The README lists graphics in Unicode, ASCII and Elektronika styles with old terminal compatible and very modern designs, ten colour palettes, and separate effects for hard drop, piece lock and line clear. Gameplay is adjustable in rotation systems, piece randomizers, the size of the preview and the timings, with DAS, ARR, SDF, LCD and ARE all named, plus instant rotation and hold slot behaviour. Keybinds are described as being to your heart's desire, and a help view is reachable during play.

The audience is therefore wider than a casual puzzle audience. It is aimed at people who already know what a rotation system is, and at people who like tuning a program to their terminal until it looks the way they want it to look.

## Game modes range from a marathon to hand-made puzzles

The mode list is where the game shows how much it has grown. Regular, also called Marathon, is the standard mode, clearing 160 lines while gravity increases. Swift asks how quickly 40 lines can be cleared. Classic and Master unlock once you have played Regular, with Classic described as level zero and above and Master as clearing 320 lines at instant gravity. Classic recommends the NES gameplay and graphics settings, which tells you the author was aiming at a specific lineage of the game rather than an original rule set.

Puzzle offers 24 hand-crafted puzzles and uses the Ocular rotation system. Cheese mode is about clearing lines efficiently, with a configurable limit that can be none, ten, eleven and so on up to forty. Survival regenerates lines as you place more pieces, and Combo-30 chains consecutive line clears with its own limit. Two more are hidden behind a Ctrl+U shortcut: Placement, for practising piece placement, and Ascent, described as experimental and requiring 180 degree rotation.

Custom mode is the most configurable of the set. The initial fall delay is a one second gravity at 1.00 Hz, progressive gravity is a toggle, and the limit can be none, a time elapsed condition, a points scored condition, a pieces locked condition or a lines cleared condition, each with an adjustable value. The mode also accepts command line flags for a start board and a seed, and a Del key resets it.

## Installation is a cargo install away, with an AUR package and a source build

There are three documented ways in. The quickest is a prebuilt release binary for your platform, downloaded from the releases page and run from a terminal, with the executable named tetro-tui on Unix systems and tetro-tui.exe on Windows.

The crate route is one command.

```bash
cargo install tetro-tui
#  tetro-tui
```

Arch Linux users have a package in the AUR, installed with yay or paru.

```bash
yay -S tetro-tui # Or paru, etc.
#  tetro-tui
```

Compiling from source is the third option. The project states it is written in Rust 1.95.0, and the manifest asks for a minimum of 1.90.0, which is a small inconsistency worth knowing about if your toolchain is between the two.

```bash
git clone https://github.com/Strophox/tetro-tui
cd tetro-tui
cargo run
```

The crate is published on crates.io as tetro-tui, and the manifest marks it as a game and a command line utility with a terminal graphics keyword set, which is why it shows up in package searches at all. A flake.nix and flake.lock are also in the tree, so a Nix build is available for anyone who wants one.

## The game logic lives in a separate crate, falling-tetromino-engine

The architecture has one decision that matters more than the rest, and it is visible in the manifest. The core game logic is not inside this repository. The dependency list includes falling-tetromino-engine at version 12.0.0 with the serde feature, and the comment in the manifest names it as the core game logic.

That split is why the settings list can be so long. The engine handles pieces, gravity, rotation systems and line clearing, and the application layer around it handles input, rendering, menus, replays, statistics and the savefile. It also means the rules engine can be reused and versioned independently, and it means the interesting part of the rules is not in the crate you are installing.

The rest of the dependency list shows the same care about keeping things small and portable. crossterm handles cross platform terminal control, clap parses command line arguments with derive support, chrono generates timestamps, rand provides randomness for the piece randomizer, and dirs finds the standard applications config folder in a cross platform way, which is where the savefile lives. Serialization goes through serde with the ron format, and bitflags is used for the flag-heavy option structures.

There is no audio library, no network client and no asset pipeline, and the release profile strips symbols from the binary.

## Graphics range from ASCII to Braille, and the terminal is part of the art direction

The graphics settings are the largest single group in the menus, and they are arranged as slot style, tile colours, interface colours and interface style, each with a long list of named options. The slot list runs from Default and Guideline through Terminal compatibility, Focus+, Minimal, a Braille variant, Elektronika 60 and NES, with custom slots available. Tile colours include just white, ANSI, Gruvbox, Solarized, Terafox, Matrix, Sequoia and NES levels among others, and interface colours have their own list including dark and light variants of several of the same palettes.

The interface style list covers ASCII, a UTF8 frame, a rounded UTF8 frame, no frame, no hold and next frame, Braille and Elektronika 60, and the three effect lists for hard drop, lock and line clear run from None through several ASCII and UTF8 options, with names such as particle trail, particle beam, coloured beam, Braille helix, flash white, pulsing block, spiraling Braille, and a long list of clear effects that ends with entries like confetti, stardust and sparks.

The point the README makes, and it is a good one, is that these visuals combine with your own terminal settings. A larger font scales the game, and a terminal with a nostalgic rendering style produces a nostalgic result. The project even links a retro terminal emulator as an example of that. It also shows demo screenshots across a range of terminals, from kitty and wezterm to alacritty and gnome terminal, which is the clearest evidence that the rendering layer was tested against real terminals rather than one emulator.

## Replays, scores and a savefile that travels with the config folder

The title screen offers New Game, Settings, Scores and Replays, All-Time Stats, About and Quit, and the navigation is described as arrow keys with Enter, Esc and Del, or Vim style keys, with a question mark to view the keybinds at any time. Game save is unlocked with Ctrl+S.

Replays and statistics are the feature that distinguishes this from a casual implementation. A replay is a recording of a session that can be played back, and the scores and all-time statistics screens exist to make that data useful. The README notes that highscores, replays and statistics can be viewed and also backed up with a simple savefile, which is the right way to think about it: the state lives in one file, so it can be copied, and the directory lookup for it is done through the cross platform config folder helper rather than a hard coded path.

The Cargo manifest excludes the demo assets, the GitHub directory, the release checklist and the Nix files from the published package, which keeps the crate small, and there is a release-checklist.md at the repository root that suggests the author treats releases as a routine with steps.

## Version 3.6.2 under MIT, with a documented caveat about modifier keys

The project is MIT licensed and published as version 3.6.2 in the manifest. Releases are frequent: v3.6.2 on 2026-07-30, v3.6.1 on 2026-05-31 and v3.6.0 on 2026-05-31. The repository is not archived and the last push was on 2026-08-13, so the code is still moving, but the gap between the last push and the last release is over a month, which is worth knowing if you are tracking the git branch rather than the crate version.

There is one caveat in the documentation that deserves attention, and it is attached to the DAS, ARR and SDF timings and to the keybinds involving Ctrl, Shift and Alt. Some of those preferences and some of those key combinations do not work for some users, and the README links an anchor explaining why. Terminals differ in how they report modifier keys, and a game that maps dozens of inputs is exactly where that shows up. Anyone planning to use a modified key for a rotation or a hold should test it in their own terminal first.

The result is a project with a real configuration surface, a real dependency on how the host terminal behaves, and a small, self contained binary that does one thing. Those are reasonable tradeoffs for a game, and the crate's version history suggests the author keeps tuning it.

## Conclusion

Adopt tetro-tui if you want a stacking game that respects terminal rendering, since the graphics options, the keybind coverage and the replay and savefile system go well past what a quick clone of the original game offers, and the crate installs with cargo install tetro-tui on any platform that has a terminal. Do not adopt it if you need online play, mods or a scoring system that is meant to be comparable with other games, since this is a local, offline, single process program. Before you settle on a configuration, read the changelog and the release checklist in the repository, check the keybind caveat section in the documentation about combinations involving Ctrl, Shift and Alt, and pin the crate version rather than tracking the git master branch.

## FAQ

### How do I install tetro-tui?

Install the crate with cargo install tetro-tui, use the AUR package with yay -S tetro-tui on Arch Linux, or download a release binary for your platform from the GitHub releases page. To build from source, clone the repository, enter the directory and run cargo run.

### What game modes does tetro-tui have?

Regular clears 160 lines with increasing gravity, Swift is about clearing 40 lines quickly, Classic and Master unlock after Regular, Puzzle has 24 hand-crafted puzzles, Cheese optimises line clearing, Survival regenerates lines, and Combo-30 chains consecutive clears. Placement and Ascent are unlocked with Ctrl+U, and Custom lets you set the win condition, initial gravity and limits.

### Can I change the graphics and keybinds in tetro-tui?

Yes. The settings cover Unicode, ASCII and Elektronika graphic styles, ten colour palettes and separate effects for hard drop, piece lock and line clear, and keybinds can be remapped, with a help view reachable during play. The visuals are designed to work together with your own terminal font and rendering settings.

### Does tetro-tui save my scores and replays?

The README states that highscores, replays and statistics can be viewed and backed up with a simple savefile, with scores and replays reachable from the title screen and a game save available through Ctrl+S. The savefile lives in the standard applications config folder, located in a cross platform way.

### Why do some of my keybinds not work in tetro-tui?

The documentation attaches a caveat to the DAS, ARR and SDF timing preferences and to keybinds using Ctrl, Shift and Alt, explaining that some of them do not work for some users. Terminals differ in how they report modifier keys, so a custom binding should be tested in your own terminal before you rely on it.

## Sources

- [License: MIT](https://github.com/Strophox/tetro-tui/blob/main/LICENSE)
- [Project website](https://crates.io/crates/tetro-tui)
- [README](https://github.com/Strophox/tetro-tui/blob/main/README.md)
- [Releases](https://github.com/Strophox/tetro-tui/releases)
- [Strophox/tetro-tui on GitHub](https://github.com/Strophox/tetro-tui)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/strophox-tetro-tui
