Yugen UI

Browsers & platforms

Yugen UI targets evergreen browsers and React 19 or later. The modern CSS features Tailwind CSS v4 relies on need no polyfills.

Browsers

The latest two versions of each evergreen browser. In practice the minimum versions are those of Tailwind CSS v4.

BrowserVersionStatus
Chrome, Edge (Chromium)Latest 2 · minimum 111Supported
FirefoxLatest 2 · minimum 128Supported
Safari macOS & iOS / iPadOSLatest 2 · minimum 16.4Supported
Chrome Android, Samsung InternetLatestSupported
Internet Explorer, Edge Legacy (EdgeHTML)—Not supported
Need older browsers?Tailwind CSS v4 has no backward-compatible mode. In that case consider Tailwind 3 and move the token config to tailwind.config.js yourself. This is outside what Yugen UI supports.

CSS features used

All of them work in every browser in the table above. No polyfills or extra PostCSS plugins needed.

FeatureWhere it is used
CSS custom propertiesAll tokens: --colorNeutralForeground1, --spacingM, --brand-80…
@layerTailwind v4 outputs CSS in cascade layers (theme, base, components, utilities), so utilities always win over base.
@propertyTailwind v4 registers variables for transform, shadow and gradient so they animate smoothly.
color-mix()Opacity modifiers on token colors: bg-shell/85 (top bar), border-brand-stroke/30 (tint Badge).
:has()Disabled Input (has-[input:disabled]), Radio focus ring (has-[button:focus-visible]), disabled Switch.
Logical propertiesms-*, ps-*, start-*, border-s, rounded-s-*, text-start. The basis of RTL support.
:focus-visibleThe 2px focus ring shows only for keyboard use.
:dir() / [dir]The rtl: variant for flipping icons and transforms.
dvh unitDialog / Drawer / Toast height on mobile (max-h-dvh).
clip-path: inset()The 2px brand bar at the bottom of inputs.
aspect-ratioAspectRatio, Image.
translate / scale / rotateThe individual transform properties Tailwind v4 generates.
prefers-reduced-motion, prefers-color-schemeTurning off looping animations (motion-reduce:animate-none), picking the initial theme.
oklch()Not required: tokens use HEX values, and Tailwind's default (oklch) palette is turned off.

React, TypeScript, Tailwind

TechnologyVersionNotes
React / React DOM19 or later (React 18 was supported until 0.14)Takes ref as a prop, uses useId and useSyncExternalStore; Radix, cmdk and react-day-picker all support React 19.
TypeScript5.xThe source is written in strict mode; every prop type is exported with its component (ButtonProps, FieldProps…).
Tailwind CSS4.xv4 is required: CSS-first config (@theme, @utility), syntax such as size-4! and max-h-(--var).
BundlerVite 6 or later · Next.js 14 / 15 · any bundler with PostCSS supportComponents use no bundler-specific APIs; only the @/ alias is needed.
Radix UIAs in package.jsonEach primitive is a separate package. Install only the ones you use.
IconsBuilt inThe icons inside components ship with yugen-ui as small inline SVGs (Fluent System Icons), so no icon package is needed. For your own icons add @fluentui/react-icons, or any SVG icon set.

Mouse, touch, keyboard

Every component works with all three input methods and with assistive technology.

InputBehavior
Mouse / penAll states from hover to pressed. In Tailwind v4, hover: applies only on devices that can actually hover, so hover doesn't “stick” on touch screens.
TouchSlider sets touch-none so dragging doesn't scroll the page; Toast can be swiped away; Drawer and Carousel work with touch gestures. Medium controls are 32px tall (≥ 24px per WCAG 2.5.8). Touch-first interfaces should use size="large" (40px).
KeyboardTab / Shift+Tab between controls, arrow keys inside groups (Tabs, Menu, RadioGroup, Toolbar, Tree, List…), Esc closes overlays. The full table is on the Accessibility overview page.
Screen readersTest with NVDA + Firefox / Chrome, JAWS + Chrome, VoiceOver + Safari (macOS, iOS), TalkBack + Chrome (Android), Narrator + Edge.
Contrast mode (forced-colors)Floating surfaces and buttons keep border-transparent instead of removing the border, so Windows High Contrast still draws an outline. Focus uses outline, so it always shows.
ZoomLayouts use flex / grid and viewport-based max widths (calc(100vw - …)) so they reflow when zoomed in.

Testing on each engine

Every PR runs E2E tests on Chromium. Firefox and WebKit run weekly and on release PRs into main.

Firefox and WebKit (desktop Safari, iPhone) run the tests for mouse dragging, Carousel, keyboard, the main docs flows and mobile layout. Accessibility checks (axe) run on Chromium only, since the results do not depend on the engine. Known differences:

EngineDifferenceImpact
Safari / WebKitA mouse click does not focus the button (the macOS default).Component behavior is unchanged. Use the keyboard when testing focus.
Firefox, WebKitPlaywright cannot emulate touch dragging (Input.dispatchTouchEvent is Chromium only).Sheet dragging and Carousel swiping are tested automatically on Chromium only; on iOS, test them by hand.
Firefox, WebKitPages cannot read the clipboard unless the user allows it.The Copy button only writes (navigator.clipboard.writeText in the click handler), so it works on every engine.