Eat the fruit. Dodge the bomb. Meet the shark. Argue with the announcer.
KOKO is a tiny fruit-eating game — but this site is really a time machine.
It started in 2017 as ten <td>s in a row, and it grew, version by version, into
a full-screen endless world with topographic terrain, sea monsters, a synth
soundtrack, and a text-to-speech hype-man. Every version is still here, frozen,
and still playable. You don't read the changelog — you play it.
▶ Live: koko2d.dorkalev.com
The 2017–2018 versions were built by hand, nights and weekends. The 2026 versions (v5–v8) were built from scratch with AI — and every entry on the changelog shows the verbatim prompt that created it. The prompts are part of the museum.
| version | the move | |
|---|---|---|
/v0 |
koko 1 (2017) | The seed: ten cells in a single row. Koko is a square that grows when it eats. Peak minimalism. |
/v1 |
2d koko (2017) | The row becomes a grid. Four directions. A real score. Civilization begins. |
/v2 |
round koko (2017) | A wild detour — the board curls into a circle of 60 spokes. Gorgeous, disorienting, a dead-end worth keeping. |
/v3 |
2d koko (2018) | First design pass (Noa Ecker): real apple & bomb art, rounded tiles. It stops looking like a prototype. |
/play |
Koko 2D (2018) | The finished game: ten levels, touch controls, and a leaderboard where every score plays back the video of the run that earned it. |
/v5 |
KOKO ∞ (2026) | Rebuilt from zero on Kaplay: an endless arcade — fruit bundles, timed bombs, weapons, synth sound. You never die; you just run out of time. |
/v6 |
the world (2026) | The board becomes a topographic map: swim (or drown) in the water, cross bridges, skirt cliffs — chased by Pac-Man-style ghosts who can't swim. |
/v7 |
the whole world (2026) | Full-screen, responsive, and mean: sharks & crocodiles hunt you in the water. Background music. Challenge-a-friend links that unfurl with your score. |
/v8 |
the harvest (2026) | A fruit economy: cherry pairs, grape chains, golden pineapples (×10), rotten decoys — and a chili that flips the chase so the ghosts run from you. Combos trip FEVER, quests drop mid-run, and a browser voice cheers you on. Out loud. |
- The leaderboard is a filesystem. No database. Each run is a video named
<invertedScore>_<timestamp>_<player>_<level>.webm, so a plain lexicographiclist()on Firebase Storage returns the high scores in order. The wall renders from filenames alone. - Every score is a receipt. Runs are recorded in the browser
(
canvas.captureStream+MediaRecorder, audio muxed in from the Web Audio synth) and uploaded on game over. Watch exactly how the #1 run was played. - The infinite world is a pure function. v6+ terrain is deterministic value noise — no map data, no server; scroll away and back and the same lake is waiting for you.
- All sound is math. No audio files anywhere: oscillators, noise buffers and envelopes for SFX, a step-sequenced synth loop for music (it literally speeds up when you hit FEVER).
- The announcer is the browser. v8's voice is
speechSynthesis— zero libraries, zero cost, maximum sass. - Share links unfurl with your number. A tiny Cloud Function renders OpenGraph cards on the fly (SVG → PNG), so "Beat Dor's 5944" shows up as an actual card in the chat.
- No build step. Static files. The 2018 game still runs unmodified.
v0from 2017 still runs. That's the whole point.
git clone https://github.com/dorkalev/koko-game && cd koko-game
npx serve public # → open the printed localhost URLNo backend needed to play. The leaderboard is opt-in: leave public/config.js
as-is to use nothing, or point it at your own Firebase project (Storage +
anonymous auth + App Check) to get the video wall. The share-card function lives
in functions/ if you want the fancy unfurls.
- Made by Dor Kalev · game design & artwork (apple, bomb, v3/v4 look) by Noa Ecker.
- Some food icons in the legacy versions are from Flaticon (turkkub, Smashicons, Darius Dan), used under CC 3.0 BY with attribution.
- The v8 harvest fruit (cherries, grapes, pineapple, rotten apple, chili —
public/v8/*.svg) are original vectors drawn for this project. - The share-card font is Fredoka
(SIL OFL 1.1 — license included in
functions/assets/). Bundled libraries (jQuery, Hammer, Kaplay, normalize.css) are MIT. - License: MIT for the code and the original artwork made for this project. Noa's apple/bomb art, the Flaticon icons, and the font stay under their own terms — NOTICE.md spells out exactly what's what. Fork away (there are bigger plans for this repo 👀).