# Deploy static HTML

No framework, no build - a repository (or [upload](/create/upload)) of HTML, CSS, and JavaScript deploys as-is. The output directory is the repository root, and its contents are exactly what the CDN serves, with [free bandwidth](/billing/pricing#static-sites).

## Settings

- **Build command:** empty. Add one if you do have a step (a Tailwind CLI pass, an esbuild bundle) - then point the [output directory](/create/build-settings#output-directory) at what it writes.
- **Output directory:** `.` by default. Set it to a subfolder (`site/`, `dist/`) to serve only that folder - nothing outside it is deployed.

## This is also the escape hatch

Generators the platform doesn't build yet - Hugo, Jekyll, anything bespoke - deploy this way: build locally, commit or upload the output, serve it as static HTML. See the note on [Frameworks](/platform/frameworks#frontend).

## What you still get

Everything except a build: [preview environments](/platform/preview-environments) per branch, [custom domains](/platform/custom-domains) with automatic certificates, deploy history, and per-environment variables (useful only if a build step consumes them - plain files inline nothing).

## Related

- [Build settings](/create/build-settings): Adding a build step in front of static output.
- [Deploy from an upload](/create/upload): Shipping a folder without a repository.
- [Custom domains](/platform/custom-domains): Your own hostname on the CDN.
