DeployRuntimes

Static sites

Files served exactly as handed, over HTTPS. No build step and nothing to start.

Your files are served exactly as handed, over HTTPS. index.html at the project root is served at /; other files are served at their paths. There is no build step and nothing to start — good for a landing page, a docs site, or any pre-built single-page-app bundle.

A minimal static site
index.html          # served at /
styles.css
app.js

The static runtime is inferred from an index.html at the project root, and it takes no version — see Choosing a version.

Routing

RequestServed
/index.html at the root
/styles.cssstyles.css
/docs/docs/index.html
/about.htmlabout.html
A path with no matching file404

Single-page apps that route client-side

There is no fallback rewrite to index.html, so deep links into a client-routed SPA return 404 on a hard refresh. Three ways round it: use hash routing, pre-render your routes to real files (most frameworks can), or serve the bundle from a Node app that returns index.html for unmatched paths.

Deploying a framework build

Frameworks like React, Vue, Svelte and Astro produce a folder of plain files. Build first, then deploy the output folderdist, build or out — not the project root. Deploying the source of a framework project sends a package.json, which infers the Node runtime and looks for a start script that isn't there.

Under the hood

Static sites are served by nginx from a container built with FROM nginx:1.27-alpine, with your files copied to the web root. Nothing is compiled, nothing is executed, and no dependencies are installed — which is why a static deploy is the fastest thing on the platform, and the cheapest. See Plans & what counts.