Declarative rendering pipeline HTML → DOM in 4 cooperating modules.

parser.fromHTML(html)
      ↓
ParseResult { template: ElmNode[], iterates? }
      ↓
render.elms() / .parts() / .loop() / .full()  ← no DOM
      ↓
ElmNode[] (bound vars, rewritten IDs)
      ↓
template.insert() / tpl.elms() / tpl.elm()
      ↓
Live DOM nodes

→ uiSession encapsulates all steps.

Module Role Deps
secPolicy Security primitives (URL/CSS/clobber/on*/tags) — single source of truth none
parser HTML ↔ elm-array secPolicy
render Data transformer (no DOM) secPolicy
sanitize Allowlist-based HTML sanitiser (XSS) secPolicy
template DOM engine, contexts, catalogue secPolicy
themeTokens CSS Custom Properties design tokens dom
uiSession High-level facade uiSessionCore, uiSessionDirect, uiSessionList
component Reusable component (template + state + lifecycle) none
reactiveBind Explicit signal→DOM binding controller (patch via uiSession, no re-render) signal
virtualScroll Virtualised list for 10⁴–10⁶ items dom, events
chart Canvas 2D charts — line, area, bar, sparkline dom, animate, stats, linalg
devtools uiSession introspection + profiler + elm-array dump clock
devtoolsUI Opt-in read-only inspector — session, module-registry and signal-graph views devtools

uiSession-core.js, uiSession-direct.js and uiSession-list.js are implementation details of uiSession and are documented by reference in uiSession.md — no separate pages, by design.

Guide

See guide/rendering-pipeline.md for concepts, notation and complete examples.