Since .NET 8, one Blazor Web App can mix several render modes, even per component.
| Mode | Where code runs | Interactive? | Good for |
|---|---|---|---|
| Static SSR | Server, renders HTML once | ❌ (forms still work) | Content pages, SEO, fastest first load |
| Interactive Server | Server, UI updates over a SignalR circuit | ✅ | Internal apps, direct DB access, small download |
| Interactive WebAssembly | In the browser (.NET on WASM) | ✅ | Offline-ish apps, offloading the server |
| Interactive Auto | Server first, then WASM once downloaded | ✅ | Best of both, at the cost of complexity |
@* Per component *@
@rendermode InteractiveServer
@* Per instance *@
<Counter @rendermode="InteractiveWebAssembly" />
// Program.cs
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(Client._Imports).Assembly);
Prerendering is on by default.
OnInitializedAsynccan run twice (once prerendered, once interactive). UsePersistentComponentStateor turn off prerendering:new InteractiveServerRenderMode(prerender: false).
[StreamRendering] to show content while data loads