A file that phones home cannot live forever on a blockchain. That single sentence is the whole engineering brief. Everything else follows from it.
SPLAT is one HTML document. It carries its own markup, its own styles, its own code, its own art, and its own sound, and it asks the network for nothing. That is not a stylistic choice. It is the physical precondition for putting the game on Bitcoin and having it stay playable after PUDDY is gone, after the domain lapses, after every server anyone might have paid for goes dark. The bytes are the game. The chain holds the bytes.
The entire game is one file, splat.html. Everything a browser needs to run it is inside that one document:
- Markup - A minimal page and a
<canvas>the game draws into. - Styles - An inline
<style>block. No external stylesheet is ever requested. - Logic - An inline
<script>block carrying the runner loop, physics, input handling, spawning, collision, and scoring. - Art - The sprite sheet is embedded directly as a single base64
data:image/pngURI. There is no separate image file to load. - Audio - Generated at runtime through the browser's Web Audio API. No audio files ship with the game.
There is no build output to stitch together at load time, no module graph, no bundler manifest, no chunk to lazy-fetch. Open the file and it is already the whole program. Nothing assembles. Nothing resolves. The file is the program.
The published artifact makes no network requests. Not fewer than most. None. This is the property that makes the file inscribable, and it is the property that makes it permanent, and the two are the same property. A game that reaches out for one script, one font, one sound file is a game with a dependency that can rot. SPLAT has none, and the audit of the on-chain bytes proves it:
| Vector | Count |
|---|---|
fetch( |
0 |
XMLHttpRequest |
0 |
WebSocket |
0 |
serviceWorker |
0 |
dynamic import( |
0 |
remote src="http…" |
0 |
The only absolute URL anywhere in the file is a single attribution link to https://puddystudios.com - A clickable anchor, not a resource the page loads. The browser fetches it only if a human clicks it. Left alone, the file reaches for nothing.
The proof is one you can run yourself, and it is the strongest kind there is. Pull the ethernet cable. Turn off the wifi. Open splat.html. Play. It works because there was never anything to download.
# Verify the audit yourself against the on-chain bytes:
curl -s https://ordinals.com/content/f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0 -o splat.html
grep -c 'fetch(\|XMLHttpRequest\|WebSocket\|serviceWorker' splat.html # 0
shasum -a 256 splat.html # e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297State lives in the browser's localStorage, and only there. Your high score is written to your own machine and read back from your own machine. Nothing about a play session ever leaves the device it is played on.
SPLAT's core loop descends from the Chromium project's offline "T-Rex" runner, the dinosaur that appears when a browser has no connection. The inheritance is honest and it is fitting: an offline game became the seed for a game that is offline by necessity. That code is (c) 2014 The Chromium Authors and it remains under its BSD-3-Clause license, and the required copyright notice travels with the game everywhere it goes, including permanently inside the header of the inscribed file.
The engine was substantially rewritten and completely re-skinned. What is PUDDY-original is not a coat of paint on someone else's game. It is:
- the SPLAT character, mascot, and every piece of artwork and animation;
- the sprite sheet and the whole visual identity;
- level pacing, difficulty curve, and scoring;
- the audio design, synthesized at runtime; and
- the modifications and code that collapse the whole thing into a single, inscribable, zero-network artifact.
That last item is the one nobody sees and the one that made permanence possible. The BSD-3-Clause obligations are preserved in this repository at THIRD-PARTY-NOTICES.md and on-chain in the file's own header. The embedded header reads SPLAT (c) 2023 PUDDY; the repository copyright reads (c) 2023-2026 PUDDY Inc. Both dates are real and both are true. 2023 is the year the game was authored. 2026-03-20 is the day it was written to Bitcoin. Full provenance is at ../PROVENANCE.md.
Most "on-chain games" store a pointer. The token or the inscription holds a URL, and the real program sits on a web server or a distributed file system somewhere off-chain. If that host disappears, the game disappears. The chain was only ever holding an address, and an address to nothing is nothing.
SPLAT stores the program. The playable bytes are the inscription itself, and here is exactly what was written:
| Field | Value |
|---|---|
| Inscription ID | f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0 |
| Inscription number | #123224491 |
| Genesis block height | 941440 |
| Genesis block hash | 000000000000000000011ecb6b60d5e561267f13ddf3d19d79c1305e6576816f |
| Genesis date/time | 2026-03-20 14:46:38 UTC (Friday), epoch 1774017998 |
| Genesis txid | f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97 |
| Sat | 53222819757777 |
| Satpoint | 63967ffb46348f0b142d01905851568e45d8dfc170ecd29b97db0a73417967ca:0:0 |
| Holding address | bc1ptumjnxhqlkseef3nl9fdn9g33q8dueeswsslhqvpcel2f0hkm2qq3t5jgc |
| Fee paid | 123240 sats |
| Output value | 9667 sats |
| Charm | vindicated |
| Content-type | text/html; charset=utf-8 |
| Content length | 162317 bytes |
| Content SHA-256 | e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297 |
162317 bytes is the entire game. Not a manifest that points at the game. The game. It was cross-verified on two independent explorers so the claim rests on no single party: ordinals.com resolves the recursive inscription metadata, and mempool.space confirms block 941440 by hash 0000...816f at the same timestamp, carrying 2652 transactions. Two explorers, one set of facts, zero trust required.
- Live wrapper:
splat.puddystudios.com - On-chain content: https://ordinals.com/content/f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0
- Inscription page: https://ordinals.com/inscription/f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0
- Genesis block: https://mempool.space/block/000000000000000000011ecb6b60d5e561267f13ddf3d19d79c1305e6576816f
One honest caveat remains. The file in this repository, splat.html, is the inscribed artifact: 162317 bytes, SHA-256 e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297. A beautified, human-readable copy of the same game exists elsewhere at 266851 bytes, and it is not what is published on-chain. Do not confuse the two, and never claim the wrapper copy matches the chain. The bytes that match the chain are the ones whose hash matches the chain. There is exactly one such file, and it is this one.
As long as Bitcoin exists and one node serves the content, SPLAT is playable. No action is required from PUDDY. There is no domain to renew, no server to keep warm, no S3 bill, no infrastructure that can be forgotten or defunded into a 404. The single-file, zero-network architecture is the entire reason that sentence is true rather than a marketing wish.
Permanence is not a feature bolted onto the game. It is what is left over when you remove every dependency the game could have had. SPLAT has none. The bytes are on Bitcoin. The game is the bytes.
TUNE: Sonnet 5 | effort medium - Next prompt is likely another doc rewrite or QA pass, which is mid-complexity prose work that does not need Opus xhigh.