Publishing is paused for maintenance.

Documentation

Get started

Publish a static site to a temporary, anonymous URL. Two ways: hand the deploy to an AI agent, or run the CLI yourself.

Overview

tmp.site turns a built static folder into a random *.tmp.site URL that expires on its own. No account, no config, no project.

frontend build  →  publish  →  URL
Option 1

Ask an agent

Hand the deploy to an AI coding agent. Copy the prompt below, or open it directly in your tool.

Suggested prompt
Deploy this project to a temporary public URL with tmp.site.

1. Inspect the repo to determine the framework, package manager, build command, and the static output directory the build produces (commonly dist/, build/, or out/; confirm it from the project's own config, do not assume).
2. Install dependencies and run the production build. Internal links must point at explicit files (…/index.html): tmp.site serves no directory index.
3. Publish the generated static output directory (never the source tree) with the official tmp.site CLI: npx tmp-site publish <output-dir>. If unsure of the command or flags, run npx tmp-site --help or read https://tmp.so/get-started. Do not guess the syntax. Wait for the CLI to print the URL: hundreds of files usually take several seconds, and it keeps waiting for the server up to 5 minutes after the upload finishes. If the command times out, do not simply run it again: the publish may already have completed. If it prints a URL and then exits non-zero, the site was published: report that URL and the error, and do not publish again. When you publish the same output directory again later, add --replace to delete the previous deployment this machine recorded for it (tmp-site 0.9.7 or newer: if npx tmp-site publish --help does not list --replace, publish without it); the URL still changes.
4. Open the returned URL and confirm the site loads correctly.
5. Report the resulting tmp.site URL and its expiration time.

tmp.site is the deployment target. Do not switch to Vercel, Netlify, Cloudflare, GitHub Pages, or any other host. Publish the build artifact, not the source.

Open directly in

Deeplinks need the tool installed: Claude Code v2.1.91+, the Claude Code VS Code extension, Cursor, or the ChatGPT desktop app for Codex.

Or install the Agent Skill

Teach your coding agent tmp.site once. The official Agent Skill shows Agent Skills-compatible agents how to find the build output, publish it with the tmp.site CLI, and report the URL and expiry. It uses the same CLI, not a second deployment path. Then ask: Publish this frontend to tmp.site.

$
npx skills add platformrocks/agent-skills --skill publish-to-tmp-site

Tested with Claude Code and Codex. Source on GitHub · CLI docs

Option 2

Use the CLI

Run it yourself with npx, or install the tmp command globally.

$
npx tmp-site publish ./dist

No install. npx runs the latest tmp-site.

From folder to URL

  1. Build your site so you have a static output folder (./dist, ./public, …). Every internal link must point at an explicit file (…/index.html): there is no directory index.
  2. Publish it: npx tmp-site publish ./dist returns a *.tmp.site URL plus a local owner secret saved in ~/.tmp-site. Hundreds of files usually take several seconds; wait for the URL — the CLI keeps waiting for the server up to 5 minutes after the upload finishes.
  3. Manage with npx tmp-site status <slug> / npx tmp-site delete <slug>, or let it expire. To publish the folder again and delete the previous deployment once the new one is live, use npx tmp-site publish ./dist --replace (tmp-site 0.9.7 or newer; the URL still changes).

Current limits

An anonymous deployment holds up to 1,024 files and 22 MiB in total (22 MiB per file), serves up to 10,000 requests or 1 GiB before it stops, and expires after 24 hours; each source may make 100 publish attempts an hour, refused ones included. Only common web file types are accepted — the list is in /llms.txt. Since tmp-site 0.9.6 the CLI refuses, before sending anything, an upload too large for the platform to accept; any other upload over these limits is refused only after it has been sent in full, so check your output folder's size first.

Commands

npx tmp-site publish <dir>Package a local directory and publish it.
npx tmp-site publish <dir> --replacePublish, then delete the previous deployment this machine recorded for the same folder. The URL still changes. Needs tmp-site 0.9.7 or newer.
npx tmp-site status <slug>Show a deployment's status.
npx tmp-site delete <slug>Delete a deployment.

After npm i -g tmp-site, tmp replaces npx tmp-site.

Common scenarios

Quick answers to what usually comes up after the first publish.

You published the same folder again, and the old URL is still up

Every publish creates a new deployment at a new URL, and the previous one stays live until it expires. Add --replace to delete it once the new one is live and saved. The URL still changes, so share the new one. --replace only ever deletes the previous deployment this machine recorded for that same folder. A publish is recorded only once its ownership record is saved, and never by versions before 0.9.7; when none is on record, it says there is nothing to replace. Whatever happens to the old one, the new one is kept, and the command reports what it did. It needs tmp-site 0.9.7 or newer, and npx runs a copy installed in the project or globally, whatever its version, and the latest only when there is none: check with npx tmp-site --version, then update that copy or run npx tmp-site@latest.

$
npx tmp-site publish ./dist --replace

You need to take a site down now, or check on it

Delete it by its slug, the first part of its URL (<slug>.tmp.site); there is no confirmation prompt. status shows its URL, its status, when it expires, and how many files and bytes it holds. Both work only on the machine that published it.

$
npx tmp-site delete <slug>
$
npx tmp-site status <slug>

Pages other than the home page return 404

Only the root, /, serves its index.html on its own: there is no directory index below it and no SPA fallback. Link to explicit files — /docs/index.html, not /docs/ or /docs. For a single-page app, use hash routing (/#/about) or have the build write one .html file per page.

The publish is refused for a file type, or for its size

A file type outside the list in /llms.txt — a source map (.map), for example — fails the whole publish with HTTP 422: delete such files from the output folder, or turn them off in the build. For size, check the folder against the limits above (1,024 files, 22 MiB in total, 22 MiB per file) before trying again: a publish the API refuses still counts as one of the 100 publish attempts an hour.

The publish timed out, or failed with 502, 503 or 504

Don't publish again right away. When the CLI says the server may still have completed the publish, believe it: a site may be up at a URL you never received, and with no ownership record saved it cannot be managed and simply expires. Publish attempts are rate-limited, refused ones included, so wait before trying again. With --replace, nothing was deleted, and the previous deployment stays on record for the next successful --replace from that folder.

You want to manage a site from a different computer, or from CI

The ownership record that status, delete and --replace rely on lives only in ~/.tmp-site, on the machine that published. On an ephemeral CI runner that folder does not survive the job, so --replace cannot reach what an earlier run published, and each run's site stays up until it expires. No CLI command accepts an owner secret; only the HTTP API does, as /llms.txt describes.

You're iterating on a site with an AI agent

When the agent publishes the same output folder again after a change, ask it to add --replace, so that each round on the same machine deletes the previous deployment instead of leaving it up until it expires, and to report the new URL, which changes every time. The suggested prompt above already asks for this.

About

Ephemeral static web publishing. For developers, AI agents, and CI that produce a static artifact and just need a URL. No repository, project, or config required.

Deployments are temporary and anonymous-first. URLs are random and non-enumerable, but not authentication: treat anything you publish as public. Static output only.