Static and SSR fidelity
Static site and SSR targets share the same authored widget tree as native targets, but they do not have every native runtime capability. The right model is progressive fidelity: use typed Fission primitives, let the site shell lower what can be represented in HTML/CSS, and keep interactive host work explicit.
They also share DocumentShellConfig, so document presentation does not drift
based on when a page is rendered. FissionSite and FissionServerApp expose
the same APIs for themes, generated design systems, packaged fonts, favicons,
syntax highlighting, custom CSS, route-filtered page elements, head markup,
body-end markup, structured data, and retained footers.
let site = FissionSite::new()
.with_design_system::<ProductDesignSystem>(DesignMode::Light)
.favicon("/assets/icon.svg")
.head_html("<meta name=\"product\" content=\"catalog\">")
.footer_widget::<AppState, _>(ProductFooter);
let server = FissionServerApp::new("Product")
.with_design_system::<ProductDesignSystem>(DesignMode::Light)
.favicon("/assets/icon.svg")
.head_html("<meta name=\"product\" content=\"catalog\">")
.footer_widget::<AppState, _>(ProductFooter);
Locale and metadata selection follow the same sequence on both targets: seed
the environment, select a locale, then resolve document metadata with the
locale-aware render context. Static site performs that work at build time and
honours locale front matter; SSR performs it for each request.
What lowers well
| | |
|---|
Length points, percent, viewport units, clamp | CSS lengths and clamp() where possible | CSS lengths and clamp() where possible |
Responsive viewport cases | CSS/media-rule style branch selection | CSS/media-rule style branch selection |
Responsive container query | Lowered when static constraints can express it | Lowered where request/runtime supports container sizing |
GridTrack points/fr/auto/minmax/repeat/auto-fit | | |
Solid fills, gradients, borders, radius, shadows | | |
| Emitted as font assets where configured | Emitted as font assets where configured |
| CSS backdrop-filter if supported by browser | CSS backdrop-filter if supported by browser |
What needs care
Animations, jobs, services, and capabilities still need a runtime. Static
output can describe the initial state and now preserves portals and browser
surface registrations, but it cannot perform user-triggered host work without
a client runtime or island. SSR additionally owns request-only behavior such as
sessions, signed actions, cache policy, response status, dynamic parameters,
workers, and islands. Static site uniquely owns content discovery, generated
search files, redirects, sitemap/robots output, and link checking.
Prefer declarative layout primitives for pages that must statically render well. Use imperative viewport logic only when the result can still be evaluated by the target shell.