Most Bootstrap pages get built the same way. You copy markup from the docs, add the listed class names, and a navbar, modal, card or toast shows up styled and responsive, with no hand-written CSS for the basics.

Sass variables and CSS variables handle the customizing afterward, and the same stylesheet adapts everything across six breakpoints.

The latest stable release is Bootstrap 5.3.8.

Bootstrap 6.0.0-alpha.1, published on October 8, 2026, renames Modal to Dialog, Offcanvas to Drawer and Dropdown to Menu (Bootstrap release notes, 2026).

What Are Bootstrap Components?

Every entry in the Bootstrap docs follows one pattern. There’s some HTML, a set of documented class names and, for certain components, a JavaScript plugin.

A navbar, a modal, a card and a toast all work that way. Copy the markup, add the classes, get a styled and responsive element.

A design system would normally only describe the standard user interface components in a spec. Bootstrap skips the description and hands over the finished markup.

Markup comes first, with nested elements in a fixed order such as .modal, .modal-dialog, .modal-content and .modal-body. Styling sits on top of it through classes that read local CSS variables, a change applied to all components in Bootstrap 5.2.0 (Bootstrap migration guide). Behavior is the optional part, a JavaScript plugin switched on with data attributes.

Every component is plain HTML underneath, so the class names carry the work.

Each one starts with a base class and takes modifiers. .navbar needs .navbar-expand-lg to collapse below the lg breakpoint, .modal-dialog takes .modal-dialog-centered, and .offcanvas needs a placement class such as .offcanvas-start.

Components sit on Reboot, the layer that corrects browser inconsistencies (Bootstrap docs), and lean on flexbox and spacing utilities for alignment.

The grid and the utility classes are separate layers. They arrange and adjust components but aren’t components themselves.

What is shaping UX design today?

Uncover the newest UX design statistics: user behavior, design trends, ROI data, and insights driving better digital experiences.

Check Them Out →

Which Components Does Bootstrap 5 Include?

The 5.3 docs sort components by job: navigation, content containers, forms and actions, feedback and status, and overlays.

Bootstrap 6.0.0-alpha.1 shipped on October 8, 2026. Bootstrap 5.3.8 is still the latest stable release, and v5.4.0 is announced but not out (Bootstrap blog, October 2026), so the names below follow 5.3.

Navigation components

Navigation patterns share the .nav family of classes. A Bootstrap navbar needs a wrapping .navbar plus a .navbar-expand-* class to collapse at a chosen breakpoint (Bootstrap docs, 5.3).

  • The navbar is a responsive header, and since v5 it needs an inner container.
  • Navs and tabs are link groups, and the Tab plugin switches the content panes.
  • Breadcrumbs show a location trail with the divider set through --bs-breadcrumb-divider.
  • Pagination puts the current-page marker on the link element since the 5.3.6 docs.
  • Scrollspy highlights the nav link of whichever section is visible. It was rewritten on the Intersection Observer API in 5.2.0.

Content containers

Cards, list groups, accordions, carousels and collapse regions hold content, and only the last three need JavaScript.

  • Cards are flexible containers with header, body, footer and image options. v5 dropped .card-deck for the grid and .card-columns for Masonry.
  • List groups have had contextual variants styled through CSS variables since 5.3.0.
  • The accordion runs on Collapse, and leaving out data-bs-parent keeps several items open. .collapse-horizontal arrived in 5.1.0.
  • Carousels give you slides, controls and indicators. .carousel-dark is deprecated in 5.3.0 in favor of data-bs-theme="dark".

Forms and actions

Buttons start from .btn plus a color modifier such as .btn-primary. Button groups, input groups and form controls follow the same base-plus-modifier pattern.

Version 5 renamed several things. .btn-block became a .d-grid wrapper with gap utilities, .input-group-append and .input-group-prepend were dropped, and form labels now require .form-label (Bootstrap migration guide).

Checkbox and radio toggles use .btn-check and need no JavaScript, per the same guide.

Feedback and status

Placeholders joined the set in Bootstrap 5.1.0. They draw temporary blocks in place of real content, the same idea as skeleton screens.

  • Alerts cover contextual messages and can be dismissed through the Alert plugin.
  • Badges handle counts and labels. v5 dropped the .badge-* color classes, and 5.3.3 moved badges to .text-bg-*.
  • Progress bars have carried role="progressbar" on the outer .progress element since 5.3.0.
  • Spinners slow down under prefers-reduced-motion.

