Build & deploy

june build

Everything dynamic about dev gets frozen at build time:

input output
app/**/page.* static route manifest (+ nested layout chains)
june.config.ts inlined literals (site, speculation, agent config)
content/<dir>/*.md app/_content.ts — the manifest dev AND workerd read
a page exporting prerender = true static html/md/json rendered THROUGH the built worker
app/_client.* the islands bundle served at /client.js

The bundle is self-contained ESM (rolldown; conditions baked in — workerd has no runtime conditions). Binary assets and build.external packages stay external for wrangler's own rules.

Prerender

Opt-in per route, static routes only. What ships is what was tested: the build renders through the bundled worker, not a parallel code path. Don't opt in routes whose output depends on ctx.url.origin.

june deploy

The verb is fixed; the target is an adapter — workers today, more later. june deploy = build → resolve wrangler config → upload → URL. --dry-run validates everything without uploading — it's also the CI test.