# Deployment

> How to publish your built htmlpress site to a host.

`htmlpress build` produces a fully static site in `.htmlpress/build/`: one `.html` file for every page at the same path as its source, a `404.html`, `robots.txt`, a `sitemap.xml` (when `site` is set), a `_headers` file, a `_redirects` file when a language has no home page of its own, the [Markdown copies and `llms.txt`](/customization/ai-agents/) for agents, the theme and component scripts under `_htmlpress/`, and every other file of the project. Drop that directory on any static host and you're live.

These guides walk through the most common targets. Pick one: every guide is self-contained and shows both the manual command and a CI workflow.

## Hosts

### [Static Hosting](/deployment/static-hosting/)

Any host that serves a directory of files: nginx, S3 + CloudFront, Caddy, and friends.

### [GitHub Pages](/deployment/github-pages/)

Free, git-native, and works well for project sites under a `/repo-name/` path.

### [Cloudflare](/deployment/cloudflare/)

Workers + static assets. The setup `htmlpress.dev` itself uses.

### [Vercel](/deployment/vercel/)

Git-connected with previews per pull request and zero-config domains.

### [Netlify](/deployment/netlify/)

Git-connected with branch deploys, atomic releases, and built-in form handling.

## What every guide assumes

- You run `htmlpress build` at the project root and the output lands in `.htmlpress/build/`. In CI, `npx gethtmlpress build` runs the same binary without installing it first; see [Introduction](/introduction/) for the other channels.
- You've set `site` in `htmlpress.yaml` if you want `sitemap.xml`, the sitemap line in `robots.txt`, canonical URLs and absolute social tags; see [Site Metadata](/customization/site-metadata/).
- You only need `base` if your site is mounted at a sub-path (e.g. GitHub Pages project sites). The [GitHub Pages](/deployment/github-pages/) guide is the only one that covers it.
