bootstrap vs bulma vs purecss vs tachyons vs tailwindcss
CSS Framework Architecture and Utility Strategies
bootstrapbulmapurecsstachyonstailwindcssSimilar Packages:

CSS Framework Architecture and Utility Strategies

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.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
bootstrap0174,2109.63 MB4438 months agoMIT
bulma050,0806.97 MB522a year agoMIT
purecss023,749229 kB28-BSD-3-Clause
tachyons011,701-896 years agoMIT
tailwindcss094,803787 kB958 days agoMIT

CSS Framework Architecture and Utility Strategies Compared

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.

📐 Layout and Grid Systems

bootstrap uses a 12-column grid system with predefined breakpoints.

  • You wrap columns in a .row container.
  • Classes like .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.

  • You use .columns as the container and .column for items.
  • Modifiers like .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.

  • You use .pure-g for the row and .pure-u-1-3 for units.
  • It relies on inline-block or flexbox depending on version.
<!-- 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.

  • You combine .flex and .w-33 (width 33%) to create columns.
  • There is no explicit grid container class required.
<!-- 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.

  • You use .flex or .grid with .grid-cols-3.
  • Width utilities like .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>

🎨 Customization and Theming

bootstrap relies on Sass variables for theming.

  • You override variables like $primary before compiling.
  • CSS variables are also available in v5 for runtime changes.
<!-- bootstrap: Sass variables -->
$primary: #007bff;
$btn-border-radius: .25rem;
@import "bootstrap";

bulma uses Sass variables with a specific import order.

  • You set variables like $primary before importing the framework.
  • It allows easy tweaking of colors and spacing.
<!-- bulma: Sass variables -->
$primary: #00d1b2;
$family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI";
@import "bulma";

purecss is minimal and expects manual CSS overrides.

  • There are no built-in Sass variables for theming.
  • You write custom CSS to change colors or fonts after importing.
/* purecss: Manual overrides */
@import "purecss";
.button-custom { background: #007bff; color: white; }

tachyons is immutable and does not support theming.

  • Classes map directly to static CSS values.
  • To change colors, you must edit the source CSS or use a fork.
/* 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.

  • You define colors and spacing in tailwind.config.js.
  • The build process generates only the classes you use.
// tailwindcss: Config file
module.exports = {
  theme: {
    extend: {
      colors: { primary: '#007bff' }
    }
  }
}

⚡ JavaScript and Interactivity

bootstrap includes JavaScript for components like modals and navbars.

  • You import the bundle or use individual modules.
  • Data attributes can trigger behavior without writing JS.
// 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.

  • You must write your own toggle logic for navbars or modals.
  • This gives you full control but adds development time.
// bulma: Custom JS
const navbar = document.querySelector('.navbar-burger');
navbar.addEventListener('click', () => { /* toggle logic */ });

purecss is CSS-only with no interactive components.

  • You build all behavior using your own framework or vanilla JS.
  • Best paired with libraries like React or Vue for state.
// purecss: Custom JS
// No built-in helpers. You manage all DOM events manually.

tachyons is CSS-only and focuses on styling state.

  • You handle interactions via your application logic.
  • Classes like .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.

  • You manage interactivity with your framework of choice.
  • Official plugins exist for common UI patterns but not behavior.
// tailwindcss: Custom JS
// Use Alpine.js or framework state for interactivity

🛠️ Maintenance and Ecosystem

bootstrap is actively maintained with regular security updates.

  • Large community ensures many third-party themes exist.
  • Long-term support makes it safe for enterprise projects.

bulma is maintained but updates are less frequent than Bootstrap.

  • Community is smaller but dedicated.
  • Good stability for projects that do not need frequent feature updates.

purecss has low activity and is considered stable legacy code.

  • Yahoo maintains it but feature additions are rare.
  • Suitable for projects where dependencies should not change often.

tachyons is no longer actively developed.

  • The repository sees very little activity in recent years.
  • Do not use for new projects requiring long-term maintenance.

tailwindcss is highly active with frequent releases and updates.

  • Massive ecosystem of plugins, UI kits, and tools.
  • Best choice for new projects needing modern features and support.

🤝 Similarities: Shared Ground Between Frameworks

While the approaches differ, these libraries share common goals and techniques.

1. 📱 Mobile-First Responsive Design

  • All five frameworks prioritize mobile layouts by default.
  • They use media queries to adjust styles for larger screens.
