# UI: Templating & Components Three modules that together form a complete UI framework: **js-template** for reactive rendering, **js-template-component** for reusable components, and **custom-elements** for DOM lifecycle observation. ## Why Use This Over React/Vue/Angular? - **No build step** -- works with plain HTML files, no webpack/vite/CLI needed - **No virtual DOM** -- direct DOM manipulation, simpler mental model - **No compilation** -- templates live in your HTML, not in `.jsx` or `.vue` files - **Tiny footprint** -- three small modules vs megabytes of framework code - **FPS-controlled rendering** -- built-in frame rate limiting prevents unnecessary repaints - **Progressive** -- add templating to existing pages without rewriting everything ## Quick Start: Build a Counter in 30 Lines ```html

Count: {{ count }}

That's a big number!

``` ## Module Overview | Module | Purpose | Key Feature | |--------|---------|-------------| | [js-template](js-template.md) | Template rendering engine | `{{ }}` expressions, directives, bindings | | [js-template-component](js-template-component.md) | Reusable component system | Lifecycle hooks, state management, CSS scoping | | [custom-elements](../modules/custom-elements.md) | DOM observation | MutationObserver-based custom HTML elements | ## How They Work Together ``` custom-elements (observes DOM) | v js-template-component (defines components) | v js-template (renders templates) | v DOM (your HTML) ``` 1. **custom-elements** watches the DOM for new elements matching registered tag names 2. **js-template-component** defines the component's template, context, lifecycle, and styles 3. **js-template** parses `{{ }}` expressions and binds data to the DOM You can use each module independently or combine them for a full component architecture.