Library / SDK
uber/baseweb avatar
uber/baseweb

Base Web (baseui): Uber's React component library, and how to install it

A React Component library implementing the Base design language

9,009 stars885 forksTypeScriptMIT

At a glance

What is it?
Base Web is the React implementation of Uber's Base design language, published on npm as baseui and styled through Styletron rather than CSS files. It is a mature, MIT-licensed library whose maintainers say they are limiting engagement with the repository while still mirroring internal development.
Who is it for?
Adopt Base Web if you want a wide set of typed React components with Uber's design language already applied, and you are willing to accept Styletron as your styling runtime.
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 4 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Base Web solves, and who it is built for

Building a product interface from scratch means rebuilding the same primitives: a button with the right focus ring, a select that traps focus correctly, a modal that restores scroll position on close. Base Web packages those primitives. It is the React implementation of Base, Uber's design language, and it ships as a single npm package named baseui. The audience is React teams that want a component set with an opinionated visual language already applied, rather than unstyled primitives they must dress themselves. The repository is TypeScript, and the README states that both Base Web and Styletron come with TypeScript support, so component props are typed at the call site. The library is not a starter kit and not a CSS framework. It is a set of components plus a theme object, with LightTheme exported as the default theme in the usage example.

Styletron is the styling engine, and that shapes your bundle

Base Web does not ship a stylesheet you import. Styles are generated at runtime by Styletron, and the README's example wires the engine in explicitly: a Client engine from styletron-engine-monolithic, wrapped around the tree with Provider from styletron-react, with BaseProvider supplying the theme inside it. That ordering matters. Components read theme values from BaseProvider, and StyletronProvider must sit above them so generated classes have somewhere to go. The consequence is a runtime dependency your bundler has to handle, and a peer dependency list that is not optional. The install command in the README pulls in styletron-react and styletron-engine-monolithic alongside baseui. If your build pipeline assumes static CSS extraction, this is the point where Base Web stops being a drop-in. The repository also includes styled, a helper for creating styled elements with the same engine, shown in the README wrapping a div to center content.

Installing baseui and rendering a first component

The README gives two package managers. Both install the same three packages, and the @next tag is used in the documented command, so the version you receive depends on what that tag points to at install time.

bash
# using pnpm
pnpm add baseui@next styletron-react styletron-engine-monolithic

# using npm
npm install baseui@next styletron-react styletron-engine-monolithic

After installing, create the engine once at module scope, wrap your tree in StyletronProvider and BaseProvider, and render a component. The README's example uses StatefulInput, imported from baseui/input, which manages its own value state so no onChange handler is required to see it work.

javascript
import { Client as Styletron } from "styletron-engine-monolithic";
import { Provider as StyletronProvider } from "styletron-react";
import { LightTheme, BaseProvider, styled } from "baseui";
import { StatefulInput } from "baseui/input";

const engine = new Styletron();

The styled helper in that same example takes a tag name and a style object, and returns a component. The README uses it to build a Centered wrapper with display flex, justifyContent center, alignItems center and height 100%. What you should see on screen is a text input centered in its container, styled with the light theme. For a fuller catalogue, the README points to baseweb.design/ladle, and for a browser playground it points to baseweb.design/new.

The maintenance statement is part of the package

The README carries a maintenance notice near the top. It says the project is limiting engagement with the repository while still mirroring internal development, and it links to a blog post titled Open Source Engagement and Future. It also routes Uber developers to internal links for filing issues and contributing. Read that literally: the code continues to move because internal work is mirrored outward, but the public repository is not where the conversation happens. The release data supports a gap between what is published and what the repository declares. The newest release listed is v13.0.0 from 2023-06-13, while package.json declares version 18.2.0. The last push to the repository was on 2026-09-04, so the code is not frozen, but the release list does not account for the version in package.json. If your adoption decision rests on a changelog, confirm where that changelog lives before you plan an upgrade path. The README does not document a rollback procedure or a support window.

Where Base Web is the wrong choice