<!-- 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 -->

2. 🎨 Reset and Normalization

  • Each includes a reset to ensure consistency across browsers.
  • This removes default margins and padding from elements.
/* Example: All normalize heading margins */
/* h1, h2, h3... { margin-top: 0; } */

3. 🧩 Modular Imports

  • You can import only the parts you need to save space.
  • This applies to Sass imports or utility configurations.
// Example: Selective importing
// bootstrap: import only grid
// tailwindcss: purges unused classes

4. ✅ Accessibility Focus

  • All aim to provide readable contrast and focus states.
  • bootstrap and tailwindcss have strong accessibility tooling.
<!-- Example: Focus rings -->
<!-- All frameworks provide :focus styles for buttons -->

5. 👥 Community Resources

  • Each has documentation and examples available online.
  • bootstrap and tailwindcss have the largest collections.
<!-- Example: Documentation links -->
<!-- Official docs provide copy-paste snippets for all -->

📊 Summary: Key Similarities

FeatureShared 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

🆚 Summary: Key Differences

Featurebootstrapbulmapurecsstachyonstailwindcss
Approach🧱 Component-based🧱 Component-based🧱 Minimal modules⚡ Utility-first⚡ Utility-first
Grid12-columnFlexboxPercentage unitsFlex utilitiesFlex/Grid utilities
JS Included✅ Yes❌ No❌ No❌ No❌ No
CustomizationSass variablesSass variablesManual CSSEdit sourceConfig file
Maintenance🟢 Active🟡 Stable🟡 Low Activity🔴 Inactive🟢 Very Active

💡 The Big Picture

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.

How to Choose: bootstrap vs bulma vs purecss vs tachyons vs tailwindcss

  • bootstrap:

    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.

  • bulma:

    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.

  • purecss:

    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.

  • tachyons:

    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.

  • tailwindcss:

    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.

README for bootstrap

Bootstrap logo

Bootstrap

Sleek, intuitive, and powerful front-end framework for faster and easier web development.
Explore Bootstrap docs »

Report bug · Request feature · Blog

Bootstrap 5

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.

Table of contents

Quick start

Several quick start options are available:

  • Download the latest release
  • Clone the repo: git clone https://github.com/twbs/bootstrap.git
  • Install with npm: npm install bootstrap@v5.3.8
  • Install with yarn: yarn add bootstrap@v5.3.8
  • Install with Bun: bun add bootstrap@v5.3.8
  • Install with Composer: composer require twbs/bootstrap:5.3.8
  • Install with NuGet: CSS: Install-Package bootstrap Sass: Install-Package bootstrap.sass

Read the Getting started page for information on the framework contents, templates, examples, and more.

Status

Build Status npm version Gem version Meteor Atmosphere Packagist Prerelease NuGet Coverage Status CSS gzip size CSS Brotli size JS gzip size JS Brotli size Open Source Security Foundation Scorecard Backers on Open Collective Sponsors on Open Collective

What’s included

Within the download you’ll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.

Download contents
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.

Bugs and feature requests

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.

Documentation

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.

Running documentation locally

  1. Run npm install to install the Node.js dependencies, including Astro (the site builder).
  2. Run npm run test (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
  3. From the root /bootstrap directory, run npm run docs-serve in the command line.
  4. Open http://localhost:9001 in your browser, and voilà.

Learn more about using Astro by reading its documentation.

Documentation for previous releases

You can find all our previous releases docs on https://getbootstrap.com/docs/versions/.

Previous releases and their documentation are also available for download.

Contributing

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/.

Community

Get updates on Bootstrap’s development and chat with the project maintainers and community members.

Versioning

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.

Creators

Mark Otto

Jacob Thornton

Thanks

BrowserStack

Thanks to BrowserStack for providing the infrastructure that allows us to test in real browsers!

Netlify

Thanks to Netlify for providing us with Deploy Previews!

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

OC sponsor 0 OC sponsor 1 OC sponsor 2 OC sponsor 3 OC sponsor 4 OC sponsor 5 OC sponsor 6 OC sponsor 7 OC sponsor 8 OC sponsor 9

Backers

Thank you to all our backers! 🙏 [Become a backer]

Backers

Copyright and license

Code and documentation copyright 2011-2025 the Bootstrap Authors. Code released under the MIT License. Docs released under Creative Commons.