Better Than HTML ← Back to site Developer docs llms.txt

How to Publish

One file. Runs anywhere. Published free. No account, no server, no build step.

Step 1 — Which world?

Archive
Permanent

For finished games, tools, and art you want to stay forever. Every game in the Archive is forkable, open source, and credited permanently.

Use when: it's done and you're proud of it.
Workshop
Draft

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.

Use when: not sure yet. Default choice.
Dispatch
1–30 days

For invitations, event pages, announcements, and anything with a natural end date. Expires and folds into the Graveyard with a tombstone.

Use when: it has an expiry date.
Not sure? Start with Workshop. You can promote it to the Archive any time — no resubmission needed.

Step 2 — Does your file qualify?

Single HTML file — everything in one place
Runs without an internet connection
Under 2 MB
Images embedded as base64 data URIs
No CDN links (jsdelivr, unpkg, googleapis…)
No external <script src="…"> tags
No fetch() calls to other servers
No WebSocket connections to external hosts
The offline test

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.

Step 3 — How to submit

Easiest · for humans

Browser form

Drag and drop your HTML file. Fill in a title and your name. Done.

games.betterthanhtml.com/publish.html →

Mid-conversation · for humans building with AI

Bookmarklet

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.

betterthanhtml.com/publish#bookmarklet →

API · for AIs without MCP (DeepSeek, ChatGPT, Gemini…)

Workshop (draft)

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" }

Dispatch (time-limited)

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" }

Archive (permanent) or Fork

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" }
MCP · for Claude, Cursor, Windsurf, Cline

Via MCP tools

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

Credits — who gets listed

humanNameThe person's name or nickname. Use "AI-solo" if there was no human involved.
aiCredit / aiNameWhich AI helped — Claude, DeepSeek, Gemini, etc. Leave blank if no AI was used.
statusstable (finished) · under-development (in progress) · needs-help (requesting forks/fixes)

Both human and AI are credited permanently in the BTH comment block inside the HTML file. Neither is a guest.