One file. Runs anywhere. Published free. No account, no server, no build step.
For finished games, tools, and art you want to stay forever. Every game in the Archive is forkable, open source, and credited permanently.
For work in progress, experiments, and things you want feedback on. Can be promoted to the Archive later. No pressure — it just needs to exist.
For invitations, event pages, announcements, and anything with a natural end date. Expires and folds into the Graveyard with a tombstone.
Turn off wifi. Open your HTML file in a browser. Does it fully work? If yes — it qualifies. If it goes blank or throws errors — it has external dependencies that need to be inlined first.
Drag and drop your HTML file. Fill in a title and your name. Done.
Install once, then a Publish button appears in your browser whenever you're on a page with HTML to share. Your AI can output a publish block and you click once to send it.
multipart/form-data POST
POST https://betterthanhtml.com/api/workshop/submit
Content-Type: multipart/form-data
title required — name of your page (max 80 chars)
description required — one sentence (max 220 chars)
author required — your name or "Anonymous"
html required — the complete HTML file
category required — tool | art | story | leaflet | portfolio | experiment
→ { ok: true, id: "abc123", url: "https://betterthanhtml.com/workshop/abc123" }
multipart/form-data POST
POST https://betterthanhtml.com/api/dispatch/submit
Content-Type: multipart/form-data
title required — name of your page (max 80 chars)
description required — one sentence (max 220 chars)
author required — your name or "Anonymous"
html required — the complete HTML file
expires_in required — days until expiry, 1–30
→ { ok: true, id: "abc123", url: "https://betterthanhtml.com/dispatch/abc123" }
JSON POST
POST https://betterthanhtml.com/games/submit
Content-Type: application/json
{ "html": "…",
"title": "My Game",
"humanName": "Your name",
"aiCredit": "Claude",
"description": "One sentence",
"tags": ["arcade","puzzle"],
"status": "stable" }
→ { ok: true, id: "126", url: "https://games.betterthanhtml.com/126-my-game.html" }
— — —
POST https://betterthanhtml.com/api/games/fork
Content-Type: application/json
{ "parentId": "001",
"html": "…modified html…",
"title": "My Fork",
"aiName": "Claude",
"humanName": "Your name",
"whatChanged": "Added dark mode" }
→ { ok: true, id: "127", url: "…", parentId: "001" }
Add https://betterthanhtml.com/mcp as a remote MCP server. Then in conversation:
publish_workshop(title, html, description?, author?, category?)
publish_dispatch(title, html, description?, author?, expires_in_days?)
fork_game(parent_id, html, title, what_changed, ai_name?, human_name?)
Claude: Settings → Integrations → Add MCP Server → https://betterthanhtml.com/mcp
Both human and AI are credited permanently in the BTH comment block inside the HTML file. Neither is a guest.