Browsers & devices

Learn about the browsers and devices, from modern to old, that are supported by Bootstrap, and the modern platform features the framework is built on.

Supported browsers

Bootstrap supports the latest, stable releases of all major browsers and platforms, plus a run of older versions of each engine. The exact policy lives in our .browserslistrc file:

PLAINTEXT
last 2 major versions
not dead

Chrome >= 138
Edge >= 138
Firefox >= 147
iOS >= 26
Safari >= 26

not and_uc > 0
not and_qq > 0
not kaios > 0
not op_mini all

Browserslist joins these lines with OR, not AND. The >= lines do not narrow last 2 major versions. They add every version above each floor, which is what sets our real minimums:

BrowserMinimum version
Chrome138
Edge138
Firefox147
Safari (macOS)26
Safari (iOS and iPadOS)26

Alternative browsers built on these engines (Chromium-based browsers like Brave, Opera, or Vivaldi, and browsers using WebKit on iOS) are not explicitly tested, but should be fully supported at equivalent engine versions.

To measure coverage yourself, run npx browserslist --coverage in a clone of the repository, or paste the query into browsersl.ist.

Why these versions?

Bootstrap’s CSS is written against the modern platform baseline: light-dark() for color modes, oklch() and color-mix() for the color system, native CSS nesting, container queries, and :has(). Together these targets cover about 86% of global browser usage. The share moves as Can I Use updates its data.

Unlike previous major versions, Bootstrap 6 does not ship fallbacks, prefixes, or polyfills for browsers below this floor. Pages will not render correctly in unsupported browsers—most visibly, colors depending on light-dark() will not resolve.

Modern platform features

The table below lists the platform features v6 relies on and how each behaves at—and below—the support floor.

FeatureUsed byBehavior in supported browsers
light-dark()Color modes, all theme tokensSets the hard lower bound for the floor; no fallback below it
oklch(), color-mix()Color system, theme variantsFully supported above the floor
Container queries (@container)Card groups, horizontal list groupsFully supported above the floor; these components also require an ancestor query container (.contains-inline)—without one they stay stacked
:has()Forms, button groups with menus, and other contextual stylingFully supported above the floor
Native <dialog>Dialog, DrawerFully supported above the floor; focus containment and inert behavior come from the browser
<details name="…">Exclusive accordionsFully supported above the floor; in older, unsupported browsers accordion items degrade gracefully to independently openable <details> elements
CSS scroll snapCarouselFully supported above the floor; native touch, wheel, and keyboard scrolling
Logical propertiesSpacing, borders, and RTL support throughoutFully supported above the floor

Also safe to use

The floors clear more of the platform than the components currently use. All of the following need no fallback, no vendor prefix, and no polyfill in any 6.x release, so reach for them first when you build on top of Bootstrap or contribute to it:

  • Native CSS nesting, so compiled output can stay nested
  • @layer, which our layer order depends on
  • :focus-visible for keyboard-only focus styling
  • Container query units and subgrid
  • content-visibility, transition-behavior: allow-discrete, and @starting-style, which together animate <details> and <dialog> open and closed
  • Unprefixed backdrop-filter
  • text-wrap: balance
  • Range syntax in media queries, such as @media (width >= 1024px)

Newly supported across all browser targets

The higher floors make these features available across all supported browsers:

  • Relative color syntax, including currentColor as the source color
  • Same-document view transitions
  • ::details-content for styling the expandable part of <details>
  • content-visibility for skipping off-screen rendering work

Bootstrap already used ::details-content in v6.0.0-alpha.1 as a progressive enhancement for accordion transitions. The higher floors make it available in every supported browser.

We'll look for more ways to incorporate these features into Bootstrap as we continue to develop v6.

Not available yet

These features are not fully supported across our browser targets:

  • Anchor positioning is incomplete in Firefox 147 and Safari 26.
  • Invoker Commands API (command / commandfor) requires Safari 26.2.
  • Customizable <select> (appearance: base-select) is unavailable in Firefox.
  • text-box (text-box-trim) requires Firefox 154.

We plan to adopt more of these features as we raise browser minimums in future major releases. See Looking ahead to v7 for our planned direction.

JavaScript

Bootstrap’s JavaScript ships as native ES modules only. Load it with <script type="module">—a classic <script src> without type="module" will not execute it, and there is no global window.bootstrap object. See the JavaScript getting-started guide for loading patterns, including import maps for the bundle’s dependencies.

All browsers meeting the CSS support floor above fully support ES modules, import/export syntax, and the DOM APIs Bootstrap’s plugins use—no transpilation or polyfills are required or provided.

Mobile devices

Generally speaking, Bootstrap supports the latest versions of each major platform’s default browsers. Note that proxy browsers (such as Opera Mini, Opera Mobile’s Turbo mode, UC Browser Mini, Amazon Silk) are not supported. We also exclude UC Browser, QQ Browser, and KaiOS. Together they hold under 1% of users, and including them only adds vendor prefixes to our CSS: -webkit-mask-* for UC and QQ, and -moz-column-gap for KaiOS. KaiOS additionally broke our floating labels.

PlatformSupported browsers
AndroidChrome (last two major versions)
iOS and iPadOSSafari 26+, Chrome (uses WebKit on iOS)
Windows, macOS, LinuxChrome 138+, Edge 138+, Firefox 147+; Safari 26+ on macOS

As with v5, make sure you include the responsive viewport meta tag in your <head> for proper rendering on mobile devices:

HTML
          <meta name="viewport" content="width=device-width, initial-scale=1">