Static · No account · No tracking
Five small games that load before you blink
A hand-built arcade of five classic game rules — Snake, Life, Fifteen, Blocks and Minesweeper — running on one shared engine under 10 KB gzipped. Open a page and play; nothing to install, nothing to sign into.
- 5 games
- <100 KB per page
- 0 trackers or ads
- Works offline after load
- Keyboard + touch
The games
Five rules, five different feels: reflexes, observation, planning, pressure and deduction. All five are complete and playable right now.
-
Snake
Eat, grow, wrap around the edges. The run ends when you bite yourself.
-
Life
Conway's automaton on a wrapping grid. Draw cells, then watch them evolve.
-
Fifteen
The 4×4 sliding puzzle, shuffled by legal moves so it is never unsolvable.
-
Blocks
Falling tetrominoes with wall kicks, a ghost piece and seven-bag randomiser.
-
Minesweeper
Thirty mines, thirty flags, one guaranteed-safe first click. Pure deduction.
How the site is built
Small, boring engineering decisions rather than clever ones — the kind that survive contact with real browsers.
One engine, five rule sets
Every game imports the same Arcade object, which supplies the
shared machinery: a canvas stage that scales a fixed
internal resolution to any viewport with correct device-pixel handling and
converts pointer events back into board coordinates, an input
layer that maps arrow keys, WASD and on-screen buttons onto the same virtual
directions, a fixed-timestep loop that advances physics at
60 Hz regardless of display refresh rate, a score store
on top of localStorage, a synthesised audio
helper that generates its sounds instead of downloading them, and a
live-region announcer that reports game state to screen
readers.
Separating those concerns once means each game file is only the rules: roughly two hundred lines for Snake, Life and Fifteen, about three hundred for Blocks, and about four hundred for Minesweeper. It also means the games behave identically on a 60 Hz laptop and a 120 Hz phone.
Correctness details that are easy to get wrong
Snake excludes the tail cell from collision tests, because the tail vacates its square on the same tick — the classic off-by-one that makes a snake die into its own moving tail. Fifteen is shuffled by making random legal moves from the solved state instead of randomising tile positions, which is what keeps half of all random boards unsolvable. Blocks uses a seven-bag randomiser so no piece can be starved for long, and rotation tries wall-kick offsets so a piece can turn while flush against the edge. Minesweeper places its mines after the opening click with that cell's 3×3 neighbourhood excluded, so the first move cannot lose — and it gates chording on the flag count matching the number exactly.
Why static
There is no server component at all: no database, no session, no API. Scores live in the browser. That is what makes the site cacheable, cheap to host on any static platform, and testable with nothing more than a file server.
Where these games come from
The rules were selected from open sources, and the provenance of each one is recorded honestly — including the sources that turned out not to be usable for this project.
| Source | What it offered | Status |
|---|---|---|
| Simple Game Tutorials | Open, step-by-step rule documentation for Snake, Life, Fifteen, Blocks, Sokoban and more. Used for the five games here. | Used |
| GitHub topic: open-source | Mostly engines and tooling (GDevelop, LittleJS) rather than finished small games — useful as reference, not as a game source. | Not used |
| Ludum Dare repositories | The organisation hosts jam infrastructure (site sources, archive, press kit) and ships no playable games. | Not usable |
| itch.io open-source tag | Contains complete games, but most are engine binaries rather than rules that can be rewritten as static HTML. | Not used |
| Blender MCP | An assistant that drives Blender over a local socket to model 3D scenes. It builds assets, not web pages, and needs Blender running locally. | Not usable here |
On Blender MCP specifically: the tool is real and useful, but it operates a running Blender instance to author 3D scenes. It cannot emit a static webpage, and nothing in this project needs 3D geometry. Rather than pretend it was involved, it is listed above as evaluated and set aside.
On attribution: the five games implement the rules published by Simple Game Tutorials. Their tutorials are written for Lua and LÖVE; the code here is an independent JavaScript implementation of the same rules, not a port.
Questions
What is Tiny Arcade?
A static website containing five free browser games — Snake, Life, Fifteen, Blocks and Minesweeper — that share a single portable engine. There is no account, no advertising and no analytics, and the whole site is a handful of static files.
Are these games free to play?
Yes. All five games are free, unlimited and require no registration. High scores are stored in the browser's own local storage rather than on a server, so clearing site data resets them.
Do the games work offline?
Once a page has loaded, the game logic runs entirely in the browser tab with no network requests. Because every page is served as static HTML with its own small script, a game keeps working if the connection drops after loading.
How big are the games?
The shared stylesheet and engine together are under 15 KB uncompressed. Each individual game script is between roughly 4 KB and 9 KB, so a game page is normally under 100 KB including the HTML.
Do the games work on phones?
Yes. Each game renders to a fixed internal resolution and scales to the viewport, and touch devices get on-screen buttons or direct tapping. Keyboard controls remain available on desktop.
Where do the game rules come from?
The rules for Snake, Life, Fifteen and Blocks follow the open Simple Game Tutorials documented by BerbaSoft, which walks through each of them step by step; Minesweeper follows the standard rules. The implementations here are independent JavaScript rewrites rather than ports of the original Lua code.