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.jsanduiSession-list.jsare implementation details ofuiSessionand are documented by reference in uiSession.md — no separate pages, by design.
Guide
See guide/rendering-pipeline.md for concepts, notation and complete examples.