- Server functions can return not_found: true to render the 404 page
with status 404.
- Page components and window.__PAGE_PROPS__ (and HMR updates) only get
props, query, url and error. response_options, redirect, cache settings
and res_transform stay on the server, so cookies and private headers no
longer end up in the HTML. BunextPageProps is narrowed to match
(breaking for code that read server-only fields from component props).
- response_options headers go through a Headers object, so repeated
headers such as several Set-Cookie survive.
- Redirects: status_code wins over permanent; response_options headers
and res_transform apply to redirects too.
- Gzip for compressible text responses; compress: false to turn it off.
- Files the router matches but never bundles (.server.ts, __root,
excluded paths and directories) return 404 instead of looping through
dev rebuild retries.
- Missing public files return 404 rather than 403, so dotted page paths
like /users/john.doe fall through to pages again.
- importFresh detects rewrites within the filesystem's mtime granularity.
- README: self-hosted React (not esm.sh), snake_case option names, static
file serving, cache headers, the new options.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Page rendering imported the SSR bundle and .server.ts modules with a
unique ?t= query on every request, in production too. Each one became a
new, never-evicted module record (and re-ran module top-level code), so
RSS grew with request count. Cache-bust only in dev via importFresh.
Co-Authored-By: Claude Opus 5.5 <[email protected]>