Koala UI React
The React implementation of Koala UI: 89 production-ready components built on Tailwind CSS v4 and Radix, with four themes and eight accents driven by a single token.
- Role
- Design System, Front-End
- Stack
React
TailwindCSSRadix
- Year
- 2026
Project Details
Koala UI React is the code side of the Koala UI design system: a library of 89 production-ready React components built on Tailwind CSS v4 and Radix, with four themes and eight accents, a density system, and a strict house style. Every component ships feeling finished — and the ones on this page are the real thing, running right here, not screenshots.
- 89 components, from buttons and forms to charts, data tables and an AI chat thread
- Four themes (light, dark, moonlight) and eight accents, all driven by a single token
- A
koalauiCLI that copies source into your project — you own and edit the code - Built on Radix primitives, so behavior and accessibility come for free
- A house style enforced across every component: motion tokens, tabular numbers, tactile press
Tech Used
Live, not screenshots
The system's numbers roll instead of jumping — the old value lifts up and out while the new one rises from below, on the shared motion tokens. Poke the controls: it never nudges its neighbours, because every figure is set in tabular numbers.
One token, the whole system recolors
A design system earns its name when a single knob restyles everything. Here the
accent is one custom property: tap a swatch and the button, badge, trend chip and
sparkline all recolor at once — the same way data-accent recolors the real kit.
Charts, no library underneath
The chart is pure SVG — no charting dependency — yet it draws its own axes, grid, and area, and reveals a crosshair and tooltip on hover. Series colours come from the palette, so it themes with the rest of the system.
| month | Revenue |
|---|---|
| Jan | 4,200 |
| Feb | 3,800 |
| Mar | 5,100 |
| Apr | 6,200 |
| May | 5,800 |
| Jun | 7,400 |
Suggestions, the way an editor should
The AI marks the spans it would change and tints each underline by category — grammar, clarity, tone. Click one to see the replacement and why. Apply, and the old text lifts up and out while the new one rises into its place, the line reflowing under a soft flash in the category's colour rather than snapping.
A composer that knows it's talking to a model
The prompt input is a toolbar, a textarea and a submit button that swaps to a stop control while the answer streams. Attachments, model and tools each hang off their own menu, and the character count keeps its place because it's set in tabular numbers.
A carousel you can throw
Drag it, flick it, or use the arrow keys. The slides snap, the arrows wrap around the ends so neither ever goes dead, and the indicators track position without stealing focus.
The same carousel, seven ways to show position: pill-morphing dots, thin lines, a
rolling 2 / 5 fraction, slide thumbnails, text tabs with a gliding underline, numbered
chips, and a continuous progress bar. Position is a prop — overlay and align compose
with every one.
Alerts that carry their own icon
The variant picks the tone, the icon and the accessible role in one prop. Dismiss one and the stack closes the gap instead of jumping.
Deployment successful
Your application is live on production.
New update available
Version 2.4.0 introduces improved performance.
Storage almost full
You have used 90% of your allocated storage.
Payment failed
Your card was declined. Please update your details.
Right-click, like a desktop app
Radix under the hood, so submenus, checkboxes, radio groups and keyboard shortcuts all behave the way the operating system taught you to expect.
Right-click to open the menu
A sidebar with the whole shell attached
Collapsible groups, a workspace switcher, nested items, badges and a keyboard hint — all reading the density token, so the same markup serves a marketing site and a dense admin panel.
A chat thread, not a chat widget
Bubbles, avatars, timestamps, hover actions and the three-dot typing indicator whose bounce ripples left to right. The thread scrolls; the composer stays put.
Done. I dropped an EmptyState into the table body:
- Renders when rows.length === 0.
- Reuses our EmptyState (icon, title, action).
- Stays hidden while loading so the skeleton shows.
Toolbars that fold themselves
Toggle groups, dropdowns, a colour picker and tooltips, all in one roving-focus strip. When the space runs out, the overflow menu takes what doesn't fit.
A video player built from parts
Play, seek, volume, fullscreen and a buffering spinner, each its own component around a
native <video>. No media library underneath — the browser already ships one.
Dates without a date library
The calendar is hand-rolled: no date-fns, no react-day-picker. Presets, ranges,
constraints and keyboard navigation, in about the space those dependencies would have
taken.
Inputs that compose
Prefix, suffix, label and hint are separate slots rather than a dozen props, so a search field, a currency field and a phone field with a country selector are the same component wearing different parts.
Multi-select that counts out loud
Grouped options, a filter, and a chip row that animates as it fills. The running total rolls rather than jumps, on the same animated number as the rest of the system.
Density is one token, not a redesign
Density isn't a per-component knob. Toggle it and a whole sign-in block retunes at once:
comfortable opens the padding, gaps and title for a roomier marketing feel, compact
tightens everything for dense app UI.
Welcome back
Sign in to your account to continue.
Don't have an account? Sign up
Forty-eight logos that don't exist
Every placeholder brand in the docs is a dependency-free inline SVG on a 32×32 grid,
painted with currentColor and optically scaled about its centre. No logo files, no
network, and they recolor with the theme.
- Apex
- Helio
- Dewn
- Cobalt
- Blossom
- Forge
And the sections built on top
The free tier ends at components; the sections are where they earn their keep. This is a spotlight carousel: one quote per slide, autoplaying on a six-second loop that pauses the moment you touch it, and never autoplays at all under reduced motion.
How it's built
- Each component is one
tailwind-variantsrecipe with semantic tokens only — never a raw color - Color, type, spacing and motion live as tokens, so a whole app rebrands from one place
- Radix
SlotpowersasChild, so any component can lend its behavior to your own markup - The CLI ships source, not a bundled dependency — no lock-in, fully yours to edit
Availability
The free tier — every component, the lib helpers and the tokens — installs through the
koalaui CLI. A separate PRO tier adds marketing sections, full page examples and
templates.