Skip to content

Class Variance Authority

CVA Logo

CSS-in-TS libraries such as Stitches and Vanilla Extract are fantastic options for building type-safe UI components; taking away all the worries of class names and StyleSheet composition.

…but CSS-in-TS (or CSS-in-JS) isn’t for everyone.

You may need full control over your StyleSheet output. Your job might require you to use a framework such as Tailwind CSS. You might just prefer writing your own CSS.

Creating variants with the “traditional” CSS approach can become an arduous task; manually matching classes to props and manually adding types.

cva aims to take those pain points away, allowing you to focus on the more fun aspects of UI development.



  • Stitches (WorkOS)
    Huge thanks to the WorkOS team for pioneering the variants API movement – your open-source contributions are immensely appreciated
  • clb (Bill Criswell)
    This project originally started out with the intention of merging into the wonderful clb library, but after some discussion with Bill, we felt it was best to go down the route of a separate project.
    I’m so grateful to Bill for sharing his work publicly and for getting me excited about building a type-safe variants API for classes. If you have a moment, please go and star the project on GitHub. Thank you Bill!
  • clsx (Luke Edwards)
    Previously, this project surfaced a custom cx utility for flattening classes, but it lacked the ability to handle variadic arguments or objects. clsx provided those extra features with quite literally zero increase to the bundle size – a no-brainer to switch!
  • Vanilla Extract (Seek)



Apache-2.0 License © Joe Bell