Skip to content

Browser Support

Airframe targets modern evergreen browsers. This page is the compatibility reference for @airframeui/core: supported browsers, CSS features that matter, and when to opt into @airframeui/polyfills.

Modern First, Polyfills Optional

Airframe embraces modern web standards and CSS features that provide the best developer experience. We believe in:

  1. Progressive Enhancement: Core functionality works everywhere, enhanced features use modern APIs
  2. No Legacy Baggage: We don’t ship polyfills or workarounds in the core package
  3. Opt-in Support: Teams needing older browser support can use the optional @airframeui/polyfills package
  4. Future-Proof: We adopt new CSS features as they become available in modern browsers

@airframeui/core is designed for and tested against modern evergreen browsers. Core functionality specifically depends on these floors:

BrowserMinimum versionNotes
Chrome111+ (March 2023)color-mix() floor
Edge111+ (March 2023)Chromium-aligned
Safari16.4+ (March 2023):has() + color-mix()
Firefox121+ (December 2023):has() floor
iOS Safari16.4+Same as desktop Safari
Chrome Android111+Chromium-aligned

Within those floors, “last 2 major versions” of each evergreen browser is a good practical support policy for most apps.

Airframe’s core CSS relies on modern platform features that are stable in the browsers above:

  • CSS Custom Properties
  • CSS Grid + Flexbox
  • :has() (grid column detection, field/navbar patterns)
  • :where()
  • @layer cascade layers
  • color-mix() (soft borders, hover/active mixes, intent surfaces)

Bleeding-edge utilities (e.g. field-sizing: content, experimental display: grid-lanes, customizable <select> via appearance: base-select) may need newer browsers or an opt-in polyfill — see below. If you don’t use those features, the floors above still apply.

CSS Feature: appearance: base-select, ::picker(select)

Support: Progressive enhancement only. Supporting browsers get a styled picker anchored below the control; others keep the classic OS picker. No polyfill.

Some features use cutting-edge CSS that may need JavaScript fallbacks for older browsers:

Modern Support: Chrome 123+, Edge 123+

CSS Feature: field-sizing: content

Polyfill Available: Yes - via @airframeui/polyfills

<textarea class="af-textarea af-is-auto-grow">
</textarea>

Installation:

npm install @airframeui/polyfills
import '@airframeui/polyfills';

See Polyfills Package for details.

Masonry Layout (Grid Lanes) (Experimental)

Section titled “Masonry Layout (Grid Lanes) (Experimental)”

Modern Support: Safari Technology Preview 234+ (December 2025), Chrome 140+ (experimental flag), Firefox 147+ (experimental flag)

CSS Feature: display: grid-lanes

Status: ⚠️ Experimental - Very limited browser support

Fallback: Automatically falls back to regular CSS Grid in unsupported browsers (items display in a standard grid, not masonry)

<div class="af-masonry af-gap-lg">
  <div class="af-card">
    Item 1
  </div>
  <div class="af-card">
    Item 2
  </div>
  <div class="af-card">
    Item 3
  </div>
</div>

Browser Support Details:

  • Safari Technology Preview 234+ - Full support (December 2025)
  • ⚠️ Chrome 140+ - Available behind experimental flag (chrome://flags/#enable-experimental-web-platform-features)
  • ⚠️ Firefox 147+ - Available behind experimental flag (layout.css.grid-lanes.enabled)
  • ⚠️ Edge - Available behind experimental flag (same as Chrome)
  • Production browsers - Not yet available

Polyfill Options:

  1. JavaScript Polyfill (recommended for production):

    • Use a JavaScript masonry library (e.g., Masonry.js, Isotope) as a fallback
    • Feature detect with @supports (display: grid-lanes) and load polyfill only when needed
  2. CSS Fallback (automatic):

    • Airframe automatically provides a CSS Grid fallback
    • Items will display in a regular grid layout (not masonry) in unsupported browsers

Example with Feature Detection:

// Check if grid-lanes is supported
if (!CSS.supports('display', 'grid-lanes')) {
// Load JavaScript masonry polyfill
import('masonry-layout').then(({ default: Masonry }) => {
  const grids = document.querySelectorAll('.af-masonry');
  grids.forEach(grid => {
    new Masonry(grid, {
      itemSelector: '> *',
      columnWidth: 250,
      gutter: 16
    });
  });
});
}

Learn More:

Recommendation: For production use, wait for broader browser support or use a JavaScript polyfill with feature detection.

For teams that need to support older browsers, we provide an optional @airframeui/polyfills package.

npm install @airframeui/polyfills
// Import all polyfills
import '@airframeui/polyfills';

// Or import specific polyfills
import '@airframeui/polyfills/auto-grow-textarea';

Polyfills automatically detect browser support:

  1. Modern browsers: Use native CSS features (no JavaScript overhead)
  2. Older browsers: Automatically apply JavaScript fallbacks

You don’t need to write browser detection code - the polyfills handle it automatically.

// In main.tsx or App.tsx
import '@airframeui/core/core.css';
import '@airframeui/polyfills';
// In app/layout.tsx
import '@airframeui/core/core.css';
import '@airframeui/polyfills';
// In main.ts
import '@airframeui/core/core.css';
import '@airframeui/polyfills';
// In main.ts
import '@airframeui/core/core.css';
import '@airframeui/polyfills';
// In your entry file
import '@airframeui/core/core.css';
import '@airframeui/polyfills';
FeatureModern BrowsersPolyfill AvailableNotes
CSS Variables✅ All modern❌ Not neededUniversal support
CSS Grid✅ All modern❌ Not neededUniversal support
Flexbox✅ All modern❌ Not neededUniversal support
:has() selector✅ Chrome 105+, Safari 15.4+, Firefox 121+❌ Not availableCore feature, no fallback
:where() selector✅ All modern❌ Not neededUniversal support
field-sizing: content✅ Chrome 123+, Edge 123+✅ YesAuto-grow textarea
display: grid-lanes (Masonry)⚠️ Safari TP 234+ (Dec 2025)⚠️ JavaScript polyfill availableExperimental - Falls back to regular grid
  1. Smaller Bundle Size: Core package doesn’t include polyfills
  2. Better Performance: Modern browsers use native implementations
  3. Future-Proof: Easy to adopt new CSS features
  4. Flexibility: Teams choose their browser support level
  5. Clean Codebase: No legacy workarounds cluttering the code
  • Teams supporting very old browsers need to install polyfills
  • Some cutting-edge features may not work in older browsers without polyfills

Start with modern browser support only. Add polyfills only if analytics show significant older browser usage.

  1. Check your analytics for actual browser usage
  2. Test with @airframeui/polyfills if needed
  3. Consider setting a browser support policy (e.g., “last 2 versions”)

If you must support older browsers (e.g., IE11, older Safari), consider:

  1. Using @airframeui/polyfills for features that need it
  2. Testing thoroughly in target browsers
  3. Documenting any limitations

If you encounter browser compatibility issues:

  1. Check this page for known limitations
  2. Review the Polyfills Package section
  3. Check browser support for specific CSS features on Can I Use
  4. Open an issue on GitHub if you find a bug

As new CSS features become available, we’ll:

  1. Adopt them in the core package when widely supported
  2. Provide polyfills when possible
  3. Document browser support requirements
  4. Update this page with new information

Remember: Airframe prioritises the modern web. If you need to support very old browsers, the polyfills package is available, but we recommend targeting modern browsers for the best experience.