If your team has standardized on plain CSS, CSS Modules or Tailwind and does not want a runtime style engine in the client bundle, Base Web fights that decision on every component. The same applies if you need a small dependency surface: package.json lists a long set of runtime dependencies, including date libraries (@date-io/date-fns, @date-io/moment, date-fns, date-fns-tz, moment), d3, popper.js, react-virtualized, react-map-gl, react-dropzone, react-hook-form and axe-core. Some of those back specific components, and tree shaking depends on how you import. The README's own example imports from baseui/input rather than the package root, which is the pattern that keeps unrelated code out. A second case: if you need a component the library does not have, you are writing it yourself inside Base Web's styling system, not swapping in a headless primitive from elsewhere. Mixing in a second design system means maintaining two theming layers and reconciling their focus and overlay behaviour by hand.

Radix UI and shadcn take the opposite approach

Base Web ships styled components and a theme. Radix UI, which appears in the search data around this project, is the inverse: unstyled primitives where you supply the appearance. The practical difference shows up on day one. With Base Web you install three packages, wrap the tree, and a StatefulInput renders with Uber's styling. With Radix-style primitives you get accessible behaviour and no visual design, and you write the CSS. Base Web also owns its styling runtime through Styletron, while Radix primitives are typically paired with whatever CSS approach you already use. Neither approach is strictly better; they fail in opposite directions. Base Web gets you to a consistent interface faster and constrains how much you can restyle without fighting the theme. Unstyled primitives give you full control and leave every visual decision, and its accessibility surface, on your side of the line. The search data also links shadcn with Base UI, which is a sign people are weighing copy-in component sets against a themed library.

Licence and the cost of keeping up

The repository is MIT licensed, and package.json declares "license": "MIT". That is permissive: you can use, modify and redistribute the code, including in commercial products, provided you keep the copyright notice and licence text. It does not give you support, a warranty, or a commitment to fix anything. This is not legal advice; read the LICENSE file in the repository for the binding terms. On upgrade cost, the material points to one real friction: the documented install uses baseui@next, and the release list ends at v13.0.0 while package.json says 18.2.0. That gap means you should pin an exact version rather than track the tag, and check the documentation site against the version you pinned. Because styles come from Styletron at runtime, a version bump can change generated class output without changing your component code, so visual regression checks belong in the upgrade loop. The README does not describe a deprecation policy or a migration guide.

Editorial conclusion

Adopt Base Web if you want a wide set of typed React components with Uber's design language already applied, and you are willing to accept Styletron as your styling runtime. Do not adopt it if you need a vendor who will answer your issue quickly: the README states that engagement with the repository is being limited while internal development is still mirrored, and the newest release listed in the repository metadata is v13.0.0 from 2023-06-13 even though package.json declares 18.2.0. Before committing, verify three things yourself: that the version you install matches the version the documentation describes, that your bundler handles Styletron's runtime style generation, and that the components you depend on are still exercised by the mirrored development.

Frequently asked questions

What is baseui?

baseui is the npm package name for Base Web, a React component library that implements Uber's Base design language. The README describes Base as a design system of modern, responsive components, with Base Web as its React implementation.

Is Base UI stable?

The README does not use the word stable, but it does carry a maintenance notice stating that engagement with the repository is being limited while internal development is still mirrored. The last push was on 2026-09-04, and the newest release listed is v13.0.0 from 2023-06-13, while package.json declares 18.2.0.

How do I install Base Web in a React project?

The README shows installing baseui@next together with styletron-react and styletron-engine-monolithic, using either pnpm add or npm install. Styletron is a peer dependency and is required, because Base Web generates its styles at runtime rather than shipping a stylesheet.

Does Base Web work without Styletron?

No. The README's usage example always wraps the tree in StyletronProvider with a Styletron engine, and BaseProvider sits inside it to supply the theme. The install command lists styletron-react and styletron-engine-monolithic as packages you add alongside baseui.

What licence does Base Web use?

The repository is MIT licensed, and package.json declares "license": "MIT". That permits commercial use and modification as long as the copyright notice and licence text are retained.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. uber/baseweb on GitHub
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/uber-baseweb.svg)](https://hysenlabs.com/projects/uber-baseweb)