magmacrunch

the terminal arcade, and the Python engine its cabinets run on

v0.14.0 PolyForm Noncommercial Python 3.10+ 16 cabinets
🕹

Play it

Install and play: one command, and a menu of every cabinet on the machine.

📦

PyPI

The arcade and each cabinet are pure-Python wheels, with nothing to compile anywhere.

✉

Get in touch

The source is not public. Email for access, licensing, or to build a cabinet.


The magmacrunch launcher in an 80 by 24 terminal: the magmacrunch logo in ASCII, the words EVERY CABINET ON THIS MACHINE, and two cabinet cards side by side, George Boole Has Entered The Chat and Moonlight Drift, each with a one-line blurb and ENTER, then PAGE 1/2 and the keys to choose, play and quit
The real launcher, rendered headless at 80x24 with three cabinets installed. Install a cabinet and its card appears; uninstall it and the card goes.

a cabinet is an entry point

Games are not bundled into the arcade. Each one lives in its own repository beside its browser and Wii versions, publishes its own wheel, and declares one line:

[project.entry-points."magmacrunch.games"]
george-boole = "boole.arcade:GAME"

The launcher enumerates that group at startup. Installing a game makes it appear; uninstalling makes it vanish; neither needs a release of the arcade. Nothing in the launcher imports a game, so it runs with none installed and says how to get one. A game that fails to load is reported by magmacrunch --list rather than silently skipped.

the object it points at

Anything with an info and a start(host). Both halves are structural protocols, so a game qualifies by having the members, not by inheriting anything.

GameInfowhat the menu reads before seating it
key, title, blurbthe entry point name, the card's title, and one line under it
fpsframes per second the game wants; a turn-based game says so too
hold_mshow long a keypress counts as held, since terminals report presses and never releases. 0 is one key, one action
min_cols, min_rowsthe smallest terminal it draws in; below that its card greys out and says the size
score_keythe scoreboard name, when it is not the key: a board shared with the browser build
accentthe colour the cabinet is known by, brought by the game rather than kept in the launcher
lower_is_betterfor games whose record is the smallest number: moves, seconds
Hostwhat a game may ask of whatever runs it
renderer, inputthe character-cell surface to draw on, and the session's input
push_scene, pop_scenea scene stack; popping the last one hands control back to the menu
seatedwhether the game was placed over a launcher, so it can show the way back
quitend the session and release the terminal

The same game runs alone as its own command, owning the terminal, or seated in the arcade, where the launcher owns it. Nothing in the game changes between the two.


in the engine

character-cell renderera cell buffer, a camera, and Textual and Rich as the only dependencies
scene stack and loopa fixed-step game loop with a scheduler, and scenes that push and pop
input that knows terminalsheld keys inferred from auto-repeat, or one key, one action, chosen per game
a UI kitbig pixel text, menus, dialogue, a HUD, glyphs and themes
high scores that lasta file per game, written atomically, shaped like the web arcade's scoreboard
colour optionalNO_COLOR is honoured, and nothing is readable only in colour

It came out of texastoast's terminal backend, with no tkinter and no GUI.


the cabinets

Installing magmacrunch installs all sixteen. Each is also its own wheel.

cabinetthe blurb on its card
george-boole2048 played with logic gates
thldsolo hold'em against a climbing threshold
moonlight-driftthread the columns; hold to climb
jhcknow what you are shooting at
roderick-trona robot composer on the rooftops; find T-R-O-N
calderaclimb the vent, outrun the magma
nelikkothe falling-block puzzle as Finland invented it
threesslide, merge, survive: 1 and 2 make 3
two-to-the-n2048, generalised: pick a power of two, or play endless
fifteen-puzzlethe sliding tile puzzle, 3x3 to 6x6; fewest moves wins
chessagainst the computer
checkersagainst the computer
backgammonagainst the computer
chinese-checkerstwo to six seats
cribbageagainst the computer
tarotFrench tarot against three computers

about

A terminal arcade by magmacrunch media: one command, a menu of every cabinet installed, and a way into one. It needs Python 3.10 and a terminal of at least 36x17; the cabinets ask for more, around 59x22.

Run it without installing anything with uvx magmacrunch, or see the terminal arcade page for pipx, pip and Homebrew.

PolyForm Noncommercial 1.0.0 · Copyright 2026 magmacrunch media.

// source access //

The magmacrunch repository is private. The arcade and its cabinets install from PyPI for anyone.

To build a cabinet, for source access, or anything else, email info@magmacrunch.com.