# Browser support

> Which browsers Apogee targets, the modern platform features it relies on, and how each degrades where support isn't there yet.

URL: https://apogee.avaui.dev/docs/browser-support
Last updated: 2026-10-14

Which browsers Apogee targets, the modern platform features it relies on, and how each degrades where support isn't there yet.

Last updated October 14, 2026

## Policy

-   **Evergreen browsers**, current and previous major: Chrome/Edge, Firefox, Safari (desktop + iOS). No IE, no legacy Edge.
-   **Progressive enhancement is the floor.** Every component renders and is usable with zero JavaScript; JS only adds affordances, gated by `no-js:` (see [Progressive enhancement](https://apogee.avaui.dev/progressive-enhancement)). An old or JS-disabled browser gets working content, never a dead control.
-   **Newer CSS degrades, never breaks.** Where a component uses a not-yet-everywhere feature, it falls back to a plain — un-animated or centered — state, listed below.

## Modern features used

| Feature | Support | Components | Fallback |
| --- | --- | --- | --- |
| `<dialog>` + `showModal()` | Baseline (widely available) | Dialog, CommandPalette | — |
| Popover API (`[popover]`, `popovertarget`, `popover="manual"`) | Baseline 2025 | Popover, Tooltip, Dropdown, ContextMenu, Menubar, Select (custom), Combobox | — |
| Invoker commands (`command`, `commandfor`) | Newer; Baseline ~2026 | Dialog | small `showModal()` script |
| `closedby="any"` | Chromium-first | Dialog, CommandPalette | JS backdrop-close (shipped) |
| CSS anchor positioning (`position-area`, `position-try-fallbacks`) | Baseline January 2026 (Chrome 125, Safari 26, Firefox 147) | Popover, Tooltip, Dropdown, Menubar, Select (custom), Combobox | panel centers on screen |
| `anchor-size()` (`width="trigger"`) | Newer; reached Firefox after the rest | Popover, Dropdown, Select (custom), Combobox | panel is content-sized |
| `@starting-style` + `transition-behavior: allow-discrete` / `overlay` | Chrome, Safari 17.4+, Firefox 129+ | Dialog and every anchored panel | appears with no fade |
| `::details-content` + `interpolate-size: allow-keywords` | Chromium-first | Accordion, Collapsible | opens/closes instantly, no height animation |
| `<meter>` pseudo-elements (`::-webkit-meter-*`, `::-moz-meter-bar`) | WebKit/Blink + Firefox | Meter | native meter styling |
| Scroll-snap | Baseline | Carousel | plain horizontal scroll |
| Container queries (`container-type`, `cqw`) | Baseline 2023 | Marquee | — |
| `:has()` | Baseline 2023 | DataGrid, several | row tint absent |
| `color-mix()` | Baseline 2023 | Alert, Toast (tinted borders) | — |
| `oklch()` colours | Baseline 2023 (Safari 15.4+) | tokens (via Tailwind) | — |
| `inert` | Baseline 2023 | Marquee (duplicate panel) | — |
| Logical properties (`*-inline-*`, `ms`/`me`…) | Baseline | all components (RTL) | — |
| Clipboard API (`navigator.clipboard`) | Secure context | Code (copy) | button no-ops if blocked (caught) |
| `appearance: none` custom controls | Baseline | Checkbox, Radio, Select, Slider, Meter | — |
| Vertical range input (`writing-mode` on form controls) | Chrome 124, Firefox 120, Safari 17.4 | Slider `orientation="vertical"` | shows horizontal |
| `:has()` scroll lock (`body:has(dialog:modal)`) | Chrome 105, Firefox 121, Safari 15.4 | Dialog, CommandPalette, `lockScroll()` | page behind can scroll |
| `field-sizing: content` | Chromium only | Textarea `resize="auto"` | a four-line island grows it on input |
| Scroll-driven animations (`animation-timeline: scroll()`) | not used: behind a flag in Firefox | Tabs, Table, ScrollArea edge fades run on a small island instead | — |

“Baseline” here follows the [web-platform Baseline status](https://web.dev/baseline) — “widely available” means it’s safe to use without a fallback; a dated Baseline (e.g. “Baseline 2024”) means it shipped in all evergreen engines by that year.

## Chromium-first, called out

Two features render best in Chromium today and degrade — never break — elsewhere:

-   **Dialog** — invoker commands + `closedby="any"`; a tiny JS fallback (already shipped in the component) covers older engines.
-   **Accordion / Collapsible** — `interpolate-size` height animation; the panel snaps open/closed instantly without it.

Everything else in the table above is Baseline or has a transparent fallback with no visible loss of function.

## Verifying

There’s no automated cross-browser suite yet (Playwright is planned). For now, test the `/` playground and `/rtl` page in the target browsers — the zero-JS floor means the critical check is “does it work with JavaScript off?”, and it does.

## Not now

-   No automated visual regression or cross-browser CI.
-   No support target below evergreen — no IE, no legacy Edge, no other polyfill target.
