Temporary website hosting: a link that deletes itself after 24 hours

chorus.host gives you a temporary website with no account: one command, a live https://<name>.chorus.host link, and the site deletes itself 24 hours later. With a free API key you choose the expiry, or keep the site.

Facts checked 1 October 2026 · For agents: /guides/temporary-website-hosting.md

Key facts

Facts checked 1 October 2026.

Lifetime without an account24 hours, fixed (GET /v1/limits reports siteLifetimeSeconds: 86400)
Shorter expiryAny time sooner than that, with or without an account
Longer or custom expiryAny future time with a free API key (expiresAt), or no expiry at all
At expiryThe URL returns 404 and the site is deleted
While liveSent with X-Robots-Tag: noindex, so search engines leave it out
Size250 MB per file and 10 GB per site; 4 MB per request for the one-request endpoint
Publishes without an account5 per hour per IP address
PasswordOptional, free

A folder (a build output, say):

curl -fsSL https://chorus.host/publish.py | python3 - ./dist

One file:

curl -sS https://chorus.host/v1/publish -F file=@report.html

Both print the link, when it expires, and a claim link (trimmed):

{
  "url": "https://navy-twig-20.chorus.host",
  "expiresAt": "2026-10-02T05:30:23Z",
  "claimUrl": "https://chorus.host/claim/navy-twig-20#ctk_REDACTED"
}

Measured on 1 October 2026: 3.2 seconds from the command to a live URL for a 3-file build.

No Python and more than one file? Zip the folder and send -F archive=@dist.zip to /v1/publish, or use the folder script.

Preview a build folder

FrameworkBuild commandFolder to publish
Vite (React, Vue, Svelte)npm run builddist/
Create React Appnpm run buildbuild/
Next.js with output: 'export'npm run buildout/
Astro (static)npm run builddist/
SvelteKit with adapter-staticnpm run buildbuild/

Absolute paths like /assets/index-3f2a.js work, because each site sits at the root of its own subdomain.

One caveat: there's no single-page-app fallback. Refreshing or opening a client-side route such as /settings returns 404, because no file is called settings. Use hash routing for previews, or send reviewers to the root URL and let them click through.

Choose when it expires

Without an account the expiry can be set to any time up to 24 hours after the site was first published, never later. A one-hour link:

curl -sS https://chorus.host/v1/publish -F file=@report.html -F expires=1h
curl -fsSL https://chorus.host/publish.py | python3 - ./dist --expires 1h

With a free API key, any future time works, and so does no expiry at all. A link that lasts 7 days:

curl -sS https://chorus.host/v1/publish -H "Authorization: Bearer $CHORUS_API_KEY" \
  -F file=@report.html -F expires=7d

expires takes 90m, 2h, 7d or an RFC 3339 time like 2026-10-08T00:00:00Z. To change the expiry of a site that's already live:

EXPIRES=$(date -u -v+2H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '+2 hours' +%Y-%m-%dT%H:%M:%SZ)
curl -sS -X PATCH "https://chorus.host/v1/sites/$SLUG/metadata" \
  -H "X-Claim-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"expiresAt":"'"$EXPIRES"'"}'

For a site in your account, send Authorization: Bearer $CHORUS_API_KEY instead of X-Claim-Token; then the time can be later than 24 hours, or null to remove the expiry.

Updating a site doesn't reset its clock: a new version keeps the expiry the site already had.

We tested this on 1 October 2026 with a site set to expire 75 seconds after publishing: it answered 200 before the expiry and 404 at 85 seconds, with X-Robots-Tag: noindex. A cleanup job then deletes the site's records within minutes.

Check whether a link is still up:

curl -s -o /dev/null -w '%{http_code}\n' https://navy-twig-20.chorus.host/

Take it down early

curl -sS -X DELETE "https://chorus.host/v1/sites/$SLUG" -H "X-Claim-Token: $TOKEN"

The URL returns 404 straight away.

Ask your agent

Publish ./dist to chorus.host as a temporary preview. Give me the link and when it expires. Instructions: https://chorus.host/skill.md

With the MCP server (claude mcp add --transport http chorus https://chorus.host/mcp), the publish_site tool returns expires_at and claim_url, and takes an optional expires_at argument for a shorter or, with an API key, longer life.

Temporary hosting options compared

As of 1 October 2026, from each service's own docs. "Not documented" means we couldn't find it stated, not that it's missing. We make chorus.host.

Without an accountWhen an unclaimed link expiresChoose your own expiryNo-account rate limitFolder or build upload
chorus.hostYes24 hoursShorter without an account; any time with a free account5 per hour per IPYes
here.nowYes24 hoursWith an account (--ttl)60 per hour per IPYes
htmlshare.netYes24 hours, then 410 Gone; recoverable for 7 daysNot documentedNot documentedOne HTML file, up to 10 MB
Netlify CLI --allow-anonymousYesRemoved after 1 hour unless claimedNoNot documentedYes
Cloudflare Drop / wrangler --temporaryYesDeleted after 60 minutes unless claimedNoNot documentedYes
PreviewShipGuest links on its site; the CLI needs an API keyGuest links: 24 hours. Free plan previews: 3 daysNot documentedNot documentedYes
surge.shNo (account created on first run)No automatic expiry documentedNon/aYes
S3 presigned URLNo (AWS account)1 minute to 12 hours from the console, up to 7 days from the CLI or SDKYesn/aOne object per URL

Where others are better: here.now allows 60 publishes an hour without an account against chorus.host's 5, and has a single-page-app mode. htmlshare.net answers 410 Gone after expiry and keeps the page recoverable for 7 days. Netlify and Cloudflare turn into full hosting once you claim the site.

Temporary site or tunnel?

A tunnel (Cloudflare Tunnel, ngrok, localhost.run) shares the dev server running on your laptop: it's live as long as your laptop is on and the server is running. A temporary site is an uploaded copy: it stays up for 24 hours whether your laptop is open or not, and it doesn't change when you edit your code.

Questions

How do I host a website temporarily for free?

Run curl -fsSL https://chorus.host/publish.py | python3 - ./site. The site is live at https://<name>.chorus.host for 24 hours with no account, then it deletes itself.

Yes. Anything published to chorus.host without an account is deleted 24 hours after it was first published, and the URL returns 404. You can make it shorter with expires, or claim it to keep it.

Build, then run curl -fsSL https://chorus.host/publish.py | python3 - ./dist. It prints the preview link and its expiry. Running it again from the same folder updates the same link.

Sooner, yes, with or without an account: add -F expires=2h or --expires 2h. Later needs a free API key, which accepts any future time or no expiry.

What does someone see after it expires?

A 404 page saying "This site doesn't exist", with a link to publish their own. The site's files are deleted and can't be restored.

Will search engines index my temporary site?

No. Sites published without an account are sent with X-Robots-Tag: noindex.

Does updating the site reset the 24 hours?

No. A new version keeps the expiry the site already had.

Can I keep it after all?

Yes, until it expires: open the claim link and sign in with your email and the 6-digit code we send. The expiry is removed.