Local App
Breakout
A modern Breakout for your terminal — pick new perks between levels to make every run different.
Requirements
- Linux or macOS.
- A graphics-capable terminal that supports the Kitty graphics protocol — Ghostty (primary), Kitty, or WezTerm. Without it the game exits with a clear message; there is no text-cell fallback.
- Run it directly in the terminal — tmux and other multiplexers answer the capability queries but do not display the image protocol, so the screen stays empty.
- A Rust toolchain to install with Cargo.
Install
Install the breakout command with Cargo, either straight from the repository or from a local checkout of the source.
From the repository
cargo install --git https://github.com/mikerayco/Breakout.git
From a local checkout
cargo install --path .
Launch
Once installed, start the game from any shell:
breakout
Useful flags: --level <file> to play one level standalone, --seed <n> for reproducible runs, --fps <30-144>, --scale <n>, --no-audio, --no-bloom, and --caps for a capability report.
Controls
| Key | Action |
|---|---|
| ← / → or H / L (hold) | Move paddle |
| Space | Launch ball / fire laser / release sticky / confirm |
| Esc | Pause menu / resume |
| 1 / 2 / 3, or arrows + Enter | Perk offer pick |
| M | Mute / unmute (persisted) |
| F3 | Debug overlay (FPS, frame times, latency) |
| F4 | Bloom toggle |
| Q | Quit |
The run
Each run takes you through 8 levels. After every level you're offered a few random perks — like a laser paddle, multiball, or a sticky paddle — and you pick one. Your choices stack up as you go, so every run plays differently.
Clearing the run earns persistent shards you can spend on unlocks, so progress carries over between runs. Under the hood the game renders at a silky 144 fps with particles, bloom, and screenshake, right inside your terminal.
Save data is a single JSON profile written atomically at run end — a corrupt profile is renamed aside and play continues.
Sound
All ten sound effects and the music bed are synthesized at build time and compiled into the binary — no audio assets are downloaded or bundled separately. Mute with M; the choice persists.
Source: github.com/mikerayco/Breakout