A URL that works exactly once, then self-destructs.
One visit. First person to open the link sees your site. Everyone after gets 410 Gone. No cleanup, no lingering deployments.
Public URL. A Cloudflare tunnel gives you a shareable https:// URL — no account needed, no DNS setup.
Self-destruct. After the visit (or when the TTL expires), the process exits. Nothing left running.
$ npx @lorb/deploy-once ./dist
deploy-once
URL: https://random-words.trycloudflare.com
Waiting for visitor... (expires in 24h)
Visited! Shutting down.npm install -g @lorb/deploy-onceOr run directly with npx:
npx @lorb/deploy-once ./distdeploy-once ./dist --message "PR #42 preview"Send the URL in Slack. Reviewer opens it, sees the site, done. The link dies after.
deploy-once ./dist --ttl 1hOne-hour window. If nobody visits, it shuts down automatically.
deploy-once index.htmlSingle files must be .html. For other file types, put them in a directory.
URL goes to stdout, everything else to stderr. Pipe-friendly.
url=$(deploy-once ./dist 2>/dev/null)
echo "Send this to the client: $url"deploy-once ./dist --local
# Serves on localhost only — no public URLimport { createOneShotServer } from '@lorb/deploy-once';
const server = await createOneShotServer({
path: './dist',
ttlMs: 60 * 60 * 1000,
});
console.log(server.url); // https://....trycloudflare.com
console.log(server.port); // local port
server.events.on('visited', ({ time, ip }) => {
console.log(`Visited from ${ip}`);
});
const reason = await server.done; // 'visited' | 'ttl'Public URLs require cloudflared installed. No Cloudflare account needed — it uses Quick Tunnels.
Use --local to skip this requirement.
deploy-once <path> [options]
--ttl <duration> Auto-expire (default: 24h). Examples: 30m, 1h, 6h
--message <text> Display in terminal when someone visits
--local Skip tunnel, localhost only
-h, --help Show help
𖦹 MIT — Lorb.studio