Overlays

Modal, offcanvas, dropdown, popover and tooltip float above page content, and the toast does the same for notifications. All six depend on JavaScript.

The Bootstrap 6 alpha renames three of them. Modal becomes Dialog, Offcanvas becomes Drawer and Dropdown becomes Menu (alpha release notes).

How to Add Bootstrap Components to a Project

Load the compiled CSS in the head and the bundle JavaScript file before the closing body tag, from the jsDelivr CDN or through npm. The bundle already contains Popper, which dropdowns, popovers and tooltips need for positioning (Bootstrap docs, 5.3).

  1. Start from an HTML5 page with the <!doctype html> declaration and the viewport meta tag. Without the doctype, the docs warn of incomplete styling.
  2. Add the jsDelivr stylesheet link to the head, pointing at bootstrap@5.3.8/dist/css/bootstrap.min.css.
  3. Add bootstrap.bundle.min.js from the same CDN path before the closing body tag.
  4. Copy the integrity and crossorigin="anonymous" attributes from the docs snippet for the exact version you load.
  5. Test with a btn btn-primary button for the CSS and a button carrying data-bs-toggle="modal" and a data-bs-target that points at a modal id. If the button is styled and the modal opens, both files loaded.

Which version number to copy

When checked on October 10, 2026, three pages of the same 5.3 docs pinned three different versions in their snippets. The download page used 5.3.3, the introduction page 5.3.7 and the JavaScript page 5.3.8.

GitHub lists 5.3.8 as the latest release. Pin that version and regenerate the integrity hash, because hashes are unique to each file and version.

Bundle file or separate Popper

The bundle file is one script tag with Popper included, and it’s heavier by the size of Popper.

The standalone file means loading Popper 2.11.8 first and bootstrap.min.js after it. A page with no dropdowns, popovers or tooltips can skip Popper entirely. Get the order wrong and tooltips fail, since Popper has to load before Bootstrap’s script.

Two pages of the docs pull in different directions here. Dropdowns inside a navbar don’t use Popper for positioning, yet the JavaScript page lists dropdowns as depending on it. The bundle is the safer default.

npm with Vite or Webpack

Install with npm i --save bootstrap @popperjs/core, plus sass as a dev dependency to compile Bootstrap’s source Sass (Bootstrap Vite guide).

In the entry file, import * as bootstrap from 'bootstrap' loads every plugin. import { Tooltip, Toast, Popover } from 'bootstrap' loads only those three and keeps the bundle smaller.

The docs also carry Webpack and Parcel guides. Backend frameworks add their own steps, and a walkthrough on adding Bootstrap to Laravel covers one common case.

Bootstrap 6 alpha installs differently

Bootstrap 6.0.0-alpha.1 is on npm and jsDelivr as bootstrap@6.0.0-alpha.1. Its JavaScript is ESM-only, so the script tag needs type="module" (Bootstrap blog, October 8, 2026).

The browser floor rises too. It’s Chrome and Edge 130, Firefox 132 and Safari 18, against Chrome and Firefox 60 and Safari 12 for Bootstrap 5.

I’d stay on 5.3.8 for production sites. The project states that an alpha can still change meaningfully before beta.

How Do Bootstrap’s JavaScript Components Work?

Plugins start from data attributes in the markup, which the docs call the preferred route, or from a constructor call such as new bootstrap.Modal('#myModal').

The plugins are written in plain JavaScript, and jQuery stopped being a dependency in Bootstrap 5.0.0. If jQuery is on the page, Bootstrap still registers its plugins with it.

Which components need JavaScript

The Introduction page of the 5.3 docs lists 13 entries that require Bootstrap’s JavaScript.

Collapse, accordion and navbar sit together, since the navbar’s responsive behavior builds on Collapse and Offcanvas. Modal, offcanvas, dropdown, popover, tooltip and toast are the overlays. Alert dismissal, button toggling, carousel, tabs and scrollspy make up the rest.

Cards, list groups, badges, breadcrumbs, pagination, progress bars, spinners and placeholders are absent from that list, so they run on CSS alone.

The docs disagree with themselves on one entry. The list includes Buttons for toggling states and checkbox/radio functionality, while the 5.0.0 migration notes say checkbox and radio toggle buttons need no JavaScript. For those toggles, follow the migration guide and use .btn-check.

