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.
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.