smisco.

Release v1.1.6 · free

8-Bit Arcade Mega Cabinet

Eight arcade games in a single self-hosted browser cabinet. Drop the folder on any PHP 8.1 host and you have a working arcade with global high scores, configurable controls, and touch support. No build step, no dependencies, no accounts.

8 games PHP 8.1+ SQLite 25 files No dependencies

The cabinet's main menu: a neon marquee reading 8-BIT ARCADE MEGA CABINET above a grid of eight game buttons, each outlined in its own colour.

What's in the box

Eight games on one board

  • Space Defender
  • Neon Snake
  • Neon Breakout
  • Neon Pong
  • Asteroid Command
  • Space Invaders
  • Pac-Man Matrix
  • Neon Frogger

Global and local leaderboards

Scores post to a same-host PHP endpoint backed by SQLite, with a per-game board and a local-only view. Enter your initials after the fifth loss, arcade style.

Controls that bend to the player

Arrows, WASD or IJKL for movement; space or enter for action. Auto-repeat with an adjustable rate, plus independent game-speed and player-speed trims — set globally or per game.

Plays on a phone

A pointer-events D-pad and action button appear on small screens, and the pad can sit left, centre or right. The cabinet also installs as a PWA.

Requirements

Modest by design

Server
PHP 8.1 or newer
Extension
PDO SQLite (pdo_sqlite) enabled
Storage
One directory writable by PHP, for the score database
Browser
Pointer Events for touch controls; Web Audio API for synthesised sound and music
Build step
None. No package manager, no bundler, no third-party runtime.

What's new in 1.1.6

Timing, settings, and a calmer menu

  • Three-second GET READY Every non-final life loss now holds for three seconds before play resumes. The delay is measured in milliseconds rather than frames, so a high-refresh screen doesn't shorten it, and pausing or hiding the tab doesn't quietly consume it.
  • Separate sound-effects and music The single SOUND control became two: SOUND EFFECTS and MUSIC, each available as a console default and a per-game override. Existing saved values migrate to both, so nothing changes audibly until you change it.
  • Per-game action-repeat speed ACTION RPT SPEED joins each game's pause menu, on the same SLOWER / NORMAL / FASTER scale as the speed trims — from a 500 ms interval at the low end to roughly 167 ms at the high.
  • A SETTINGS button on the main menu The full-width leaderboard control is now a two-button row: VIEW LEADERBOARDS beside SETTINGS, both reachable by keyboard, touch D-pad, and pointer.

Upgrading from 1.1.5 No database migration is required. Overlay the files and keep your existing score database in place.

Screenshots

The cabinet, running

Install

Unzip it into a directory

There is nothing to compile and nothing to configure. Serve the folder and it runs.

# fresh install
unzip 404-8-bit-arcade-v1.1.6.zip -d /var/www/html/arcade
# make the score directory writable by PHP
chmod u+w /var/www/html/arcade/data

# upgrading — overlay the files, keep the database
unzip -o 404-8-bit-arcade-v1.1.6.zip -d /var/www/html/arcade

Keep your scores The score database lives at data/arcade-scores.sqlite. Preserve it across upgrades — the bundled data/ ships only an .htaccess that blocks direct HTTP access, so an overlay won't overwrite it. For stronger separation, set ARCADE_SCORE_DB to an absolute path outside the web root.

On score integrity The API validates game IDs, initials, score format and range, request size, and same-origin submissions, and the database is bounded. But gameplay runs in the browser, so the server cannot prove a submitted score was earned with unmodified code. Genuinely cheat-resistant scores would need server-authoritative gameplay.

Enjoying the cabinet?

It's free, and it stays free. If it earned a coin, you can leave a tip for the workshop — it goes straight to keeping tools like this one maintained.

Leave a tip →