bootstrap, bulma, purecss, tachyons, and tailwindcss are all CSS frameworks designed to speed up frontend development, but they solve styling problems in different ways. bootstrap and bulma provide pre-built components and a grid system using semantic class names. purecss offers a minimal set of responsive modules without imposing a specific look. tachyons and tailwindcss use a utility-first approach, where small single-purpose classes are combined to build designs directly in the HTML. While bootstrap includes JavaScript for interactive components, the others are primarily CSS-only, requiring you to bring your own JavaScript for behavior.
bootstrap, bulma, purecss, tachyons, and tailwindcss all aim to reduce CSS writing, but they differ in how much control they give you and how they structure your markup. Let's compare how they handle layout, customization, and interactivity.
bootstrap uses a 12-column grid system with predefined breakpoints.
.row container..col-md-4 define width at specific screen sizes.<!-- bootstrap: 12-column grid -->
<div class="container">
<div class="row">
<div class="col-md-4">Column 1</div>
<div class="col-md-4">Column 2</div>
<div class="col-md-4">Column 3</div>
</div>
</div>
bulma uses a flexbox-based grid that is mobile-first by default.
.columns as the container and .column for items..is-one-third set the width.<!-- bulma: Flexbox grid -->
<div class="columns">
<div class="column is-one-third">Column 1</div>
<div class="column is-one-third">Column 2</div>
<div class="column is-one-third">Column 3</div>
</div>
purecss provides a responsive grid using percentage-based widths.
.pure-g for the row and .pure-u-1-3 for units.<!-- purecss: Unit-based grid -->
<div class="pure-g">
<div class="pure-u-1-3">Column 1</div>
<div class="pure-u-1-3">Column 2</div>
<div class="pure-u-1-3">Column 3</div>
</div>
tachyons uses functional classes for flexbox layouts.
.flex and .w-33 (width 33%) to create columns.<!-- tachyons: Functional flex -->
<div class="flex">
<div class="w-33">Column 1</div>
<div class="w-33">Column 2</div>
<div class="w-33">Column 3</div>
</div>
tailwindcss uses utility classes for flexbox or CSS grid.
.flex or .grid with .grid-cols-3..w-1/3 control sizing.<!-- tailwindcss: Utility grid -->
<div class="grid grid-cols-3">
<div class="w-full">Column 1</div>
<div class="w-full">Column 2</div>
<div class="w-full">Column 3</div>
</div>
bootstrap relies on Sass variables for theming.
$primary before compiling.<!-- bootstrap: Sass variables -->
$primary: #007bff;
$btn-border-radius: .25rem;
@import "bootstrap";
bulma uses Sass variables with a specific import order.
$primary before importing the framework.<!-- bulma: Sass variables -->
$primary: #00d1b2;
$family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI";
@import "bulma";
purecss is minimal and expects manual CSS overrides.
/* purecss: Manual overrides */
@import "purecss";
.button-custom { background: #007bff; color: white; }
tachyons is immutable and does not support theming.
/* tachyons: Immutable classes */
/* No config file. To change blue, you must edit .bg-blue in source */
.bg-blue { background-color: #0074d9; }
tailwindcss uses a JavaScript configuration file.
tailwind.config.js.// tailwindcss: Config file
module.exports = {
theme: {
extend: {
colors: { primary: '#007bff' }
}
}
}
bootstrap includes JavaScript for components like modals and navbars.
// bootstrap: JS Bundle
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
// HTML: data-bs-toggle="modal"
bulma is CSS-only and requires you to add JavaScript.
// bulma: Custom JS
const navbar = document.querySelector('.navbar-burger');
navbar.addEventListener('click', () => { /* toggle logic */ });
purecss is CSS-only with no interactive components.
// purecss: Custom JS
// No built-in helpers. You manage all DOM events manually.
tachyons is CSS-only and focuses on styling state.
.dim provide hover effects without JS.// tachyons: Custom JS
// Use .dim class for hover, JS for click handlers
tailwindcss is CSS-only but has plugins for forms and typography.
// tailwindcss: Custom JS
// Use Alpine.js or framework state for interactivity
bootstrap is actively maintained with regular security updates.
bulma is maintained but updates are less frequent than Bootstrap.
purecss has low activity and is considered stable legacy code.
tachyons is no longer actively developed.
tailwindcss is highly active with frequent releases and updates.
While the approaches differ, these libraries share common goals and techniques.
<!-- Example: All support responsive adjustments -->
<!-- bootstrap: col-12 col-md-6 -->
<!-- bulma: column is-full-mobile is-half-tablet -->
<!-- purecss: pure-u-1 pure-u-md-1-2 -->
<!-- tachyons: w-100 w-50-ns -->
<!-- tailwindcss: w-full md:w-1/2 -->
/* Example: All normalize heading margins */
/* h1, h2, h3... { margin-top: 0; } */
// Example: Selective importing
// bootstrap: import only grid
// tailwindcss: purges unused classes
bootstrap and tailwindcss have strong accessibility tooling.<!-- Example: Focus rings -->
<!-- All frameworks provide :focus styles for buttons -->
bootstrap and tailwindcss have the largest collections.<!-- Example: Documentation links -->
<!-- Official docs provide copy-paste snippets for all -->
| Feature | Shared by All Five |
|---|---|
| Responsiveness | 📱 Mobile-first media queries |
| Base Styles | 🎨 CSS reset/normalize included |
| Modularity | 🧩 Partial imports supported |
| Accessibility | ✅ Focus states and contrast |
| Documentation | 📚 Online guides and examples |
| Feature | bootstrap | bulma | purecss | tachyons | tailwindcss |
|---|---|---|---|---|---|
| Approach | 🧱 Component-based | 🧱 Component-based | 🧱 Minimal modules | ⚡ Utility-first | ⚡ Utility-first |
| Grid | 12-column | Flexbox | Percentage units | Flex utilities | Flex/Grid utilities |
| JS Included | ✅ Yes | ❌ No | ❌ No | ❌ No | ❌ No |
| Customization | Sass variables | Sass variables | Manual CSS | Edit source | Config file |
| Maintenance | 🟢 Active | 🟡 Stable | 🟡 Low Activity | 🔴 Inactive | 🟢 Very Active |
bootstrap is the safe choice for teams needing a complete UI kit with JavaScript included. It reduces decision fatigue but can make sites look generic.
bulma is a clean middle ground for those who want components without JavaScript baggage. It works well when you want readability and flexbox power.
purecss fits niche cases where size is critical and you only need basic layout helpers. It is not suitable for complex dashboards.
tachyons should be avoided for new work due to lack of maintenance. It remains useful only for maintaining older systems built with it.
tailwindcss is the modern standard for utility-first development. It offers the best balance of control, performance, and community support for new projects.
Final Thought: Your choice depends on how much design freedom you need versus how much pre-built functionality you want. For most new professional projects, tailwindcss offers the best long-term value, while bootstrap remains valid for rapid internal tooling.
Choose bootstrap if you need a complete UI kit with built-in JavaScript components like modals, dropdowns, and tooltips. It is ideal for internal tools, admin dashboards, or prototypes where speed and consistency are more important than unique branding. The large ecosystem means you can find themes and extensions for almost any need.
Choose bulma if you want a modern flexbox-based grid and clean components without any JavaScript dependencies. It is suitable for projects where you prefer to handle interactivity with your own framework (like React or Vue) and want a readable class naming convention. It works well when you need a good starting point but plan to customize the look significantly.
Choose purecss if you need an extremely lightweight foundation for a project where every kilobyte counts. It is best for simple landing pages or widgets where you only need a grid and basic form styling without a heavy component library. Avoid it for complex applications that require extensive pre-built UI elements.
Choose tachyons only for maintaining legacy projects or if you strictly prefer immutable functional CSS with no build step. Note that this package is no longer actively developed, so it should not be used for new greenfield projects where long-term support is required. Modern utility frameworks like tailwindcss offer similar benefits with active maintenance.
Choose tailwindcss if you want full design control without leaving your HTML and need a highly customizable system backed by an active community. It is ideal for custom designs where you want to avoid overriding default component styles and need a robust build process to purge unused CSS. It requires a build step but offers the best developer experience for modern utility-first workflows.
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
Explore Bootstrap docs »
Report bug
·
Request feature
·
Blog
Our default branch is for development of our Bootstrap 5 release. Head to the v4-dev branch to view the readme, documentation, and source code for Bootstrap 4.
Several quick start options are available:
git clone https://github.com/twbs/bootstrap.gitnpm install bootstrap@v5.3.8yarn add bootstrap@v5.3.8bun add bootstrap@v5.3.8composer require twbs/bootstrap:5.3.8Install-Package bootstrap Sass: Install-Package bootstrap.sassRead the Getting started page for information on the framework contents, templates, examples, and more.
Within the download you’ll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.
bootstrap/
├── css/
│ ├── bootstrap-grid.css
│ ├── bootstrap-grid.css.map
│ ├── bootstrap-grid.min.css
│ ├── bootstrap-grid.min.css.map
│ ├── bootstrap-grid.rtl.css
│ ├── bootstrap-grid.rtl.css.map
│ ├── bootstrap-grid.rtl.min.css
│ ├── bootstrap-grid.rtl.min.css.map
│ ├── bootstrap-reboot.css
│ ├── bootstrap-reboot.css.map
│ ├── bootstrap-reboot.min.css
│ ├── bootstrap-reboot.min.css.map
│ ├── bootstrap-reboot.rtl.css
│ ├── bootstrap-reboot.rtl.css.map
│ ├── bootstrap-reboot.rtl.min.css
│ ├── bootstrap-reboot.rtl.min.css.map
│ ├── bootstrap-utilities.css
│ ├── bootstrap-utilities.css.map
│ ├── bootstrap-utilities.min.css
│ ├── bootstrap-utilities.min.css.map
│ ├── bootstrap-utilities.rtl.css
│ ├── bootstrap-utilities.rtl.css.map
│ ├── bootstrap-utilities.rtl.min.css
│ ├── bootstrap-utilities.rtl.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── bootstrap.min.css.map
│ ├── bootstrap.rtl.css
│ ├── bootstrap.rtl.css.map
│ ├── bootstrap.rtl.min.css
│ └── bootstrap.rtl.min.css.map
└── js/
├── bootstrap.bundle.js
├── bootstrap.bundle.js.map
├── bootstrap.bundle.min.js
├── bootstrap.bundle.min.js.map
├── bootstrap.esm.js
├── bootstrap.esm.js.map
├── bootstrap.esm.min.js
├── bootstrap.esm.min.js.map
├── bootstrap.js
├── bootstrap.js.map
├── bootstrap.min.js
└── bootstrap.min.js.map
We provide compiled CSS and JS (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). Source maps (bootstrap.*.map) are available for use with certain browsers’ developer tools. Bundled JS files (bootstrap.bundle.js and minified bootstrap.bundle.min.js) include Popper.
Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.
Bootstrap’s documentation, included in this repo in the root directory, is built with Astro and publicly hosted on GitHub Pages at https://getbootstrap.com/. The docs may also be run locally.
Documentation search is powered by Algolia's DocSearch.
npm install to install the Node.js dependencies, including Astro (the site builder).npm run test (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets./bootstrap directory, run npm run docs-serve in the command line.Learn more about using Astro by reading its documentation.
You can find all our previous releases docs on https://getbootstrap.com/docs/versions/.
Previous releases and their documentation are also available for download.
Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.
Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the Code Guide, maintained by Mark Otto.
Editor preferences are available in the editor config for easy use in common text editors. Read more and download plugins at https://editorconfig.org/.
Get updates on Bootstrap’s development and chat with the project maintainers and community members.
irc.libera.chat server, in the #bootstrap channel.bootstrap-5).bootstrap on packages which modify or add to the functionality of Bootstrap when distributing through npm or similar delivery mechanisms for maximum discoverability.For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we adhere to those rules whenever possible.
See the Releases section of our GitHub project for changelogs for each release version of Bootstrap. Release announcement posts on the official Bootstrap blog contain summaries of the most noteworthy changes made in each release.
Mark Otto
Jacob Thornton
Thanks to BrowserStack for providing the infrastructure that allows us to test in real browsers!
Thanks to Netlify for providing us with Deploy Previews!
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
Thank you to all our backers! 🙏 [Become a backer]
Code and documentation copyright 2011-2025 the Bootstrap Authors. Code released under the MIT License. Docs released under Creative Commons.