# tmp.site > Free, ephemeral static web publishing. A built static folder becomes a temporary, anonymous https://.tmp.site/ URL with one command: `npx tmp-site publish ./dist`. No account, no config, no project. For developers, AI agents, and CI. Key facts before publishing: - Publish the BUILT static output directory (./dist, ./build, ./out, ./public), never the source tree. The directory must contain exactly one root index.html. - Links between pages must point at an explicit file: /docs/index.html works, /docs/ and /docs do not (no directory index beyond the root, no SPA fallback). Configure the build accordingly (for example, avoid trailing-slash links that rely on the server resolving a directory). - Static output only: no server-side execution, SSR, backends, or databases. - Anonymous deployments expire automatically (currently 24 hours). Every publish creates a new URL; there is no in-place update. - URLs are cryptographically random and non-enumerable, but a random URL is NOT authentication: treat everything you publish as public. Do not publish secrets. - Current limits per deployment: 1,024 files, 22 MiB total, 22 MiB per file. The 1,024-file value is a technical safety ceiling, not a product quota. Publishing is rate-limited to 100 attempts per hour per source. - Allowed file extensions: .html .css .js .mjs .json .txt .xml .svg .png .apng .jpg .jpeg .gif .webp .avif .ico .woff .woff2 .ttf .otf. Any other file (for example .map, .wasm, .md, .pdf, .mp4, or an extensionless file) makes the whole publish fail with HTTP 422, so strip them from the output first. - The CLI skips .git, node_modules, .npmrc, .env and .env.*; it does not read .gitignore. Symlinks abort packaging. ## CLI Package: tmp-site on npm (https://www.npmjs.com/package/tmp-site). Binaries: `tmp` and `tmp-site`. Requires Node.js 20 or newer. - No install: `npx tmp-site publish ./dist` - Global install: `npm i -g tmp-site`, then `tmp publish ./dist` Commands: - `tmp publish `: package a local directory and publish it as an anonymous temporary site. Prints `URL: https://.tmp.site/` and `Expires: ` to stdout; progress goes to stderr. The flag `--show-owner-secret` also prints the one-time management credential. - `tmp status `: show a deployment this machine owns (URL, status active|expired|deleted, created, expires, file count and bytes). - `tmp delete `: delete a deployment this machine owns. No confirmation prompt. Ownership: publish saves an owner secret locally at `~/.tmp-site/anonymous-owners/.json` (plaintext; 0600 on POSIX). status and delete only work on the machine that holds that record; use `--show-owner-secret` to capture the secret for use elsewhere. Anyone who can read the file can manage the deployment until it expires. Automation: when stdout is not a TTY the output is plain text with ISO timestamps (no colour, no spinner). Parse the stdout lines starting with `URL: ` and `Expires: `. On failure the exit code is non-zero and stderr contains `Error: publish failed (HTTP ): ` (indented and wrapped to about 74 columns when piped, so match the `HTTP <status>` substring rather than a line prefix), sometimes followed by `Retry after N seconds.`; local problems (`directory not found: ...`) and network problems (`cannot reach the tmp.site API ...`) are worded differently. The CLI makes exactly one publish attempt per run; do not retry in a loop, publish attempts are rate-limited. Timeouts: publishing hundreds of files can take several seconds; the CLI waits for the server's answer up to 5 minutes after the upload finishes (the server's own deadline; the transport budget is 10 minutes including the upload), so let it finish. `Error: publish request timed out after N s ...` means the CLI stopped waiting, and a bare `HTTP 502`, `503` or `504` without a title means the platform closed the connection: in both cases the server may still have completed the publish and activated a site at a URL you never received. It expires automatically and cannot be managed (no `~/.tmp-site/anonymous-owners/<slug>.json` was written). Do not retry immediately. Environment: set `NO_COLOR=1` in automation to force plain output; `FORCE_COLOR` turns colour and the relative expiry (`Expires: in 59 minutes`) on even when piped, which breaks parsing. `TMP_SITE_API_BASE_URL` overrides the API origin (default https://api.tmp.so); not needed for normal use. ## Suggested agent 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 — a large site can take a few minutes. If the command times out, do not simply run it again: the publish may already have completed. 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. ## Agent Skill The official Agent Skill teaches Agent Skills-compatible coding agents this workflow (find the build output, publish with the CLI, verify, report URL and expiry). Install it into a project with `npx skills add platformrocks/agent-skills --skill publish-to-tmp-site`; source: https://github.com/platformrocks/agent-skills. ## Pages - Home: https://tmp.so/ - Get started (agent prompt, deeplinks, CLI install, commands): https://tmp.so/get-started - Terms of service, acceptable use policy, responsibility: https://tmp.so/legal - npm package: https://www.npmjs.com/package/tmp-site ## Operator tmp.site is an initiative of PLATFORM ROCKS (https://platform.rocks).