Browser Support
Espalier targets the latest two major versions of each evergreen browser. The library ships modern JavaScript and CSS with no transpilation or vendor-prefixed fallbacks.
Minimum Browser Versions
The table below lists the effective floor for each browser, determined by the most demanding platform feature Espalier uses.
| Browser | Minimum Version | Release Date |
|---|---|---|
| Chrome / Edge | 120+ | December 2023 |
| Firefox | 128+ | July 2024 |
| Safari | 18+ | September 2024 |
If your users are on a managed browser policy (common in enterprise and government environments), these are the versions to enforce.
What Sets the Floor
| Platform Feature | Chrome | Firefox | Safari | Used For |
|---|---|---|---|---|
| CSS Nesting | 120+ | 117+ | 17.2+ | Component stylesheets |
| OKLCH Relative Color Syntax | 119+ | 128+ | 18+ | Theme color derivation |
| Container Queries | 105+ | 110+ | 16+ | Responsive component sizing |
| ElementInternals | 77+ | 98+ | 16.4+ | Native form participation |
| Custom Elements / Shadow DOM | All modern | All modern | All modern | Every component |
clamp() |
79+ | 75+ | 13.1+ | Fluid typography |
The highest bar is CSS Nesting (Chrome 120) and Relative Color Syntax (Firefox 128, Safari 18). Both reached Baseline status in late 2024.
Required Polyfills
Espalier does not bundle polyfills. When a standard is not yet universally available, the consuming application is responsible for loading the polyfill. This keeps the library dependency-free and lets you drop the polyfill the moment your browser matrix no longer needs it.
Temporal API
Required for: <esp-date-picker>, <esp-input type="date">
The Temporal API is at TC39 Stage 3. It ships natively in Firefox 139+ and Safari 26+. Until your target browsers all support it, load the polyfill before any Espalier imports:
npm install @js-temporal/polyfill
import { Temporal } from "@js-temporal/polyfill";
globalThis.Temporal = Temporal;
import "@taprootio/taproot-controls";
Or via CDN in your document <head>:
<script src="https://cdn.jsdelivr.net/npm/@js-temporal/polyfill/dist/index.umd.js"></script>
Without the polyfill, <esp-date-picker> renders an inline error message instead of the calendar UI.
Not Supported
| Environment | Reason |
|---|---|
| Internet Explorer | No custom element or Shadow DOM support |
| Legacy Edge (EdgeHTML) | No custom element or Shadow DOM support |
| Chrome < 120 | Missing CSS Nesting |
| Firefox < 128 | Missing Relative Color Syntax |
| Safari < 18 | Missing Relative Color Syntax |
| Server-side rendering | Espalier is a client-side library; SSR requires a DOM shim such as Lit SSR |
Support Policy
Espalier adopts modern platform APIs as they reach specification maturity. There is no transpilation layer, no vendor-prefix fallback, and no backward-compatibility shim built into the library. This is a deliberate architectural choice:
- Zero unnecessary weight. Polyfills for features your users already have are dead code.
- Clean removal. When a standard ships everywhere, delete the polyfill from your app. No library update required.
- Forward compatibility. The code Espalier ships is the code browsers will run natively.
For detailed rationale and per-feature breakdowns, see the Caveats guide.