Skip to content

Search

Start typing to search.


Show all pages

One skeleton, many skins.

Accessible Tailwind CSS components that wear your brand

Stop rebuilding the same dialog for every product. The core handles keyboard, focus and touch; a skin gives each product its own look. Plain classes for HTML, Astro, Next.js and React.

<button class="ca-button ca-button--primary ca-button--md">

01 Why Calaca

A button should not need rebuilding to wear another brand

Calaca started because our own products kept rebuilding the same components, each a little different, each checked again for accessibility. So we split them: one skeleton that stays the same, and a skin for every product.

Without one skeleton

  • Three products, three dialogs: one closes on Escape, one keeps focus inside, one does neither.
  • Each copy drifts a little further from the last one.
  • Accessibility gets checked again for every brand, or not at all.

With Calaca UI

  • One skeleton under all your products, each in its own skin.
  • Keyboard, focus and touch live in the core, so a new look cannot break them.
  • New screens come from tested parts, in the stack each product already uses.

02 The idea

Same markup. Four looks.

Every card below is the same HTML. The core gives it structure, behavior and accessibility; each skin dresses it. Your product gets its own skin, and the markup never changes.

  • Base skin

    Neutral grayscale starting point; product skins extend it and change what differs.

    New project

    Draft

    Give it a name now. You can invite your team later.

    Everyone you invite sees this name.

  • Calaca skin

    The Calaca UI brand: hueso paper and tinta ink, cempasúchil marigold, rosa and jade.

    New project

    Draft

    Give it a name now. You can invite your team later.

    Everyone you invite sees this name.

  • Proof skin

    Pilot skin pushed far from base: square, heavy, offset shadows, larger targets.

    New project

    Draft

    Give it a name now. You can invite your team later.

    Everyone you invite sees this name.

  • Crossview skin

    The CrossView proofing table: cool ground, bond-paper sheets, rule-grey hairlines, one red mark.

    New project

    Draft

    Give it a name now. You can invite your team later.

    Everyone you invite sees this name.

The markup, for all four

project-card.html

03 How it compares

Classes you keep, a look you choose

Calaca UI next to other Tailwind CSS libraries, as of November 2026
Calaca UIdaisyUIshadcn/uiTailwind Plus
What you getCSS classes and a few small scriptsCSS classes (a Tailwind plugin)React components you copy into your projectPaid snippets you copy (HTML, React, Vue)
Works inAny HTML: plain pages, Astro, Next.js, ReactAny HTMLReactHTML, React, Vue
Change the lookA skin: color, shape, size, type and motionThemes: colors and a few shape settingsEdit the copied componentsEdit the copied snippets
UpdatesUpdate the package; your markup staysUpdate the packageCopied code is yours to maintainCopied code is yours to maintain

04 What you get

Everything a product interface needs, nothing it does not

Tailwind CSS is the only dependency. You keep your markup, your framework and your brand.

  • Components for every screen

    48 components for forms, overlays, navigation, feedback and data, each with a page, live examples and guidance.

    Browse the components
  • Blocks for whole pages

    6 page sections, such as a hero, an FAQ and a footer, each with layouts you switch with one class.

    Browse the blocks
  • Plain classes, any stack

    Class names in plain HTML, Astro, Next.js or React. No components to import, no runtime.

    Install Calaca UI
  • Native first

    A dialog is a real <dialog> and a menu a real popover. Where a script is needed, it stays under 1.5 KB gzipped.

    Read about browser support
  • Accessibility in the core

    Focus rings, touch targets and disabled states are part of the core, so no skin can take them away.

    Read the accessibility guide
  • Your brand, your skin

    Change a few color tokens, or write a skin in TypeScript and build it to CSS. The markup stays the same.

    Write your own skin

05 Get started

Dress the core for your product

  1. Add Calaca to a page or a Tailwind build.

    Follow the installation guide

  2. Pick a skin, or keep the neutral base.

    Learn about tokens and skins

  3. Write your own skin when your product needs its own shape.

    Dress the core step by step

06 Questions

Before you choose

Something else? Read the introduction.

Is Calaca UI a React component library?

No. Calaca UI is a set of CSS classes built with Tailwind CSS. You write the HTML in plain HTML, Astro, Next.js or React and add the classes. A few components load a small script for their behavior.

Do I need a build step?

No. In plain HTML you link one prebuilt stylesheet. In a project that already builds Tailwind CSS 4, you import the core and a skin, and only the classes you use end up in your CSS.

How accessible is it?

Focus rings, touch targets and disabled states live in the core. Every page of this site is checked with axe against WCAG 2.2 AA, in light and dark, in Chromium, Firefox and WebKit.

Can it match our brand?

Yes. Change the color tokens for a quick match, or write a skin: a TypeScript file that maps each class to Tailwind utilities, built to CSS with the calaca command.

Which browsers does it support?

The current and previous versions of Chrome, Edge, Firefox and Safari. Newer browser features come with a small polyfill or a fallback.

Can I install it from npm?

Not yet. It will be published as @calaca/ui. Until then, the installation guide shows the steps the test projects use.

Write the markup once. Give every product its own look.

Link one stylesheet of 15 KB, less than half the font on this page, add the classes, and switch skins without touching the markup.