Data attributes or the programmatic API

Both routes reach the same plugin. Data attributes need no script, while the API gives control over timing and options. For simple pages I’d go with data attributes every time.

Data attributes

  • data-bs-toggle names the plugin and data-bs-target names the element.
  • Options append to data-bs- in kebab-case, as in data-bs-custom-class.
  • A single button can’t open a tooltip and a modal, because each trigger takes one plugin.
  • Since 5.2.0, every component accepts an experimental data-bs-config attribute holding a JSON string, and separate data attributes override it.

Programmatic API

  • Constructors take an element or a CSS selector, plus an optional options object.
  • getInstance returns null when nothing was initialized, and getOrCreateInstance creates one on demand.
  • show, hide and toggle return before the transition ends.
  • A call made while a component is mid-transition is ignored.

That last rule catches carousels most often. A second carousel.to() call during a slide does nothing (Bootstrap docs, 5.3).

Events come in pairs, such as show.bs.modal at the start and shown.bs.modal at the end. Calling preventDefault() on the first cancels the action.

With jQuery on the page, Bootstrap emits events through jQuery, so listeners need .on() instead of addEventListener.

Why tooltips and popovers stay silent

Nothing appears until a script creates them. Tooltips and popovers are opt-in for performance reasons.

Select every trigger with document.querySelectorAll('[data-bs-toggle="tooltip"]') and pass each element to new bootstrap.Tooltip(el). Popovers work the same way.

If they still fail after that, a few other causes are worth checking.

  • A zero-length title never displays.
  • Hidden elements can’t trigger them.
  • Disabled elements need a wrapper, ideally a span with tabindex="0".
  • A tooltip has to be hidden before its element leaves the DOM.

A dedicated Bootstrap tooltip tutorial walks through placement and trigger options.

In the Bootstrap 6 alpha, plugins are ESM-only, with no UMD bundle and no window.bootstrap global. Pages that use only data attributes add type="module" to the script tag and keep working (Bootstrap blog, October 2026).

Modal, Offcanvas, Popover, Tooltip or Toast: Which Overlay Fits?

See the Pen
30+ Bootstrap Modal Animation Effects
by Wisnu ST (@wisnust10)
on CodePen.

A modal suits a decision the user has to make before continuing. An offcanvas fits a side panel such as navigation or a cart, and a popover carries short contextual detail. Tooltips are for one-line hints, and a toast covers any notice that needs no reply.

ComponentBest forBlocks the pageManual init needed
ModalConfirmations, short forms, lightboxesYes, with backdropNo, data attributes work
OffcanvasSidebars, mobile menus, cartsYes by defaultNo, data attributes work
PopoverShort contextual detail on clickNoYes
TooltipOne-line hints on focusable elementsNoYes
ToastNon-blocking noticesNoYes

Dropdowns sit outside the table because they carry menu items rather than content. They toggle on click, never on hover, by design (Bootstrap docs, 5.3).

Decision rules by task

  • For a blocking choice, use a modal. It comes in four widths, 300, 500, 800 and 1140 px.
  • A side panel is an offcanvas, placed with .offcanvas-start, -end, -top or -bottom. Responsive classes such as .offcanvas-lg arrived in 5.2.0.
  • A passing notice is a toast, which hides itself after 5000 ms by default.
  • Errors the user must act on belong in an alert, not a toast. The docs say so for form error lists.

Setup details for the modal itself live in a dedicated Bootstrap modal guide.

Where each overlay breaks

  • Modals show one at a time, nested modals are unsupported, and the autofocus attribute has no effect. Focus an input inside the shown.bs.modal event instead.
  • Offcanvas also shows one at a time, and margin or translate can’t be applied to the .offcanvas element.
  • Popovers don’t manage keyboard focus order, so links or forms inside them can end up unreachable. The docs point to a modal for those cases.
  • Tooltips belong only on focusable, interactive elements, and a hover-only trigger locks out keyboard users.
  • Toasts never receive focus, so an autohiding toast with buttons fails keyboard users. Use autohide: false with a close button.

A toast notification suits confirmations like “Saved”, where the user doesn’t need to respond.

The Bootstrap 6 alpha rebuilds the modal as Dialog and the offcanvas as Drawer on the native <dialog> element. Recheck the one-at-a-time and focus caveats above once v6 stabilizes.

