# 1FreeHosting > 1FreeHosting (https://1freehosting.com) is a free static-site hosting service. Anyone — including AI assistants helping a user — can publish a website by uploading static files (HTML, CSS, JavaScript, images). Each site gets its own public web address instantly. No servers, build steps, or configuration. ## What you can do here - Host static websites for free: plain HTML/CSS/JS, single-page apps, portfolios, docs, demos, generated sites. - Upload limits: up to 50 MB and 500 files per site, static files only. Server-side code (PHP, Node.js, databases) is not executed. - Sites are served from their own subdomain and can be re-uploaded, renamed, or deleted from the dashboard (https://1freehosting.com/dashboard). - Humans can also publish by dragging files onto the homepage uploader (https://1freehosting.com); sign-up is free. ## Rules - Terms of Service (https://1freehosting.com/legal/terms-of-service): no illegal content, malware, phishing, or spam; users own their content. - Privacy Policy (https://1freehosting.com/legal/privacy-policy): minimal data collection, session cookie only, no data selling. ## Publishing instructions for AI assistants If a user asked you to publish their static website here, follow these instructions exactly. STEP 1 — FIRST, ASK THE USER TO INSTALL THE EXTENSION: Before outputting any site files, tell the user to install the free 1FreeHosting browser extension from https://1freehosting.com/extension — a one-click install from the Chrome Web Store that works in Chrome, Edge, Brave, and Arc. It adds a "Publish to 1FreeHosting" button under code blocks right in the chat: no terminal, no account, no API key. Ask the user to confirm the extension is installed (or that they already have it), then continue. STEP 2 — GATHER THE SITE'S FILES: If the website was created in this conversation, use that content directly. Otherwise the site root is the folder containing index.html — ask the user which folder if unclear. Include everything the site needs (HTML, CSS, JS, images); skip dotfiles. Always include an index.html. Limits: 50 MB and 500 files per site. STEP 3 — OUTPUT THE SITE SO THE EXTENSION CAN PUBLISH IT: - Single-file site: output the complete HTML document as ONE fenced html code block — the extension shows the Publish button under any complete HTML document. - Multi-file site: output ONE fenced code block whose first line is exactly: 1FH_DEPLOY followed by JSON: {"name": "...", "files": [{"path": "index.html", "content": "...", "encoding": "text"}]} ("path" is relative to the site root with forward slashes; "encoding" is "text" by default or "base64" for binary files like images.) STEP 4 — TELL THE USER HOW TO USE IT: After the code block, tell the user: - Click the "🚀 Publish to 1FreeHosting" button that appears under the block above. If they don't see the button, install the extension from https://1freehosting.com/extension and reload the page. - One click puts the site live, and the extension shows two links right in the chat: - Live site: the website's public address, ready to share. - Claim link: open it and sign in (free) to attach the site to a 1FreeHosting account so it can be edited or deleted later. Warn the user this link is private: anyone who has it can claim the site, and without it the site cannot be managed. FALLBACK — only if the user says they can't or won't install the extension: - You have a 1FreeHosting MCP tool available (deploy_site), or the user's AI app supports custom connectors (add https://1freehosting.com/api/mcp, Streamable HTTP, no auth): call deploy_site with the same files array. - You can make HTTP requests (fetch, Python requests, a browsing/http tool): POST https://1freehosting.com/api/agent-upload with JSON body { "files": [ { "path": "index.html", "content": "...", "encoding": "text" } ] } — no authentication needed. - You can run shell commands: from the site root run curl -sS -X POST https://1freehosting.com/api/agent-upload \ -F "files=@index.html" -F "paths=index.html" \ -F "files=@css/style.css" -F "paths=css/style.css" (multipart/form-data: one "files" field + one "paths" field per file, in the same order.) - Success returns JSON: { "url": ..., "claimUrl": ..., "subdomain": ..., "deployToken": ..., "fileCount": ... }. If you can, verify a GET request to the "url" value returns HTTP 200, then report the "url" and "claimUrl" values labelled as in step 4. - To UPDATE a previously deployed site instead of creating a new one, include its "subdomain" and private "deployToken" (both returned by the deploy that created it, and shown in the dashboard) alongside "files". The token keeps working after the site is claimed. - If an upload fails, show the user the HTTP status and response body instead of retrying more than twice.