Deploy Nuxt (generate) to thin.host

Prerender a Nuxt app with nuxt generate and publish .output/public to thin.host. thin.host serves the static files and gives you a live URL right away. Your agent can do every step for you through the thin.host MCP server, or you can run one curl command.

At a glance

StepNuxt (generate)
Build commandnpx nuxt generate
Folder to deploy.output/public/
Preview build (served at /s/my-site/)NUXT_APP_BASE_URL=/s/my-site/ npx nuxt generate
Deploycurl -F file=@site.zip -H "Authorization: Bearer $THINHOST_API_KEY" https://thin.host/v1/websites/archive
Live URLhttps://thin.host/s/my-site/, or your own domain

Before you start

Create a project (skip if you have one)

npm create nuxt@latest my-app

Set the base path

Until a domain points at it, a thin.host site lives under a sub-path: https://thin.host/s/<slug>/. The app.baseURL option sets the path prefix. Nuxt also reads NUXT_APP_BASE_URL at build time, so the preview build needs no config change.

// nuxt.config.ts
export default defineNuxtConfig({
  app: { baseURL: '/' },
});
Where readers will lookBuild with
The preview URL https://thin.host/s/my-site/NUXT_APP_BASE_URL=/s/my-site/ npx nuxt generate
A custom domain, or a free <name>.thin.host subdomainnpx nuxt generate (base path /)

Pick the slug (my-site here) before you build the preview, and pass the same slug when you deploy.

Build

npx nuxt generate

The finished site is in .output/public/. That folder is what you deploy.

Deploy from your agent (MCP)

Connect thin.host to Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Codex or ChatGPT once (setup for each client), then ask:

Build this Nuxt (generate) project for thin.host with the slug my-site and publish the .output/public/ folder.

With the local server (uvx thinhost-mcp) the agent runs the build and calls publish_website with the absolute path of .output/public/; large builds are split across requests automatically. Later changes go out with update_website and sync=true, which also removes files the new build dropped.

The hosted connector (https://thin.host/mcp, used by claude.ai and ChatGPT) cannot read your disk. From a coding agent it uploads with the REST call below; otherwise it publishes from a public link to a zip or HTML file with publish_website_from_url.

Deploy with curl

cd .output/public && zip -r ../../site.zip . && cd -
curl -F file=@site.zip -F title="My Nuxt (generate) site" -F slug=my-site \
  -H "Authorization: Bearer $THINHOST_API_KEY" \
  https://thin.host/v1/websites/archive

The JSON response includes url, the live address (https://thin.host/s/my-site/). To redeploy, upload the new zip to the site's archive endpoint; pages and assets missing from it are removed:

curl -F file=@site.zip \
  -H "Authorization: Bearer $THINHOST_API_KEY" \
  https://thin.host/v1/websites/my-site/archive

A single upload can be up to 30 MB. See the REST API reference for every field.

Add a custom domain

  1. Open the site in the dashboard and add your hostname under Custom Domains, for example www.example.com. A <name>.thin.host subdomain is free and works immediately.
  2. Create the DNS record the dashboard shows: a CNAME pointing at cname.thin.host. TLS is issued automatically once DNS resolves.
  3. Rebuild with the base path / (npx nuxt generate) and redeploy.

Pages on a custom domain get a canonical tag, a generated robots.txt and a sitemap.xml.

Nuxt (generate) notes

FAQ

Should I use nuxt build or nuxt generate for thin.host?

nuxt generate. nuxt build produces a Node server, which thin.host does not run; generate writes static HTML for every route to .output/public.

Why does the preview URL load without styles or scripts?

The site is served under /s/<slug>/ until a custom domain points at it, so a build that references /assets/... asks the thin.host root for files that live under the sub-path. Build with the base path set to /s/<slug>/ for the preview, or map a domain (a free <name>.thin.host subdomain works) and build with base /.

How do I redeploy?

Rebuild, zip the output folder again and POST it to /v1/websites/<slug>/archive, or ask your agent to run update_website with sync=true. Sync removes files the new build no longer contains, so old hashed bundles do not pile up.

How large can a site be?

A single archive upload can be up to 30 MB. The local MCP server (uvx thinhost-mcp) reads the build folder directly and splits large sites across requests, up to 150 MB.

Sources

Commands and options checked against the official Nuxt (generate) docs on 2026-10-14:

Other frameworks: all deploy guides. Coming from another host? Compare thin.host.