# Base UI: Unstyled React Components From the Radix and Material UI Team

> Base UI is an MIT-licensed, unstyled React component library aimed at teams building their own design system. It ships the behaviour and accessibility layer, not the visuals, and its documentation lives at base-ui.com rather than in the repository README.

**mui/base-ui** — Unstyled UI components for building accessible web apps and design systems. From the creators of Radix, Floating UI, and Material UI.

- Repository: https://github.com/mui/base-ui
- Website: https://base-ui.com
- Stars: 11,003 · Forks: 557
- Language: TypeScript
- License: MIT
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/mui-base-ui

## The problem Base UI solves: behaviour without someone else's CSS

Most component libraries hand you two things at once: the accessibility machinery (focus management, keyboard interaction, ARIA wiring) and a visual opinion (spacing, colour, radius, typography). If your design system already has its own visual language, the second half is a liability. You end up overriding selectors, fighting specificity, or forking components to remove styles you never asked for.

Base UI takes the other position. The README describes it as "an unstyled UI component library for building accessible user interfaces", from the creators of Radix, Floating UI, and Material UI. That lineage matters for judging what the project is good at. Floating UI is a positioning engine, so anchored surfaces such as popups and tooltips are in the team's area of expertise. Radix is a well-known unstyled React primitive library, and Material UI is a styled one, so the same group has shipped both ends of this spectrum.

The intended audience is narrow and specific: teams that own their styling layer already, and want the interaction layer supplied. It is not aimed at someone who wants a dashboard running this afternoon from a component kit.

## What the repository layout says about how Base UI is built

The repository is a pnpm workspace monorepo. The root package.json is named @base-ui/monorepo, marked private, and its preinstall script runs npx only-allow@1.2.2 pnpm, which refuses npm and yarn installs at the root. Versioning and publishing are driven by lerna, with release scripts named release:version, release:build, release:changelog, and release:publish. The root version field reads 1.8.0, matching the v1.8.0 release dated 2026-09-04.

Beyond the root manifest, the top-level entries are instructive. There is a packages/ directory (the published code), a docs/ directory (the documentation site), a playground/ directory, an examples/ directory containing examples/tanstack-start-tailwind-css/ and examples/vite-css/, plus test/, scripts/, and netlify/ for deployment. Tooling is conventional for a large TypeScript project: eslint.config.mjs, prettier.config.mjs, stylelint.config.mjs, vitest.config.mts, tsconfig.base.json, nx.json, and renovate.json.

One detail worth flagging: the repository carries AGENTS.md, CLAUDE.md, .agents/, .claude/, .codex/, and skills-lock.json. Those are configuration files for AI coding agents, which suggests the maintainers expect contributors to work with agent tooling. It says nothing about the quality of the shipped components either way, but it does tell you the contribution workflow assumes those tools.

The README itself is short. It points to the documentation site for getting started, to CONTRIBUTING.md for the development process, and to the releases page for updates. If you are evaluating Base UI from the repository alone, you will not find install instructions there. They live on the documentation site.

## Installing Base UI and rendering a first component

The README does not contain package installation steps; it directs readers to the Base UI documentation quick-start at https://base-ui.com/react/overview/quick-start. The root manifest enforces pnpm through its preinstall script, and the repository ships pnpm-workspace.yaml and pnpm-lock.yaml, so pnpm is the package manager the project's own workflow uses. To install dependencies in the repository itself, the documented script is:

```bash
pnpm install
```

Because the components are unstyled, nothing will look finished after you add the package. You supply the markup and the CSS. The documentation site hosts the component pages, and the searches people run suggest the components drawing the most attention are select, combobox, tabs, toast, and sidebar. Each component page on base-ui.com is the authoritative reference for its props and its render structure; the README does not reproduce any of them.

For a working reference rather than a blank slate, the repository includes two example applications: examples/vite-css/ and examples/tanstack-start-tailwind-css/. The second one pairs Base UI with Tailwind CSS, which is the combination a large share of searchers appear to be asking about. Reading those directories shows how the team expects the unstyled parts to be composed with a utility CSS layer.

To run the documentation site locally from a clone of the repository, the root manifest defines this script:

```bash
pnpm docs:dev
```

That starts the docs package in development mode, which is where the quick-start and per-component pages are served from.

## Where Base UI is the wrong choice

The most direct limitation is the one in the name. Unstyled means unstyled. If your team has no design system, no CSS approach, and no appetite for writing component styles, Base UI moves work onto you rather than off you. A styled library would be faster to a first screen.

The second limitation is scope. The README, the documentation link, and the example applications are all React. The project description says "web apps and design systems" without naming a framework, but every concrete artifact in the repository is React and TypeScript. If you need Vue, Svelte, or a framework-agnostic build, the repository gives you nothing to work with. People do search for "Base UI Vue", which suggests the demand exists, but the repository provides no evidence that a Vue package is shipped.

