Palette structure at a glance
Organized as hue families with numeric steps: blue-50, blue-100, …, blue-900. Typically 9–10 steps per hue where lower numbers are lighter tints and higher numbers are darker, more saturated shades.
Multiple neutral families (gray, slate, stone, zinc, etc.) follow the same pattern.
Flat and uniform — every hue follows the same scale
Organized as UI-tuned scales with 12 steps per hue: blue1–blue12 for light, blueDark1–blueDark12 for dark. Alpha variants: blueA1–blueA12.
Instead of a simple light→dark gradient, each index is tuned for specific UI roles (backgrounds, borders, solid fills, strong accents).
Paired and role-aware — each index plays a consistent role in both themes
Naming conventions
Pattern: {hue}-{step} — e.g. blue-500, emerald-600. No built-in semantics; you decide what blue-500 means in your design system.
<button class="bg-blue-500 hover:bg-blue-600 text-white">
Pattern: {hue}{index} — e.g. blue1, blue12. Dark theme: blueDark9. Alpha: blueA6. Indices strongly correlate with roles; docs map each index to a suggested use.
export const colors = {
bg: { app: slate1, surface: slate3 },
text: { primary: slate12, muted: slate11 },
primary: { soft: blue4, solid: blue9 },
}How they handle light and dark themes
Tailwind — one scale, two uses
Tailwind ships a single scale per hue and leaves it to you to choose which step to use in each theme. The dark: variant lets you swap classes when dark mode is active.
<button
class="
bg-blue-600 text-white hover:bg-blue-700
dark:bg-blue-400 dark:hover:bg-blue-500
"
>Flexible but manual — you pick lighter steps for dark mode yourself. Tailwind gives you the crayons; you decide what's appropriate.
Radix — paired scales for light and dark
Radix ships separate palettes explicitly tuned for each theme. blue9 is the solid accent in light mode; blueDark9 is the equivalent in dark mode. The same index number plays the same role in both.
Once you map an index to a role ("9 = primary solid"), swapping light and dark is as simple as switching from the blue palette to blueDark. Less flexible, but much more guided.
How UI-tuned are the steps?
Tailwind
Scales are designed for general usefulness — reasonably monotonic in lightness and saturation, good for both backgrounds and text depending on the step. Not explicitly mapped to UI semantics; the relationships are conventions, not part of the library.
Radix Colors
Each step is tuned with explicit UI uses in mind:
Dark scales are also built to avoid harsh contrast and neon-like glow — reducing trial and error when building layered UIs.
Ecosystem fit
- Projects already using Tailwind CSS utilities
- Teams who like atomic class workflows
- Simple to mid-complexity theming
- Situations where community examples and recipes matter
Works without Tailwind CSS too, but most people encounter it inside Tailwind.
- Design systems and React component libraries (Radix UI, shadcn/ui)
- Apps that must support robust light/dark themes
- Token-first theming and dynamic styling (CSS-in-JS, style objects)
- Places where subtle UI details (layers, overlays, focus rings) matter
The palette is standalone — usable with or without Radix UI components.
Performance and implementation
Both systems are "just colors", but how you consume them differs:
When to choose which
Choose Tailwind if…
- You're already using Tailwind CSS or plan to
- You want a straightforward hue/step system with many hues out of the box
- You're comfortable hand-picking values for light/dark modes
- You want a large, versatile toolbox: some guidance, lots of freedom
Choose Radix Colors if…
- You care deeply about light/dark theming and layered UIs
- You're building a design system or React component library
- You like that
colorScale[9]means "primary solid" in both themes - You want pre-tuned alpha variants and neutrals for overlays
Mixing the two
You don't have to pick just one:
Tailwind for content, Radix for UI core
Use Tailwind as a general utility palette for content and marketing; Radix for the design-system core of your product UI.
Radix as inspiration for Tailwind tokens
Use Radix's role mapping ("9 = solid accent") to guide how you set up Tailwind semantic tokens on top of numeric steps.
Hybrid neutrals
Grab neutrals from Radix or Open Color, primaries from Tailwind, and semantic role ideas from wherever they fit your workflow.