Server-rendered interfaces that still feel alive.
Heimdall lets ASP.NET Core return HTML for pages, interactions, out-of-band updates, and live streams without turning every workflow into a client-side app.
A smaller loop for serious web apps.
Keep rendering close to the business logic, return the markup the browser needs, and let small attributes describe how the DOM should change.
Pages are HTML
Map routes to server-rendered HTML without forcing Razor, JSON APIs, or a JavaScript application shell.
Actions return fragments
Handle clicks, forms, filters, validation, and list updates by returning the exact HTML to swap.
Live updates stay native
Use Bifrost SSE when the server needs to push fresh HTML after the original request is gone.
One mental model, many surfaces.
Heimdall does not care whether the HTML came from fluent rendering, MVC partials, Bootstrap helpers, static generation, or your own template layer.
Render
Return a page, partial, row, panel, toast, or modal from ASP.NET Core.
Invoke
Use attributes or fluent helpers to call content actions with payloads.
Swap
Replace, append, prepend, or skip the target while out-of-band updates run.
Stream
Subscribe to scoped SSE topics when the server needs to speak first.
Bring the stack you already trust.
Use Heimdall in a purpose-built HTML-first app, inside MVC, or beside conventional controller routes. Start with one interaction and expand only where the server should own the workflow.
- MVC and Razor partial rendering through the real view engine
- Strongly typed Bootstrap helpers when you want server-side composition
- CSRF, authorization metadata, request timeouts, and dependency injection
[ContentInvocationPrefix("orders")]
public sealed class Orders(
IOrderRepository orders)
{
[ContentInvocation("filter")]
public IHtmlContent Filter(OrderFilter filter)
{
var rows = orders.Search(filter);
return OrderTable.Render(rows);
}
}Pick the door that matches your app.
The docs are still here. They just do not have to be the first thing people fall into.
Start from zero
Install a template and build your first page and interaction.
ExploreUse MVC partials
Start from the MVC template or render Razor partials from Heimdall actions without abandoning controllers.
ExploreGenerate static sites
Render selected routes to static HTML with assets, sitemap, robots.txt, and a manifest.
ExploreModel interactions
Understand content actions, payloads, DI, auth, and request timeouts.
ExplorePush live HTML
Use Bifrost topics for scoped server-sent updates.
ExploreKeep the browser light. Let the server speak HTML.
Build the first route, wire one action, and feel how much client code you did not have to invent.
Open the getting started guide