The third is API stability. The release cadence visible in the repository is roughly monthly for minor versions: v1.6.0 on 2026-06-18, v1.7.0 on 2026-08-04, v1.8.0 on 2026-09-04. That is a healthy cadence for a young library, and it also means minor releases arrive often enough that pinning matters. The repository does not document a deprecation policy or a rollback procedure, so if you need long-term API guarantees, that is something to establish from the project's own release notes rather than assume.

Finally, an unstyled library still makes accessibility decisions for you, and those decisions may not match your product's requirements. Wrapping a component in your own markup can change the accessibility tree in ways the library did not anticipate. Test with a screen reader rather than trusting the label.

## Base UI compared with Radix, React Aria, and Material UI

The comparison that comes up most often is Base UI against Radix. Both are unstyled React primitive libraries, and both come from overlapping people, since the README lists the Base UI team as the creators of Radix. The practical difference for an evaluator is that they are separate codebases with separate APIs and separate release histories. Choosing between them is not a question of philosophy, because the philosophy is nearly identical; it is a question of which component set covers your needs and which API you prefer to wrap.

React Aria takes a different route. It is built around hooks and lower-level primitives, so you assemble more of the component yourself and receive less prebuilt structure. Base UI sits one level up from that: you still style everything, but the component composition is provided. If you want maximum control over markup, the hook approach is more granular; if you want a ready composition you can restyle, Base UI is the closer fit.

Material UI is the clearest contrast, and the README makes the relationship explicit by naming Material UI as one of the projects the team created. Material UI ships a visual language. Base UI ships none. If you are already inside the Material UI ecosystem and happy with its look, Base UI is not an upgrade path, it is a different product. If you have outgrown Material UI's styling and want to keep the accessibility engineering, Base UI is the natural place to look.

## Maintenance, licensing, and what an upgrade actually costs

The repository is not archived, and the last push was on 2026-09-21, the same day as the most recent release activity visible in the repository. Releases land on a roughly monthly minor cadence. That is the extent of what the repository supports saying about maintenance; the README does not publish a support window, a long-term support branch, or a compatibility matrix.

Upgrade cost has two components. The first is the library itself, which follows semantic versioning conventions implied by the v1.x numbering. The second is your own styling layer. Because Base UI ships no CSS, a breaking change in the rendered markup or the data attributes a component exposes can break selectors in your stylesheet, not just your TypeScript. Your type checker will not catch that. If you build on Base UI, your upgrade checklist needs a visual regression step, not only a compile step.

Licensing is straightforward. The README states the project is licensed under the terms of the MIT license, and the repository contains a LICENSE file. MIT permits commercial use, modification, and redistribution with the licence and copyright notice retained. This is a description of the licence text, not legal advice; if your organisation has specific obligations around attribution or dependency review, run it past whoever handles that.

The monorepo also carries a SECURITY.md, which is where the project states how to report vulnerabilities. If you are adopting Base UI in a regulated environment, that file is the starting point for your own review.

## Conclusion

Adopt Base UI if you already own a styling layer and want accessible React primitives you can wrap without fighting someone else's CSS. Do not adopt it if you want finished-looking components out of the box, or if you are not on React, since the documentation is React-scoped. Before committing, read the quick-start and the releases page at base-ui.com, check the current version against the tags in the repository, and confirm that the specific components you need exist at the maturity you require.

## FAQ

### What is Base UI?

Base UI is an unstyled UI component library for building accessible user interfaces, according to the README. It comes from the creators of Radix, Floating UI, and Material UI, and it is written in TypeScript under the MIT license.

### How do I install Base UI?

The README does not list install commands; it points to the quick-start page in the Base UI documentation at base-ui.com. The repository is a pnpm workspace whose root preinstall script enforces pnpm, and the package is published under the @base-ui scope.

### Should I use Radix or Base UI?

Both are unstyled React component libraries, and the README lists the Base UI team as the creators of Radix, so the difference is not one of approach. They are separate codebases with separate APIs and release histories, so compare the component sets and the API you would rather wrap.

### Is Base UI stable?

The repository shows a monthly-ish minor release cadence in the v1.x line, with v1.8.0 released on 2026-09-04, and it is not archived. The repository does not document a deprecation policy or a support window, so API guarantees beyond semantic versioning conventions are not stated.

### What is Base UI React?

The documentation, the quick-start link in the README, and the example applications are all React and TypeScript. Base UI React is the React implementation of the library, and it is the only framework implementation the repository shows.

### How do I use Base UI with shadcn?

The repository does not mention shadcn, so there is no documented integration path. What it does provide is an example at examples/tanstack-start-tailwind-css/ showing Base UI composed with Tailwind CSS, which is the styling approach shadcn also uses.

## Sources

- [License: MIT](https://github.com/mui/base-ui/blob/master/LICENSE)
- [mui/base-ui on GitHub](https://github.com/mui/base-ui)
- [Project website](https://base-ui.com)
- [README](https://github.com/mui/base-ui/blob/master/README.md)
- [Releases](https://github.com/mui/base-ui/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/mui-base-ui
