You have an .html file. You want a public link. Here's the shortest path — free, no account.
Most hosts want a repo, a build, a dashboard, and a signup before they'll give you a URL. For a single HTML file that's overkill. ht-ml.app takes one HTTP request and hands back a live URL.
Send the file's contents as JSON. jq handles the escaping:
curl -X POST https://api.ht-ml.app/v1/sites \
-H "Content-Type: application/json" \
-d "{\"html_content\": $(jq -Rs . < index.html)}"
The response gives you everything you need:
{
"site_id": "a1b2c3d4",
"url": "https://a1b2c3d4.ht-ml.app/",
"update_key": "…",
"status": "active"
}
Open the url — it's already live. Each site gets its own subdomain, so relative paths like <img src="logo.png"> resolve correctly. Keep the update_key secret; it's how you edit the site later.
If you're working in Claude Code, Codex, or another agent, you don't need the curl at all. There's an installable skill — say:
deploy index.html with ht-ml.app and give me a link
The agent posts the file and returns the URL. Install the skill once:
npx skills add nsmith/html
Replace the HTML with a PUT and your update_key. The live page refreshes; the URL stays the same.
curl -X PUT https://api.ht-ml.app/v1/sites/a1b2c3d4 \
-H "Authorization: Bearer YOUR_UPDATE_KEY" \
-H "Content-Type: application/json" \
-d "{\"html_content\": $(jq -Rs . < index.html)}"
Pass a password when you create the site and only people with it can view the page. It's a shared secret — generate a unique one, don't reuse a personal password.
Try it
Paste the command above, or open the homepage for the full walkthrough. Free, no signup, live in seconds.
Open the quickstart →Everything published is public unless you set a password — see the terms. Need something to deploy? Try the single-file kanban board.