ADR-008: Lit Web Components Without a Build Step
Status: Accepted
Date: 2026-03-15
Context
The chat UI requires a reactive component model: dynamic message lists, optimistic updates, streaming state indicators, and a floating panel that persists across iframe navigation. Options considered:
- React / Vue / Svelte: Rich ecosystems, but require a build pipeline (Webpack, Vite). TYPO3 extensions ship static assets; introducing a build step adds tooling complexity and diverges from TYPO3 core patterns.
- Vanilla JS with manual DOM updates: No dependencies, but managing reactive state manually at this complexity level is error-prone.
- Lit 3: Lightweight ( 6 kB), standards-based web components with reactive properties and declarative templates. Can be loaded directly from an ES module import map — no build step.
- TYPO3 core components: No suitable chat-oriented components exist in TYPO3 core.
Decision
Use Lit 3 web components, loaded via TYPO3's import map mechanism. JavaScript is written in ES modules and shipped as-is. No transpilation, no bundler.
Consequences
- No build tooling required; assets are edited and deployed directly.
- Lit's web component model integrates cleanly with TYPO3's outer backend
frame: the
<ai-chat-panel>element is appended todocument.bodyand persists across module navigation (see ADR-011: Floating Chat Panel Outside the Module iframe). - Browser support is limited to evergreen browsers — acceptable for a TYPO3 backend tool.
- Unit tests use Jest with
@web/test-runnercompatible setup; the same no-build constraint applies.