Static site hosting, own server, atomic releases and smart cache headers
A static site deserves the same care as an app: a reproducible build, an atomic switch so visitors never see half-uploaded files, correct cache headers, and a way back when a release breaks a page. Deployment builds your Astro, Hugo, Vite, Eleventy or Docusaurus project on your own server and serves it from nginx or Caddy, next to your apps and under your own domains.
What Deployment detects in a static site repository
astro in package.json selects an Astro build with dist/ as the output. A hugo.toml, hugo.yaml or config.toml with a content/ folder selects Hugo with public/. Vite projects (React, Vue, Svelte or plain) build into dist/, Eleventy into _site/, Docusaurus and Gatsby into build/ and public/. If an Astro or SvelteKit project uses a server adapter, Deployment notices that it is not purely static and offers a Node process instead, as described on node js hosting.
- Build command and output folder per generator, editable in the panel
- Node LTS or the Hugo extended binary in the version your project expects
- Single page app fallback to
index.htmlfor client-side routing - Clean URLs without
.htmlwhen the generator writes folders with index files
What Deployment installs for static sites
The server gets the same hardening as any other (firewall, key-only SSH, unattended security updates, swap), plus nginx or Caddy, the build toolchain your generator needs, and a free Let's Encrypt certificate for every domain and alias, renewed automatically. Wildcard certificates are issued through your DNS provider's API, which is handy for preview subdomains. Redirects from old URLs are managed in the panel and written into the server block, so a migrated blog keeps its rankings.
A static build and deploy script
For Hugo the build is hugo --minify --environment production. The last line is a cheap guard: if the build produced no index page, the release stops before anything changes for visitors. The web root then points at the output folder of the new release.
cd "$RELEASE_PATH" npm ci npm run build test -f dist/index.html
Cache headers that match how static files change
Generators put a content hash into the names of CSS, JavaScript and font files. Those files never change, so Deployment serves them with Cache-Control: public, max-age=31536000, immutable. HTML pages change with every release, so they get no-cache, which lets browsers revalidate with an ETag and still load quickly. You can add your own rules per path in the panel, and gzip and Brotli compression are on by default.
location ~* \.(css|js|woff2|svg|png|jpg|webp|avif)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
location / {
add_header Cache-Control "no-cache";
try_files $uri $uri/ $uri.html =404;
}Atomic releases and instant rollback for static sites
Uploading files over an old site leaves a window in which a page references a stylesheet that does not exist yet. Deployment builds into a new release folder and moves the web root with one symlink switch, so every visitor gets either the full old site or the full new one. Previous releases stay on disk, which makes rollback a one-click switch with no rebuild. Read how this works on zero downtime deployment, and connect a branch per environment on deploy from git.
Static sites next to your apps on one server
Most teams have a marketing site, a docs site and a status or landing page beside their main app. On Deployment they share the server you already pay for, each with its own domain, certificate, build and deploy history. Builds run on push, so content editors working in git or a headless CMS that commits to your repository see their changes live minutes later. Uptime checks watch each site and alert you by email, Slack, Discord or webhook if a page stops answering.
Which plan fits your static site hosting
| Plan | Monthly | Yearly, per month | Servers | Sites |
|---|---|---|---|---|
| Starter | 49 USD | 24 USD | 3 | 15 |
| Team | 199 USD | 99 USD | 15 | 100 |
| Agency | 499 USD | 249 USD | 60 | unlimited within servers |
| Enterprise | 1 499 USD | 749 USD | 250 | unlimited within servers |
Static sites count as sites, so Starter covers a handful alongside your apps. Agencies hosting dozens of client sites pick Agency for unlimited sites within their servers.
Static site hosting questions
Can I build on my CI and only upload the result?
Yes. Replace the build lines with a download of the build artifact for the commit. The release still switches atomically and keeps its rollback history.
Do single page apps with client routing work?
Yes. Turn on the fallback for the site and every unknown path is served by index.html, while real files and assets are served directly.
Can I put a CDN in front?
Yes. Cache headers from the server are respected by common CDNs, and you can purge the CDN from the deploy script after the switch.
Can I try Deployment before I pay?
Yes. The home page has a free one-time demo: paste a public repository URL and see the detected stack, the server plan and the first lines of the deploy script. Plans start at 49 USD a month, or 24 USD a month billed yearly.
Host your static sites where your apps live
Connect a server, add your repository and push.
$ git push origin main
✓ build release 20261019-142210
✓ health check 200
✓ switch current 0.4 s
$