How to Customize Bootstrap Components with Sass and CSS Variables

Sass variable overrides, --bs-* CSS variables and the utility API each change components in a different way. Use Sass when you control the build and CSS variables when you load the precompiled file from a CDN, because Sass changes never reach a file that is already compiled.

Sass variable overrides

Every Sass variable carries a !default flag, so a value assigned first wins. The order of the imports decides whether an override lands (Bootstrap docs, 5.3).

  1. Import functions.
  2. Declare your variable overrides.
  3. Import variables and variables-dark.
  4. Declare map overrides, such as changes to $theme-colors.
  5. Import maps, mixins and root, then the components you need.

Removing the primary, success or danger keys from $theme-colors can break compilation, because links, buttons and form states read them.

Dart Sass also prints deprecation warnings when it compiles the source. The docs say they don’t block compilation and can be ignored for now.

The Bootstrap 6 alpha no longer supports @import for customization. Customization moves to @use with token maps, and nearly every v5 Sass variable becomes a CSS variable (Bootstrap blog, October 2026).

CSS variables at runtime

Components keep their variables on the base class, so a scoped override changes one component and leaves the rest alone.

The docs theme a tooltip by adding data-bs-custom-class="custom-tooltip" and then overriding --bs-tooltip-bg and --bs-tooltip-color inside that class.

  • Every custom property carries the bs- prefix, which the $prefix Sass variable changes.
  • Root variables live on :root, while component variables live on the base class, such as .navbar.
  • CSS variables don’t work inside media queries, so the breakpoint variables serve JavaScript and plain CSS, not @media rules.

Color modes

Color modes arrived in Bootstrap 5.3.0 and run on the data-bs-theme attribute. It can go on the html element for the whole page, on a wrapper, or on a single component.

Light is the default and dark is built in. Any custom name works too, such as data-bs-theme="blue", once you override the variables for it.

Bootstrap ships no color mode picker. The docs provide a script that follows the system setting and lets visitors override it, and they suggest placing it at the top of the page to reduce flicker.

Setting $color-mode-type: media-query makes dark mode automatic, but it removes per-component theming.

Adding a custom theme color is manual. A new $theme-colors entry also needs entries in three light maps and three dark maps, because alerts and list groups read them, and Sass can’t generate those maps on its own.

Utility API

Utility classes come from the $utilities Sass map. Each group takes options such as property, values, responsive and state.

Merge into the map to add a utility, and use map-remove or a null value to drop one. Every generated utility carries !important unless $enable-important-utilities is set to false.

That flag is why a component rule loses to a utility class. A separate guide on how to override Bootstrap CSS goes deeper on specificity.

How Do Bootstrap Components Respond to Screen Size?

Components respond through six breakpoints built on min-width media queries, with xs as the base and rules layered on for wider screens. The approach is mobile-first design, so Bootstrap applies the bare minimum at the smallest width and adds styles upward (Bootstrap docs, 5.3).

The default breakpoints, as min-width values, are below.

  • sm at 576px
  • md at 768px
  • lg at 992px
  • xl at 1200px
  • xxl at 1400px, added in Bootstrap 5

Widths below 576px are xs and carry no class infix. Each breakpoint was chosen to hold containers whose widths are multiples of 12, and the $grid-breakpoints Sass map changes them.

Components that change at a breakpoint

  • Plain .navbar-expand never collapses the navbar, and omitting every expand class makes it always collapse.
  • .modal-fullscreen-md-down and its siblings take a modal full screen below the named breakpoint, from sm-down to xxl-down.
  • Responsive dropdown alignment such as .dropdown-menu-lg-end needs data-bs-display="static", which turns off Popper’s dynamic positioning.

Skipping the static display attribute is the usual reason a responsive dropdown ignores its alignment class.

How the breakpoint mixins compute ranges

media-breakpoint-up(md) compiles to min-width: 768px. The down variant subtracts .02px, so media-breakpoint-down(md) becomes max-width: 767.98px, a workaround for fractional viewport widths on high-dpi devices.

Version 5 also changed what the down mixin means. media-breakpoint-down(lg) now targets viewports smaller than lg, where v4 needed md (Bootstrap migration guide). Carried-over v4 Sass therefore targets a narrower range than intended.

The media queries behind each mixin stay plain CSS, so custom rules can mirror them by hand.

