Bulma ships one CSS file and no JavaScript at all
GitHub describes it as Modern CSS framework based on Flexbox. The repository metadata lists CSS as its primary language. The metadata lists the MIT license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- Bulma is a Flexbox CSS framework whose deliverable is a single stylesheet. That single constraint explains the missing JavaScript, the four trimmed build variants, and why the npm main field points at Sass rather than at the compiled file.
- Who is it for?
- Bulma fits projects that want a layout system with no framework JavaScript to own and a build step they already control. It does not fit anyone expecting ready-made interactive components, and trimming dark mode or helpers is a rebuild rather than a toggle.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 9 days ago.
- What is it written in?
- Mainly CSS, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The npm main field points at Sass, not the compiled CSS
The package manifest makes three different promises about which file is Bulma, and they point at three different things. The main field is bulma.scss, which is Sass source rather than a stylesheet. The unpkg field is css/bulma.css, the expanded compiled output. The style field is css/bulma.min.css, the minified one. The consequence is that a bundler resolving main hands your pipeline a .scss file it will not compile for you, and the two CDN entry points are not the same size even though they carry the same version. If you are wiring Bulma into a build, deciding whether to consume Sass or CSS is the first decision the manifest forces on you, and getting it wrong shows up as a parse error rather than as a missing class.
There is no JavaScript, so every interactive component is yours
Bulma ships styles and nothing else. There is no JavaScript included, and the stated reason is that people generally want to use their own JS implementation and usually already have one, which is why the framework is described as environment agnostic and as just the style layer on top of the logic. The consequence is direct for anyone reaching for a component. A dropdown, a modal, a navbar toggle, and a tab strip all arrive as markup plus CSS with no behaviour attached, so you either write that behaviour or take it from somewhere else. The related projects table is where those third-party answers live, listing wrappers for Vue, React, Ember, Elm, Laravel, Django, Rails, and Blazor. The gap is the price of the small payload, and it is a gap you have to plan for.
Four prebuilt variants drop dark mode and helpers at build time
The build produces more than one stylesheet, and the variants are the interesting part. Alongside the main file there is a no-dark-mode variant, a no-helpers variant, a no-helpers-prefixed variant, and a prefixed variant, each compiled by its own sass invocation from a matching source under versions/ and written into css/versions/. One script chains all four in sequence, and a second script minifies every file in that directory at once. The consequence is that what you ship is a build-time choice rather than a runtime switch. There is no class that turns dark mode off, so deciding to drop it means re-running the Sass build and changing which file your page links. The helper classes are treated the same way, which is the lever to pull first if your stylesheet is larger than your design needs.
The compiled CSS is one sass call, and minifying it is a second
The build is two commands, and the second is not optional if you care about payload. The first compiles the entry Sass file into the expanded stylesheet with a source map:
sass --style=expanded --source-map bulma.scss css/bulma.cssThe second runs that output through cssnano by way of postcss and writes the minified file:
postcss css/bulma.css --no-map --use cssnano --output css/bulma.min.cssThe consequence is that the single CSS file the documentation points you at is the expanded one, while the style field in the manifest serves the minified one. Copy the file from the repository yourself instead of installing the package and you get the larger artifact, because none of the install steps run the second command for you.
Three package managers and a CDN all deliver the same single file
Installation is offered three ways, and they are interchangeable rather than additive:
npm install bulma
yarn add bulma
bower install bulmaAfter installation the instructions say to bring the CSS into your project with an import of bulma/css/bulma.css, and there is a jsDelivr package URL for using the framework without installing anything at all. The consequence is that the choice of manager changes nothing about what you receive, since the sole output is one stylesheet either way, so the decision should be made on what your project already uses. The only path that changes the output rather than the delivery is downloading the Sass source and customising the variables, which is the route the documentation points at for anything beyond out of the box use.
Internet Explorer 10 is partially supported, and autoprefixer covers most of the rest
Browser support is stated in two layers. Bulma uses autoprefixer to make most Flexbox features compatible with earlier browser versions, and against Can I use data it is described as compatible with recent versions of Chrome, Edge, Firefox, Opera, and Safari. Below that, Internet Explorer 10 and later is called only partially supported. The consequence is that the word most does real work in the autoprefixer sentence, and the partial label on Internet Explorer gives you no list of what works and what does not. Anything you build on flex ordering, wrapping, or gaps therefore has to be checked in the browsers you actually intend to support rather than inferred from the compatibility statement.
The ecosystem table carries a dead project and a translation stuck on 0.6.11
The related projects table is long, useful, and explicitly not a maintained index. It marks one entry dead, Vue Admin, and two read-only, Goldfish and Bulma.styl. The read-only Stylus translation is the one carrying a version number, and it describes itself as a 1:1 translation of Bulma 0.6.11, which is a long way behind the 1.0 line the package is on. The consequence is that following the table without reading the labels lands you on a framework generation you did not choose. The rest of the table, covering themes, component wrappers, framework integrations, and a customizer for bespoke builds, is the practical route to replacing the JavaScript Bulma deliberately leaves out.
Version 1.0.4 was tagged in April 2025 while main moved in September 2026
The published versions and the state of the repository do not line up in time. The tags are 1.0.2 from July 2024, 1.0.3 from December 2024, and 1.0.4 from April 2025, and the version in package.json is 1.0.4 to match. The last push to the main branch is dated 2026-09-21. The consequence is that installing from the package registry gets you 1.0.4 and nothing newer, while anything committed to main in the intervening period is reachable only by building from source. The install section is framed around trying the current state and invites you to try it now, which points at a moving branch the tags do not describe. There is a CHANGELOG in the tree, but no release newer than 1.0.4 to attach that gap to.
Editorial conclusion
Bulma fits projects that want a layout system with no framework JavaScript to own and a build step they already control. It does not fit anyone expecting ready-made interactive components, and trimming dark mode or helpers is a rebuild rather than a toggle. Before adopting, decide whether you consume the compiled CSS or the Sass source, check that your browsers are inside the recent list rather than the partial Internet Explorer one, and read the version you actually install against the 1.0.4 tag rather than against main.
Frequently asked questions
how to install bulma
Three managers are offered and all install the same thing: `npm install bulma`, `yarn add bulma`, or `bower install bulma`. You can then bring the stylesheet in with `@import 'bulma/css/bulma.css'`, or load the package from jsDelivr without installing it at all.
how to use bulma css
The sole output is a single CSS file, which you can use out of the box, or you can download the Sass source files to customise the variables. For interactive behaviour there is no JavaScript included, so you supply your own implementation.
what is bulma
Bulma is a modern CSS framework based on Flexbox, released under the MIT licence with Jeremy Thomas named as the author. It describes itself as environment agnostic, a style layer on top of the logic rather than a component library with behaviour attached.
how to use bulma
Link the compiled stylesheet, or import it into your own Sass. Because no JavaScript is included, the interactive part of any component is yours to write. The build also produces no-dark-mode, no-helpers, no-helpers-prefixed, and prefixed variants if you want a smaller stylesheet than the default.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jgthms-bulma)