Skip to content
Built with

Static Site Generation (SSG) ​

Set output: "static" in void.config.ts to prerender all pages at build time:

json
{
  "output": "static"
}

When output is "static":

  • Pages default to prerender = true and are written as HTML files to dist/client/.
  • Use export const prerender = false in a page's .server.ts to opt out. That page will be server-rendered on request.
  • Dynamic pages without getPrerenderPaths() are implicitly not prerendered (the paths aren't known at build time).
  • The build output is self-contained and works for direct Cloudflare deployment, self-hosting, or void deploy.

Per-page overrides ​

Individual pages can opt out of prerendering:

ts
// pages/dashboard.server.ts
export const prerender = false;

Dynamic pages with getPrerenderPaths() are prerendered for the returned param combinations:

ts
// pages/blog/[slug].server.ts
export async function getPrerenderPaths() {
  return [{ slug: 'hello-world' }, { slug: 'getting-started' }];
}

Comparison with edge prerendering ​

output valueDefault prerenderPer-page overridePrerender timing
"server" (default)falseexport const prerender = trueDeploy-time (platform ISR)
"static"trueexport const prerender = falseBuild or deploy post-build

With the default output: "server", use export const prerender = true for deploy-time edge prerendering.

Deployment behavior ​

void deploy chooses the deployment automatically:

  • Fully static: if every page is prerendered and there are no API routes, middleware, cron jobs, or queues, Void deploys as a pure static site with no worker.
  • Hybrid: if any pages are not prerenderable, such as dynamic pages without getPrerenderPaths() or pages with export const prerender = false, a worker is deployed to handle those routes at runtime. Prerendered pages are still served as static assets.

Relationship to inference.appType: "static" ​

The inference.appType field describes app type (SPA, static, void), while output controls rendering strategy:

inference.appType: "static"output: "static"
WhatDeploy a pre-built static site (no Void plugin)Prerender a Void app at build time
WorkerNone (static assets only)Only if some pages can't be prerendered
Use caseVitePress, plain HTML, external SSG toolsVoid apps with mostly or fully static content