Site / Creating a site
Nested rendering without an Outlet
Site.view(site, route, model, h) draws the route: the deepest node's view,
wrapped by every ancestor's layout root-first. Ancestors contribute layouts
only — never their views:
ts
const Section = Site.route(sectionRouter, AppRoute.Section, {
layout: {
render: (child, model, h) => h.div([], [sidebar(model, h), child]),
},
view: {
render: (model, h) => h.ul([], [...]),
},
})A layout receives its composed child explicitly: no Outlet, no context provider, no hidden route state, no child router. Unknown tags and viewless leaves fail loudly instead of guessing. What is deliberately deferred: per-node child models, route-local subscriptions/effects, and layout-spanning Surfaces — flat routes plus section tags scaled further than assumed, so the tree grows those when a real nested layout demands them, not before.