About base-ui
Base UI is an unstyled, accessible primitive layer for React, intended for developers adapting components to a host design system. The skill guides version-aware composition from documented APIs and checks accessibility and interaction behavior.
Key features
- 01Use unstyled React component primitives
- 02Import components from subpaths
- 03Adapt styling through design-system hooks
- 04Preserve labels, refs, and component props
- 05Check keyboard, focus, and popup behavior
Use cases
- 01Build accessible controls in a React project
- 02Integrate primitives with a local design system
- 03Check APIs against the installed package version
- 04Verify dialog and form interactions
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill base-uiAfter installing, type/base-uiin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlreferences/component-patterns.mdcore-patterns.mdsource-map.mdDetails
From the project READMEBase UI
Use Base UI as an unstyled, accessible React primitive layer. Keep semantics, focus, labels, keyboard behavior, and styling hooks intact while adapting the parts to the host app's design system.
Snapshot: @base-ui/[email protected] (latest, released 2026-09-04; re-verified 2026-10-01). Refresh from source-map.md if the project is pinned elsewhere.
Workflow
- Confirm the installed package and version from the project before changing code. Use
@base-ui/react, not the retired@base-ui-components/reactpackage name. - Read the relevant reference before implementing:
- references/source-map.md: docs sources, package status, inventory, and 1.7–1.8 deltas.
- references/core-patterns.md: setup, styling, composition, state, TypeScript, animation, accessibility, and utilities.
- references/component-patterns.md: anatomy and implementation notes by component family.
- Fetch current official docs when exact prop names, event reasons, release behavior, or component APIs matter. Prefer the installed package's bundled docs (
node_modules/@base-ui/react/docs/index.md, version-matched), then Context7 library/mui/base-uior the page's.mdURL fromhttps://base-ui.com/llms.txt. - Build from documented compound parts first, then wrap with local design-system components only through the
renderprop or thin wrappers that preserve props and refs. - Verify keyboard behavior, focus return, accessible names, controlled/uncontrolled state, portal layering, animation exit behavior, and responsive/mobile behavior.
Implementation Rules
- Import from component subpaths such as
@base-ui/react/dialog,@base-ui/react/combobox, and@base-ui/react/field. - Assemble documented parts. Do not invent components, parts, or shortcuts. Most overlays need
Root, trigger, portal, positioner or viewport, popup, labels/titles/descriptions, and close/actions. - Treat Base UI as unstyled. Style with
className, state-awareclassName/stylefunctions, data attributes, and CSS variables. - Keep accessible names explicit. Use
Field.Label, component-specific labels, native labels, oraria-label/aria-labelledby. - Custom
renderelements must forward refs and spread all received props onto the underlying DOM node. - Prefer uncontrolled components unless the product needs external state. Control with
open/valueplusonOpenChange/onValueChange. - Use event details deliberately:
eventDetails.cancel()blocks the internal state update;eventDetails.allowPropagation()lets a normally stopped DOM event bubble. - For Combobox ID selection, use
Combobox.createItemsandCombobox.Root.Props<Value, Multiple, Item>. Autocomplete has nocreateItems. - Do not copy Tailwind v4-only syntax into Tailwind v3 projects.
- Add portal setup when the app lacks it: isolate the app root and apply the iOS 26+ body style in the core patterns reference.
Verification Checklist
- Markup has the intended roles, labels, disabled/readOnly states, and focus-visible styles.
- Keyboard navigation covers arrows, Home/End, Enter/Space, Escape, tab order, and focus return where relevant.
- Popup/drawer/dialog layers appear above the app and close by trigger, close button, Escape, outside interaction, and route/unmount transitions.
- Form controls submit the intended names/values and surface native, server, or external-library validation errors.
- Animations use
data-starting-style/data-ending-styleorkeepMountedcorrectly; reduced-motion or no-motion remains usable. - TypeScript wrappers expose the correct
Component.Part.Propstypes (including Combobox's thirdItemgeneric) and do not drop refs, handlers, or data attributes.