Picking a UI library isn't just about finding a nice logo or following whatever is trending on social media. When we install a library, what we’re actually "buying" is much more complex than just a collection of ready-to-use components.
Let’s be honest: we don't need to build everything from scratch. Trying to build
something as complex as a focus trap for a modal is exhausting and, frankly,
a low return on your time. A much more sensible strategy is to pick a mature
primitive layer and then decide exactly which parts we want to take ownership of
once the installation is done.
Heading into 2025, I think there are three main pillars to consider: accessibility (a11y) guarantees, styling flexibility, and cost.
First, accessibility. This is the part of UI development that often gets
overlooked. Libraries like Radix UI or React Aria treat WAI-ARIA patterns as
their core product. When you use them, you’re buying the peace of mind that
keyboard navigation, focus management, and ARIA roles have already been tested.
On the flip side, if you go with a copy-paste approach like shadcn/ui, your
accessibility guarantee depends entirely on how good the underlying primitives
are—and how disciplined you are not to break aria-* attributes while tweaking
the look.
Second is the "styling escape hatch"—basically, how easy it is to break out of
their design rules. This is where unstyled primitives win hands down. You can
slap on your own classes or data attributes without fighting the library's
built-in visual system. The headache starts when you pick a library that's too
rigid, leaving you forced to use !important everywhere just to fix a bit of
padding that doesn't match your design.
Finally, there’s the cost. A lot of people assume that copying and pasting components into your own repository is free. It’s not. Sure, you get total control, but you also have to be ready to handle manual merges if there are updates from upstream. Having full control means carrying the full responsibility.
At the end of the day, there’s no absolute winner. It all comes down to what the team actually needs: do you need speed with a pre-made design system, or do you need total freedom to build your own visual identity using hooks?