TypeScript-first React component library for the Bulma v1 CSS framework β 80+ fully typed components β plus a project scaffolder and AI agent tooling.
| Library | @allxsmith/bestax-bulma β npm install @allxsmith/bestax-bulma |
| Scaffolder | create-bestax β npm create bestax@latest my-app |
| Requires | React ^18 || ^19 (+ react-dom). Bulma v1 is the library's only runtime dependency β installed automatically |
| Styles | import '@allxsmith/bestax-bulma/bestax.css'; β Bulma v1 + the bestax extras (more flavors) |
| Icons (optional) | Font Awesome, Material Design Icons, Ionicons, Material Icons, Material Symbols β all optional peer dependencies |
| Docs | bestax.io Β· Storybook |
| LLM docs | llms.txt (curated index) Β· llms-full.txt (complete docs, one file) |
| Agent Skills | npx skills add https://github.com/allxsmith/bestax --skill bestax-layout-scaffold (all four skills) |
| Community | Discord Β· Stack Overflow bestax Β· Issues |
If you are an AI agent or LLM: fetch https://bestax.io/llms.txt for a curated index of the full documentation, or https://bestax.io/llms-full.txt for the complete docs in a single file, before answering questions about or writing code with this library. Every page on bestax.io is also available as raw markdown β see the LLMs guide.
Full documentation, guides, and API reference: π https://bestax.io β the docs site is always the most complete and up-to-date resource.
Scaffold a Vite app with everything wired up (CSS flavor, icon library, optional AI skills + CLAUDE.md):
npm create bestax@latest my-app
# or: pnpm create bestax my-appUseful flags: -t vite|vite-ts (template), -b complete|prefixed|no-helpers|no-helpers-prefixed|no-dark-mode (CSS flavor), -i fontawesome|mdi|ionicons|material-icons|material-symbols|none (icons), --skills (install the Agent Skills into .claude/skills), -y (accept defaults). See the create-bestax README.
npm install @allxsmith/bestax-bulma
# or: pnpm add @allxsmith/bestax-bulmaImport the bundled CSS once (Bulma v1 + the bestax extras), then use components:
import '@allxsmith/bestax-bulma/bestax.css';
import { Button } from '@allxsmith/bestax-bulma';
function App() {
return (
<Button color="primary" onClick={() => alert('Clicked!')}>
Click Me
</Button>
);
}Prefer stock Bulma? import 'bulma/css/bulma.min.css'; works too β you'll just miss the bestax-only components' styles (add @allxsmith/bestax-bulma/extras.css for those).
Theming, dark mode, and configuration are one wrapper away:
import { Theme, ConfigProvider } from '@allxsmith/bestax-bulma';
function Root() {
return (
<Theme isRoot colorMode="system">
{/* colorMode: 'light' | 'dark' | 'system' */}
<ConfigProvider iconLibrary="fa">
<App />
</ConfigProvider>
</Theme>
);
}Installation guide Β· Configuration
| Path | Package | What it is |
|---|---|---|
bulma-ui/ |
@allxsmith/bestax-bulma |
The component library |
create-bestax/ |
create-bestax |
Project scaffolder β npm create bestax@latest |
docs/ |
β | Docusaurus source of bestax.io |
skills/ |
β | Agent Skills for coding agents (also bundled into create-bestax) |
The two packages are versioned and released independently.
80+ components covering all of Bulma v1, plus bestax extras (Carousel, Dialog, Sidebar, Steps, date/time pickers, and more):
- Elements β Button, Table, Tag, Title, Icon, Image, Notification, Progress, Skeleton, Content, Delete, and typed HTML wrappers (Paragraph, Span, Figure, lists, β¦)
- Components β Navbar, Modal, Card, Dropdown, Menu, Message, Pagination, Panel, Tabs, Breadcrumb, Toast, Tooltip, Steps, Sidebar, Carousel, Collapse, Dialog, Loading
- Form β Field/Control, Input, Select, TextArea, Checkbox(es), Radio(s), Switch, Slider, Rate, File, Numberinput, Autocomplete, Taginput, and DateInput / TimeInput / DateTimeInput pickers
- Layout β Container, Section, Hero, Level, Media, Footer
- Columns & Grid β classic 12-column flexbox columns and the Bulma v1 CSS Grid
- Helpers β
Theme,ConfigProvider,useBulmaClasses,classNames
Migrating from v2? Snackbar was merged into Toast in v3 β see the migration guides.
Pick one CSS flavor (all shipped with the library β matching create-bestax -b):
| Import | What you get |
|---|---|
@allxsmith/bestax-bulma/bestax.css |
Default. Bulma v1 + bestax extras |
@allxsmith/bestax-bulma/versions/bestax-prefixed.css |
All classes prefixed bestax- β pair with <ConfigProvider classPrefix="bestax-"> |
@allxsmith/bestax-bulma/versions/bestax-no-helpers.css |
Without Bulma helper classes |
@allxsmith/bestax-bulma/versions/bestax-no-helpers-prefixed.css |
Prefixed, without helpers |
@allxsmith/bestax-bulma/versions/bestax-no-dark-mode.css |
Without dark-mode styles |
@allxsmith/bestax-bulma/extras.css |
bestax extras only β for use alongside stock bulma/css/bulma.min.css |
@allxsmith/bestax-bulma/scss/* |
Raw SCSS for full customization |
- Dark mode:
<Theme colorMode="dark">(or"system"to follow the OS) β docs - Brand colors, fonts, radius: the
Themecomponent overrides Bulma's--bulma-*CSS variables (globally withisRoot, or scoped to a subtree). Default primary color is#1e6b99 - Class prefixing & icon defaults:
ConfigProvidersetsclassPrefixandiconLibraryfor a whole tree - CSS variables reference: docs
Building with an AI agent (Claude Code, Cursor, Copilot)? bestax-bulma ships LLM-optimized docs:
-
π LLMs guide β how to use the library with AI tools
-
π llms.txt β curated index Β· llms-full.txt β the full docs in one file Β· every docs page is also served as raw markdown
-
π§© Agent Skills β teach your agent the bestax way:
Skill Use it whenβ¦ bestax-layout-scaffoldTurning a high-level request (dashboard, landing page, β¦) into a responsive page bestax-formBuilding forms β Field/Control composition and the full input inventory bestax-themingCustomizing colors, fonts, dark mode via Themeand--bulma-*variablesbestax-custom-componentBuilding a new custom component beyond stock Bulma, the bestax way npx skills add https://github.com/allxsmith/bestax --skill bestax-layout-scaffold
New projects get the skills automatically with
npm create bestax@latest my-app --skills(plus a generatedCLAUDE.md).
- Built for Bulma v1.x β most other React Bulma libraries are stuck on Bulma 0.9.4
- 100% TypeScript β every component and prop fully typed
- One runtime dependency: Bulma β it ships with the library; clean install, fewer security concerns
- Lightweight β see the live bundlephobia badge; tree-shakeable ESM + CJS
- 99% test coverage β enforced in CI by the jest config, not just claimed
- Active developer support β issues, questions, and PRs get fast responses
Want to contribute or run the project locally? See CONTRIBUTING.md. In short:
corepack enable && pnpm install --frozen-lockfile
pnpm all # build, typecheck, test + coverage, lint β the pre-PR gateThis is a pnpm + Turborepo monorepo; contributor-facing AI context lives in CLAUDE.md (mirrored for other tools in AGENTS.md).
bestax-bulma is built on top of the incredible @jgthms/bulma CSS framework.
If you find Bulma useful, please consider sponsoring Jeremy Thomas to support the continued development of Bulma.
Note: We are not affiliated with Bulma or Jeremy Thomas in any way...We're just big fans of the Bulma framework!
- The Bulma CSS framework is Β© Jeremy Thomas and licensed under the MIT License.
- Some example content and documentation in this site is adapted from the Bulma website (CC BY-NC-SA 4.0), Β© Jeremy Thomas.
See Bulma's license page for more details.
MIT Β© Alex Smith