// THE FLOOR //

                                                                      __
    .--------.---.-.-----.--------.---.-.----.----.--.--.-----.----.|  |--.
    |        |  _  |  _  |        |  _  |  __|   _|  |  |     |  __||     |
    |__|__|__|___._|___  |__|__|__|___._|____|__| |_____|__|__|____||__|__|
                   |_____|
                         EVERY CABINET ON THIS MACHINE
                                  INSERT COIN


      ┌──────────────────────────────┐  ┌──────────────────────────────┐
      │ George Boole Has Entered The │  │ Moonlight Drift              │
      │ Chat                         │  │                              │
      │ 2048 played with logic gates │  │ Thread the columns. Hold to  │
      │ Merge, invert, overflow.     │  │ climb, release to fall.      │
      │                              │  │                              │
      │ ▶ ENTER_        BEST 131,072 │  │ ▶ ENTER           BEST 8,420 │
      └──────────────────────────────┘  └──────────────────────────────┘
                                   PAGE 1/2


                      ↑↓←→ CHOOSE    ENTER PLAY    Q QUIT
                 © 2026 magmacrunch media  ·  magmacrunch.com

magmacrunch is this arcade in a shell. One command, a menu of every cabinet installed on the machine, and a way into one. Same palette, same card grid, same blinking cursor on the card you are about to start.

The one thing that could not come across is the typography. The web page sets Press Start 2P on nearly every string, and a terminal program does not choose its font, so the pixel lettering has to be drawn out of block glyphs instead.

Each card carries your best score on that cabinet, read from the same file the game writes when you set one. A cabinet you have never played says nothing rather than BEST 0, which would be inviting you to beat a score that does not exist.

// INSTALL //

Every package in the stack is a pure-Python wheel, so there is nothing to compile on macOS, Linux or Windows. What differs between the three is not the build, it is which installer you already have, so that is what this table is keyed on.

you already haverun
uv uvx magmacrunch nothing lands on your PATH
pipx pipx run magmacrunch the same trick
Python 3.10+, and nothing else pip install magmacrunch the command, kept
Homebrew brew install magmacrunch-media/tap/magmacrunch brew owns it

The first two run the arcade out of a throwaway environment: nothing reaches your PATH, and nothing can collide with anything. To keep the command around instead:

$ uv tool install magmacrunch $ pipx install magmacrunch

Either one puts magmacrunch (and each cabinet's own command) on your PATH inside an isolated virtualenv. Whichever route you take, that one install brings the arcade and all four cabinets.

On Windows, note that python3 is usually not Python: Windows ships an app-execution alias of that name pointing at the Microsoft Store, so python3 -m magmacrunch can answer Python was not found on a machine that has both Python and the arcade. Use the launcher, py -m magmacrunch, which finds it either way.

// PLAYING //

$ magmacrunch the arcade: every cabinet on the machine $ george-boole 2048 with logic gates, on its own $ lava-dome solo hold'em, on its own $ moonlight-drift the endless drifter, on its own $ jovian the rail over Jupiter, on its own

A game plays identically whether you start it directly or pick it from the arcade: the arcade is not a wrapper around them, it is the same host they run on.

←→ move between cabinets
↑↓ move a row
Enter play
Q quit
Esc inside a game returns to the arcade

That last one is the whole reason the host exists. A cabinet says so on its own title screen, and only when the arcade started it. The same key ends the session when the game was launched as its own command, so a hint printed unconditionally would be a lie half the time.

The floor takes the color of whichever cabinet is highlighted: title, tagline and key line all shift as you arrow across the grid, the way a card and its border recolor on hover here.

// CABINETS //

  • george-boole2048 played with logic gates
  • lava-domesolo hold'em against a climbing threshold
  • moonlight-driftthread the columns; hold to climb
  • jovianknow what you are shooting at

Installing magmacrunch installs all four. To see what is actually on the machine:

$ magmacrunch --list

That prints every cabinet found, what terminal size it wants, and how it wants input. If a game you installed is not in the menu, this says why: a game that fails to load is reported rather than silently skipped.

// HOW GAMES GET HERE //

Games are not bundled. Each one lives in its own repo alongside its browser and Wii versions, publishes its own wheel, and declares an entry point:

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

pointing at an object with info: GameInfo and start(host). The launcher enumerates that group at startup. Installing a game makes it appear here; uninstalling makes it vanish; neither needs a release of the arcade.

Nothing in the launcher imports a game, so the arcade runs with none installed and tells you how to get one.

// FITTING YOUR TERMINAL //

Python 3.10+, and a terminal at least 36×17. Individual cabinets ask for more (around 59×22), and below that their card grays out, says the size it wants, and cannot be started. The arcade's own floor is deliberately lower than any game's, so getting to the floor is never the thing that fails.

Two cards sit side by side from 70 columns and stack into one below that. More cabinets than fit are paged, not scrolled.

The title art stands down as the window grows or shrinks, and always before the cabinets have to:

windowbanner
121×34 and upthe full site wordmark, MAGMACRUNCH over ARCADE, 119×19
~73×30the same two words in 71 columns instead of 119
80×24MAGMACRUNCH alone, 71×5
~62–72 colsthe ARCADE wordmark alone, 60×8
~50 colsa block-glyph MAGMACRUNCH, 48×2
36 colsspaced capitals

Art is measured rather than declared, so the 119-column piece can sit at the top of the list without ever bothering someone on an ordinary terminal. It is simply never the one that fits.

// COLOR AND CHARACTERS //

Truecolor helps but is not required. NO_COLOR is honored, and the palettes survive it: nothing in any cabinet is readable in color and unreadable without it.

Color degrades on its own; characters do not. Windows' two common codepages are where that shows: cp1252 has none of the block elements, arrows or suits, and cp437 has the blocks and none of the arrows, stars or suits. So the engine asks the terminal what it can encode and substitutes what it cannot, one group of related glyphs at a time, so a set never comes back half translated and a terminal that can draw the blocks keeps them.

Detection is automatic. Override it for the case no probe can see, an encoding that accepts the character in a font with no picture for it:

$ magmacrunch --ascii this session MAGMACRUNCH_ASCII=1 always, and every cabinet run on its own too

Every substitute is exactly one cell wide, so a plain screen has the same layout as a fancy one rather than a reflowed approximation of it.

// LICENSE //

One license, over a seam that is still there in the code. The launcher and the TUI engine are both PolyForm Noncommercial 1.0.0, because the games it seats are. The engine was Apache-2.0 until 2026-10-15, on the grounds that it depends on none of them and was extracted from texastoast while texastoast was Apache too. texastoast moved to this license, so keeping this copy permissive is what would have made the two disagree. Versions up to 0.9.0 shipped the engine under Apache-2.0 and anyone holding one keeps it under those terms.

Install: pypi.org/project/magmacrunch ↗  ·  source access on request, info@magmacrunch.com

Python 3.10+ · Terminal 36×17 minimum · Pure Python, no compilation