In the Bootstrap 6 alpha, the infix becomes a prefix, so .d-md-none turns into .md:d-none (Bootstrap blog, October 2026).

How Accessible Are Bootstrap Components?

Interactive Bootstrap components ship with ARIA roles, keyboard handling and reduced-motion support, but the docs state that the accessibility of a finished site depends largely on the author’s markup, styling and scripting.

What Bootstrap handles

  • On modals and offcanvas panels, JavaScript adds role="dialog", and the author supplies aria-labelledby.
  • In dropdowns, arrow keys move through .dropdown-item elements and Esc closes the menu.
  • Tabs respond to the Home and End keys since 5.3.1.
  • Under prefers-reduced-motion, most CSS transitions switch off, including modal open and close and carousel sliding.

Dropdowns get no menu roles automatically. They can hold search fields and login forms, and true ARIA menus can only contain menu items, so Bootstrap leaves those roles to the author (Bootstrap docs, 5.3).

What stays the author’s job

Components are deliberately generic. Where a component’s purpose is more specific than its markup, the author adds ARIA roles and JavaScript behavior, and the docs usually note where.

  • Icon-only buttons need an aria-label, as the docs do on .btn-close.
  • Meaning carried by color needs .visually-hidden text, such as a “Danger:” prefix.
  • Skip links use .visually-hidden-focusable, a standalone class that must not be combined with .visually-hidden.

Color contrast in the default palette

Some default palette combinations fall below the WCAG 2.2 minimum of 4.5:1 for text and 3:1 for non-text elements, especially on light backgrounds, according to the Bootstrap accessibility docs.

Test your own button, alert and validation colors, and extend the defaults where a pair fails. The color contrast of each theme color matters most for text-bearing components.

The Sass color-contrast() function returns white, #212529 or black for a given base color. The 5.3.8 release notes list a fix to it.

What Changed in Components from Bootstrap 4 to Bootstrap 5?

Bootstrap 4 reached end of life on January 1, 2023, and Bootstrap 5 has been the default version since May 5, 2021 (Bootstrap docs). Component work in a migration mostly means dealing with attributes and plugin options, removed components, renamed classes and browser support.

Attributes and plugin options that break silently

  • data-toggle became data-bs-toggle, and plugins now look for the namespaced form.
  • For tooltips and popovers, whiteList became allowList, and .arrow became .tooltip-arrow and .popover-arrow.
  • The dropdown flip option was dropped. An empty fallbackPlacements array in popperConfig turns flipping off.
  • Dropdown events now fire on the toggle button and bubble to the parent.
  • The Popper dependency moved from version 1 to version 2.

Removed and consolidated components

Two removals have utility-based replacements, and the custom form classes were folded into the native ones, according to the migration guide.

  • The jumbotron was dropped, since utilities can replicate it.
  • .media was dropped in favor of flex utilities.
  • Custom form classes were folded in, so .custom-select became .form-select, .custom-range became .form-range, and the custom switch became .form-check.form-switch.

Two components arrived in the same release. Offcanvas debuted in 5.0.0, and the new accordion replaced the card-based version.

Renamed classes

  • .close to .btn-close
  • .no-gutters to .g-0
  • .ml-* and .mr-* to .ms-* and .me-*
  • .sr-only to .visually-hidden
  • .font-weight-* to .fw-*
  • .badge-pill to .rounded-pill

Browser support and end of life

Bootstrap 5 dropped Internet Explorer 10 and 11 and Legacy Edge before version 16. A site that still serves those browsers needs its own plan for cross-browser compatibility.

The project’s end-of-life page puts Bootstrap 3 at July 24, 2019 and Bootstrap 4 at January 1, 2023. The final releases were v3.4.1 and v4.6.2, and the page points sites with compliance needs to HeroDevs’ paid Never-Ending Support.

One third-party tracker, endoflife.ai, lists December 31, 2022 for Bootstrap 4. The 4.6.2 release post and the project docs both say January 1, 2023, so that is the date to use.

When Are Bootstrap Components the Wrong Choice?

They’re the wrong fit when the design has to look nothing like Bootstrap, or when a JavaScript framework owns the DOM. Pages that ship far more CSS and JavaScript than they use are a third case.

Weight you do not use

With Sass, import only the components you need. The largest savings come from the Layout and Components section of bootstrap.scss, and dropping the carousel import shrinks the compiled CSS. Dependencies across imports can make some omissions harder.

