# reror > Static sites at .reror.net with no account. Send a folder with an index.html, get a link and a manage key. ## Publish - CLI: `node cli/bin/reror.js ./dist --name myname` (Node 20 or newer, no dependencies). Not on npm yet: run it from a copy of the reror source. Prints the link and the manage key once and saves them to .reror.json. Add .reror.json to .gitignore. - MCP: https://mcp.reror.net/_reror/mcp (Streamable HTTP, stateless, spec 2026-07-28). Tools: check_name, deploy_site, update_site, list_versions, rollback, site_stats, set_password, delete_site. Requests up to 36 MiB; use the CLI for bigger sites. - REST: https://api.reror.net/_reror/v1. OpenAPI: https://reror.net/openapi.yaml - Agent instructions: https://reror.net/skill.md ## Limits - Free: 25 MiB, 2000 files, 1 version kept. - Supporter key: 100 MiB, 10000 files, 3 versions kept, never expires. - A new site lasts 7 days. With a manage key or a password it lasts a year and can be renewed. - Names: 3 to 40 of a-z, 0-9 and hyphen, no hyphen at either end. - Per client: 3 new sites a day, 5 live, 20 deploys an hour, 60 name checks a minute, 300 API requests a minute. ## Proof of work A new site without a supporter key needs one. POST https://api.reror.net/_reror/v1/pow/challenge returns challenge and difficulty (now 22). Find a decimal nonce where SHA-256 of challenge + ":" + nonce starts with difficulty zero bits. A challenge lasts 5 minutes and works once. ## REST flow 1. POST /sites/check {"name"} 2. POST /pow/challenge 3. POST /uploads {"name", "kind": "folder", "size", "files": [{"path", "size"}], "pow": {"challenge", "nonce"}} returns upload_id, chunk_size (5 MiB) and chunks. 4. PUT /uploads/{id}/chunks/{n} with the bytes and X-Chunk-SHA256. GET /uploads/{id} lists the chunks stored. 5. POST /uploads/{id}/finalize returns url and key_token. 6. POST /sites/{name}/key {"key_token"} returns manage_key. One use, within 15 minutes. - New version: steps 3 to 5 with "replace": true and Authorization: Bearer . - Errors are {"error", "message"}. Every answer has RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; a refusal adds Retry-After.