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 |
bestax-migrate/ |
bestax-migrate |
Codemods for migrating existing apps from other React Bulma libraries |
bestax-mcp/ |
bestax-mcp |
MCP server β component props, examples and skills for AI coding agents |
docs/ |
β | Docusaurus source of bestax.io |
skills/ |
β | Agent Skills for coding agents (also bundled into create-bestax) |
The published 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
-
π MCP server β let the agent query the library instead of reading it: props (including compound parts), ~900 examples,
--bulma-*variables, and the skills as prompts. Offline, and pinned to the version you have installed.claude mcp add bestax -- npx -y bestax-mcp
-
π§© 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
Supply-chain security here is a standing constraint on how the project is built, not a checklist we filled in once:
- Signed provenance on every release β each tarball carries a sigstore attestation linking it to the exact commit and CI run that produced it. Check it yourself with
npm audit signatures, or on the package page's Provenance section. - npm OIDC trusted publishing β releases authenticate with short-lived, per-run tokens. There is no long-lived
NPM_TOKENin this repo to steal. - Signed release commits β release commits and tags are GPG-signed, and
mainrejects unsigned commits outright. - Socket.dev scans every PR β dependency changes are checked for malware, install scripts, obfuscated code, and privilege escalation before they can reach
main. - Every GitHub Action pinned to a full commit SHA β no movable tags, so a compromised action release can't roll silently into the pipeline.
- Install scripts blocked by default β dependency
install/postinstallscripts don't run unless explicitly allow-listed one at a time, each with a written rationale (pnpm-workspace.yaml). - 3-day dependency cooldown β freshly published versions won't install. This is the main defense against account-takeover worms, which are usually yanked within hours.
- Frozen lockfile + audit gate β CI installs exactly what the reviewed lockfile resolves and fails on high-severity advisories.
- CodeQL, Dependency Review, and Dependabot β static analysis over both the source and the workflow files, PR-level advisory blocking, and weekly grouped dependency updates.
- Layered AI review before merge β every PR gets a CodeRabbit review plus an independent adversarial Claude review that deliberately runs a different model from the one writing AI-authored changes. On top of that,
mainrequires green CI, one approving review, and a human merge. AI agents are structurally barred from editing the workflows, release config, or supply-chain settings that gate them. - Inbound issues and PRs are security-triaged β a read-only AI pass flags code crafted to harm whoever runs it, prompt injection aimed at our own automation, and social engineering. Flagged items are labeled and refused by every AI entry point until a human clears them. It fails closed, so an inconclusive scan flags rather than passes, and the model session itself has no write tools β a separate deterministic step applies the label, so the AI never posts or acts on anything.
Full detail: SECURITY.md Β· Security guide
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 Bulma CSS framework, Β© Jeremy Thomas and licensed under the MIT License. Some example content and documentation is adapted from the Bulma website (CC BY-NC-SA 4.0), Β© Jeremy Thomas.
If you find Bulma useful, please consider sponsoring Jeremy Thomas to support its continued development.
We are not affiliated with Bulma or Jeremy Thomas in any way β we're just big fans of the Bulma framework!
MIT Β© Alex Smith