SedationH Avatar

Some thoughts on Radix, component libraries, and shadcn/ui

Published on July 3, 2025

We’re at that point in the web dev cycle where we’re talking about component libraries again. That’s okay. With Radix receiving fewer updates, it’s a conversation worth having.

Let me start with this and I’ll bold it: The worst thing you can do right now for your production app is switch component libraries.

Don’t do it. That’s not where your time or resources should go. Whatever bug you’re seeing with Radix in your app, you’ll likely run into more, including new ones, with something else. (No shade to anyone. That’s just how code works.)

Yes, Radix is getting fewer updates. But Radix is still a mature, well-designed library, battle-tested and used in millions of production apps. Code doesn’t stop working just because maintainers move on. That’s the strength of open source. And what Radix does, it still does extremely well.

Here’s what I’d suggest:

  • Already using Radix in prod? Stick with it.
  • Starting a new project? Consider Radix, React Aria, or Ariakit. All great choices.
  • Using Radix and thinking what's next? Keep an eye on Base UI (we are). It’s built by the same smart team that created Radix. They’ve done it once. Now they get to do it again and it’s looking really good (currently in beta).
  • Hit a bug with Radix and can’t find a fix or patch? Try testing the equivalent from Base UI. The APIs are very similar.
  • shadcn is built for this. Code you own. Code you can improve, rewrite or replaced.

The most important thing: Use something that works for you and that you understand. Your component library should be stable. This isn’t where you want to take risks in your tech stack.

Every new project (not just component libraries) goes through growing pains: bugs, API changes, missing features, incomplete docs. It’s okay to wait it out, especially for production apps.

Now, where does shadcn/ui fit into all of this?

shadcn (unfortunately named 😅) is not a component library. It’s an idea. It’s a combination of a few things: an open abstraction, great defaults, and a distribution system.

  • An open abstraction built on top of several component libraries. Radix being one of them. It’s code you’d write yourself, structured in a way that’s easier to work with. Loved by LLMs.
  • Carefully chosen defaults that handle the smaller things like focus states, animation styles, variants, and components that naturally fit with one another. Just enough to be a great starting point, and just enough to get out of the way when you’re ready to build your own design system.
  • A distribution system that makes it easy to build, generate, and share code. Built for AI.

The component library is just one layer of shadcn. And if it ever comes to it, a swappable one.

Source