ADR-0020 · Browser API Adoption Plan

Status: Living document

A running ledger of newer browser APIs to adopt selectively when the framework's architecture lets it deliver them transparently.

Tried and reverted

  • Container queries — auto-setting container-type: inline-size on every widget host shipped in 1.3.4 and again in 1.11.0, and was reverted in 1.12.3. It implies size containment, so hosts stopped deriving width from their children and collapsed to zero width in flex and grid layouts. Container queries still work — opt in per widget with :host { container-type: inline-size; } in your companion CSS.

On the table

  • :has() + custom states (CustomStateSet) — already documented.
  • AbortSignal.timeout() — replaces manual setTimeout cleanup in getData().
  • CloseWatcher — unifies dialog/popover dismissal across keyboard, back gesture, and OS-level events.
  • CSS anchor positioning — to evaluate once Safari ships it.

Why a plan, not a release

Browser APIs ship asynchronously across vendors. A flat "adopt everything" policy leads to feature cliffs in non-Chromium browsers. A running document lets each API be evaluated when broad support arrives, with emroute taking advantage of whichever ones land in a way that benefits all consumers, not just Chromium users.

All decisions · On GitHub