bootstrap.js includes every plugin, and the bundle adds Popper. With a bundler, import plugin by plugin, as in import 'bootstrap/js/dist/modal'.

Bootstrap’s optimization guide has no prebuilt PurgeCSS example, and the section is marked as help wanted.

For a page that needs two or three components, lean imports beat the full CDN file.

JavaScript frameworks

Bootstrap’s CSS works in any framework. Its JavaScript doesn’t.

The docs say the plugins are not fully compatible with React, Vue and Angular, which assume full knowledge of the DOM. Both sides can mutate the same element, producing bugs such as dropdowns stuck open.

React has React Bootstrap. Vue 3 has BootstrapVueNext, listed as alpha in the 5.3 docs. Angular users pick between ng-bootstrap and ngx-bootstrap.

React-Bootstrap recorded 6,724,992 npm downloads between September 9 and October 8, 2026, per the npm registry.

Bootstrap or Tailwind CSS

Tailwind CSS is the main utility-first alternative, and a longer comparison of Tailwind vs Bootstrap covers more ground than fits here.

The npm registry counted 506,809,481 tailwindcss downloads from August 30 to September 28, 2026, and 28,843,890 bootstrap downloads from September 9 to October 8, 2026. The windows differ and npm counts include automated installs, so read the figures as scale, not market share.

On the Bootstrap side, you get ready-made components with working JavaScript behavior, and the interactive parts come with documented keyboard and ARIA behavior. The cost is a recognizable default look that takes override work to escape, plus unused CSS and JavaScript unless imports are trimmed.

Tailwind compiles only the CSS for classes it finds in your source files, and adding or removing a utility class affects only that element. The downside is long class lists, with repeated patterns managed through framework components or template partials.

Pick Bootstrap when the project needs working modals, dropdowns and carousels quickly and a standard look is acceptable. Pick Tailwind when the design is custom and a component layer already exists in React or Vue.

Bootstrap Components FAQ

Is Bootstrap free to use in commercial projects?

Yes. Bootstrap’s code is released under the MIT license, and its documentation under CC BY 3.0, according to the Bootstrap blog.

MIT permits commercial use, provided the license notice stays with the copied source.

How do I open a modal from JavaScript?

Create an instance with new bootstrap.Modal('#myModal') and call its show method. The hide and toggle methods work the same way.

Each method returns before the transition ends, so listen for the shown.bs.modal event if code must run after the modal is visible.

How do I make a navbar fixed or sticky?

Add fixed-top or fixed-bottom to the navbar for a fixed position, or sticky-top to keep it in the page flow until it reaches the top.

Fixed navbars leave the normal flow, so the page body usually needs extra padding-top to avoid overlap (Bootstrap docs, 5.3).

How do I close a toast with a button?

Put data-bs-dismiss="toast" on a button inside the toast. For a button outside it, add data-bs-target pointing at the toast’s id.

Calling hide on the toast instance does the same from a script.

Where can I find official Bootstrap examples and templates?

The docs include an Examples section with downloadable page layouts, and the twbs/examples repository on GitHub holds working demos for bundlers and frameworks.

The 5.3.8 release notes list the removal of Themes from the docs, so the examples are the official starting point.

Does Bootstrap support CSS Grid?

Only as an opt-in experiment. Since 5.1.0, setting $enable-grid-classes to false and $enable-cssgrid to true in Sass switches the layout to CSS Grid.

The migration guide calls it a work in progress that is not yet ready for production use.

Keeping Bootstrap Components Stable Through Updates

Components stay stable when a project pins one exact version, replaces deprecated classes ahead of removal, and keeps pre-release builds for testing only.

The Bootstrap blog called 5.3.8 the last patch before v5.4.0 in August 2025, and its October 8, 2026 post still lists 5.4.0 as upcoming, a gap of more than 13 months.

As verified on October 10, 2026, I’d work in this order. Replace deprecated classes now, pin 5.3.8 in production, and test the v6 alphas on a branch.

Deprecations come first because their removal is already scheduled, whatever date 5.4.0 or v6 ships. The migration guide marks .text-muted for removal in v6.0.0 and names .text-body-secondary as its replacement.

The trade-off is that staying on 5.3.8 forgoes Dialog, Drawer and Menu until v6 leaves alpha, and the project says more alphas will precede beta.

Bogdan Sandu
Latest posts by Bogdan Sandu (see all)