Yugen UI
React components for Tailwind CSS v4.
$ npx @yugen-ui/ cli@latest init$ npm i yugen-ui$ npx shadcn@latest init https:/ / trandat1114.github.io/ Yugen-UI/ r/ init.jsonStart a new project
Pick a template and run the command: the CLI copies the code, installs dependencies and prints the next steps. Leave out --template to choose in the terminal.
A blank project, ready to go: theme, toast, @/ alias and SEO basics.
$ npx create-yugen-ui@latest my-app --template starterExplore
Principles
Three-layer tokens
Global → Alias → Utility. Switch brands with a single data-brand attribute.
Light & Dark
Themes and brands can be nested on any element.
Accessible
Radix primitives, AA contrast, and color is never the only signal.
Copy & use
Every example comes with its source code.
Design language
Components
129 componentsActions9
CompoundButton is a large button with an icon and two lines of text: the main label and a description of the action.
SplitButton offers several related actions: the main button runs the primary one, the rest live in a menu.
Toolbar groups frequently used commands into a horizontal or vertical bar navigated with the arrow keys.
Inputs30
Autocomplete is a search box with suggestions: type to filter, pick a suggestion to fill it, or press Enter to search the raw query.
ColorPicker picks any color: a saturation / brightness area, hue and opacity bars, and HEX / RGB / HSL inputs.
Combobox combines a text input with a listbox: type to filter, then pick one or more options.
DatePicker is a Fluent-style input that opens a Calendar in a popover to pick a date, shown as dd/MM/yyyy.
DateTimePicker picks a date and a time in one popover: the calendar on top, the time field below.
FileUpload is a drop zone with a file list: pick with mouse or keyboard, drag and drop or paste; type, size and count are validated.
Combine Yugen's Field, Input, Select, Checkbox, DatePicker and Button with react-hook-form + zod for fully validated, accessible forms.
FormattedInput formats phone numbers, card numbers and amounts as you type, keeping the caret in place.
MonthPicker and YearPicker pick a month or a year, with the same field and keyboard as DatePicker.
PasswordInput is a password field with a show / hide button, a Caps Lock note and an optional strength meter.
Navigation10
Command is a searchable command palette for finding and running commands or navigating quickly with the keyboard.
Menubar is a persistent horizontal, desktop-style menu bar holding command groups like File, Edit, View…
NavigationMenu is a website header menu: links and triggers that open dropdown panels (mega menus).
Stepper shows which step of a multi-step process people are on; Wizard pairs it with each step's content and Back / Next buttons.
Data display24
AvatarGroup shows a group of people or entities as avatars laid side by side, stacked, or split inside a circle.
Badge is a visual indicator for a small piece of information: a status, a count or a category label.
Carousel presents content one slide at a time, navigated with previous / next buttons, dots, thumbnails or the arrow keys.
Citation adds numbered sources [1] inline in an answer; hover or focus for a quick preview of title, domain and snippet, click to open the card and link.
CodeBlock shows code with lightweight built-in syntax highlighting (no Prism / Shiki), line numbers, highlighted lines, diffs, wrapping and a copy button.
CounterBadge shows a count (notifications, unread messages) or a dot signalling something new.
DataGrid is an interactive data grid: sorting, row selection, resizable columns and virtualization for tens of thousands of rows.
DescriptionList shows label / value pairs: order details, a profile, a summary of settings.
Image displays a picture with fit, corner radius, border and shadow options; AspectRatio keeps the frame at the right ratio.
List shows a vertical sequence of related items, keyboard navigable, with single or multiple selection.
Markdown renders content written in Markdown (articles, release notes, CMS fields) with Prose typography, safely for untrusted content.
MessageScroller is a conversation scroll area that sticks to the bottom for new messages, shows “N new messages” while you read older ones, and keeps your place when history loads.
Persona pairs an Avatar (or just a presence dot) with a name and up to three lines of details about a person.
Prose styles long content from Markdown or a CMS: headings, paragraphs, lists, tables, code, quotes and images on the Yugen type ramp.
Quote shows an attributed quotation: a testimonial, an excerpt from a document or a statement in an article.
StreamingMarkdown renders an AI's Markdown answer as tokens arrive, without flashes of raw syntax, HTML injection or a full re-render on every word.
Text renders type on the Fluent 2 type ramp, with presets for every role from Display to Caption2.
Timeline lists events over time: an order history, an activity log, the steps a request has gone through.
Tree shows hierarchical data as expandable / collapsible branches, like a folder tree or a navigation catalog.
Feedback11
One place for every state of async data (idle, loading, loaded, empty, error), with skeletons that don't flicker and errors that always offer a way out.
InfoLabel is a label with a small info button that opens a Popover with extra guidance for a field.
MessageBar communicates important information about the state of the whole page or a region.
A thin brand-colored progress bar along the top edge: signals that the app is working during route changes or background loads without covering what you're reading.
ProgressBar shows the progress of a running task, with a known percentage or as indeterminate.
Sonner stacks short notifications in a corner: the newest in front, older ones behind, fanning out on hover.
StatusPage is a page for HTTP errors (404, 500, 503…), being offline and new versions; ErrorBoundary shows it when its children fail.
Toast is a short, non-blocking notification that appears in a corner of the screen and dismisses itself.
Surfaces & overlays7
Dialog is a modal window that asks people to confirm or provide information before continuing.
Drawer is a surface that slides in from the edge of the screen, holding navigation, filters or secondary content.
TeachingPopover introduces a new feature or walks people through steps, right next to the related element.
Layout8
Accordion organizes content into expandable / collapsible sections to reduce information overload.
AppShell is the frame of an app: a sidebar that collapses to icons or opens as a Drawer, a header and the main content.
AspectRatio keeps a frame at a fixed width-to-height ratio at any width, for video, images, banners or stories.
Divider is a thin line separating groups of content, optionally with text or an icon at the start, center or end.
Overflow moves items that don't fit the available width into a "…" menu button, in priority order.
Resizable splits an area into panels people drag to resize or collapse / expand, horizontally or vertically.
ScrollArea replaces the browser's default scrollbar with a thin Fluent-style one that appears on hover.
Motion6
Blur goes from blurry to sharp and Rotate turns an element from -90° into place: two emphatic presence motions.
Utilities7
AriaLiveAnnouncer and useAnnounce read dynamic announcements to screen reader users.
useArrowNavigationGroup and useFocusableGroup manage keyboard focus for groups of elements, like Fluent's Tabster.
Nine shared hooks that Yugen UI's own components use: state, screen, storage, shortcuts and measuring.
Sortable reorders lists by drag and drop or with the keyboard; every step is announced to screen readers.
useMediaQuery tracks a CSS media query (breakpoint, dark mode, reduced motion, pointer type) and re-renders when it changes.
Optimistic list updates: the UI changes the moment you click and syncs with the server in the background; on failure, exactly that change is rolled back and a toast explains why.
VisuallyHidden hides content from the screen while keeping it available to screen readers.
Yugen Labs17
BarChart compares magnitudes across categories with vertical columns or horizontal bars, grouped or stacked, including negative values.
ChatComposer is an auto-growing message box: Enter sends, Shift+Enter adds a new line, and Send is enabled only when there's content.
DonutChart gives a quick part-to-whole view with up to 6 slices; the tail is grouped into “Other” and the total sits in the middle.
Heatmap colors a row × column matrix by magnitude, for hour / day patterns, cohort comparisons or retention tables.
LineChart and AreaChart show trends over time or across ordered categories, with several series on one axis.
Show loaders at the right moment and only over the region that is loading: no flash for fast responses, no flicker for slow ones.
NotificationCenter is a bell with an unread count. It opens a panel of notifications grouped by day: a Popover on desktop, a bottom sheet on mobile.
PromptInput is a complete prompt composer for AI assistants: auto-grows, attaches via button / drag and drop / pasted images, validates files inline, and Send turns into Stop while the model responds.
Questionnaire builds surveys or multi-step forms from a config array, one question per screen or everything on one page.
Reasoning tucks the model's thinking into a collapsible block: “Reasoning…” with a timer while it runs, “Reasoned for 12s” when done.
ScatterChart shows the relationship between two numeric measures (correlation, clusters, outliers), with bubbles and a trend line when needed.
Sheet is an adaptive overlay with one API and one content: a side panel on wide screens, a draggable bottom sheet on phones.
Ready-made skeletons for paragraphs, avatars, cards, lists and tables, with the size, radius and spacing of the real components.
Sometimes the answer isn't a chart: StatTile leads with the number, plus a delta and a small trend sparkline.
Tour walks people through the key parts of a product step by step: dims the rest, spotlights the right element and explains it with a TeachingPopover.
Trace shows execution step by step (an AI agent calling tools, a CI pipeline, a deployment) so people see what the system is doing and why.
brush adds an overview strip under LineChart / AreaChart to zoom into a period without losing the context of the whole series.