BITROT

The archive is decaying

Rare Friends are stored on failing media. Bits flip, and flipped bits spread. You are the last process still running inside — dive in, hold back the rot, and pull Friends out before they are overwritten.

Simulated economy · no wallet · no install · plays in the browser

01 — Why it is different

The arena is an automaton

Every generation, a clean cell may rot — and the chance climbs steeply with how many rotten neighbours it has. Rot never dies on its own. Purging clears a disc and scars the ground so it cannot be reborn for a while. The board is something you garden, not something you dodge.

Live · decay 0% purges fired 0

Burning rebuilds pixels

Every Friend you rescue arrives corrupted — the pixels missing from the portrait are the pixels the rot ate. Burning RF restores them ten percent at a time, in an order fixed per Friend, and those tokens are destroyed. You can see exactly what the burn bought.

Integrity 20% burned 0 RF

02 — One dive

The BITROT playfield: a Friend among spreading blobs of dithered rot

Hold the line

Move, purge, dash. Shards are currency and energy; the rot eats them if you are slow. Sectors tighten every 45 seconds and every purge starts costing more.

Late in a dive, the rot holds most of the arena

Get them out

Capsules surface every 19 seconds and survive six seconds buried — purge one free. Rescuing is also the only thing that restores your integrity.

The dive report, showing the simulated RF payout breakdown

Cash the run

Every RF you earned, itemised. Then the only question that matters: spend it on gear, or burn it on a Friend?

03 — The collection

—

—

Form, crest, optics, gear, marking, rarity, generation, name, perk and the exact order its pixels come back in are all pure functions of one six-digit id — the same relationship a tokenId has to a Generations NFT. Swap one function and the portraits become the canonical artwork.

ID
—
Generation
—
Form / crest
—
Optics / vox
—
Gear / mark
—
Perk at 100%
—
Go rescue one

04 — Simulated $RAREFRIENDS

Every run poses the same question, and the two answers pull against each other. That is the whole economy — a faucet you have to earn and two sinks that want the same coins.

Sink one

Upgrades — spent

Permanent dive gear. RF leaves your wallet, but in the fiction the supply is unchanged.

LineLevelsRF
Purge coil445 → 420
Cell bank440 → 380
Scar etch355 → 260
Core plate2150 → 420
Drift boots360 → 300
Lode coil350 → 250
Sink two

Restoration — burned

RF spent rebuilding a Friend is destroyed and tracked separately. The last pixels cost the most, and the perk only unlocks at 100%.

RarityOddsRF to whole
Common62%~240
Rare26%~430
Epic9.5%~705
Genesis2.5%~1220

A restored Genesis Friend is the end of the chase — about two and a half fully-geared dives of RF, burned into one portrait.

05 — Under the hood

0Dependencies
0Colours
0Logical pixels
0Passing tests
  • Everything renders into a single Uint8Array of 0s and 1s, blitted with integer scaling. Shading exists only as ordered dithering, so rot density reads as age.
  • The purge shockwave is literally an XOR of the framebuffer. The inverted palette is exact, not themed.
  • Both fonts — 5×7 and a 4×6 micro — are hand-drawn bitmaps. No webfont, no antialiasing. The headings on this page use them too.
  • The picture is presented through Scale2x, which rounds off single-pixel corners on the way to the screen. Still pixel art, just a finer grain — and a toggle for anyone who wants hard edges.
  • All audio is generated live by a small square-wave synth. No audio files.
  • No build step. Plain ES modules, served as-is. The repository root is the site.
  • The logical screen presents at 960×640 — the same viewport FriendSDK reference games use.

One dive is about ninety seconds. You will lose the first few. That is the point.

One prompt. One Rare Friend. Ten days.

Built for the Rare Friends Vibeathon, September 2026