What I DON'T like about shadcn/ui
Leonardo Montini

Leonardo Montini @balastrong

About: Awarded GitHub Star since 2023 ⭐️ and Microsoft MVP since 2024 🔷 I talk about Open Source, GitHub, and Web Development. I also run a YouTube channel called DevLeonardo, see you there!

Location:
Italy
Joined:
Jun 18, 2022

What I DON'T like about shadcn/ui

Publish Date: Apr 23 '24
45 8

Shadcn/ui is great, components are good-looking, easy to setup and customize, and everyone likes it… BUT, as everything, it has some downsides.

Most of the reviews are 100% positive, but I think it’s also worth mentioning what are the tradeoffs in order to make an informed decision, before adopting a tool.

So, after using it for a few months, I recorded a video sharing my thoughts.

What you're reading here is the script of the video, however some examples are better shown in the video than explained. I'll try to add some screenshots!

First of all, this is NOT a component library, it’s clearly written in the homepage but I’m afraid not everyone is going to read it.

What does that mean? When you take a component from shadcn/ui, from that moment it becomes YOUR component. If there’s a problem, well, it’s YOUR problem.

Unlike the other UI libraries we’re used to deal with where bugs are fixed with npm update, this is not exactly the case with shadcn.

(See at 01:08)

Look ad this dropdown, I copy paste from the docs and it doesn’t work, and you know what, I have to fix it manually on my project. We’ll get on that later.

Combobox


In general the components are… basic. Wich makes sense, it’s not a huge library like MUI or Prime with advanced components, it’s not an UI library at all, but when deciding if you want to use shad, you must be aware of that. Lot of people claiming it’s the best ui library so far, often forget to mention this.

Most of the components are simply customizations of headless components coming from another great library that is Radix-ui. Let’s talk about that.

The first issue i’ve got with radix is… not a big one, but I want to mention it. When importing components, it always comes as first suggestion but if you import if from there and you look at your application, it obviously doesn’t work.

(See at 02:48)

Radix

But maybe this can be easily solved with some settings on vscode. Let me know!


Since a lot of components are built on top of radix, what happens if radix has a bug? The easy answer is that you can simply update it and the bug is gone, but then what if something else breaks on shad because of the radix update?

Maybe it’s not gonna happen that often, but as mentioned, if there’s a bug, it’s your problem.

Speaking of bugs, let’s get back at the broken combobox, I cannot click on the options and this is the component copy pasted from the docs, how is that possible?

By looking at this open GitHub issue, a breaking change on cmdk, another library shad relies on, also broke the shadcn Combobox component.

Besides, some components are seen as disabled some other are directly throwing an error and are unusable.

(See at 04:10)

Error

In this case it seems that the fix fix is to:

  1. Wrap all <CommandItem> inside <CommandList>
  2. Change a couple tailwind classes from [data-disabled] to [data-disabled='true']

With that, everything is back to work, but we don’t have any guarantee that bugs in the future will always be that easy to fix.


Maybe I’m wrong, but I have the feeling that on the long run this dependency situation might backfire, basically forcing shadcn users to fix the bugs themselves each time they occur, like this one.

Or maybe since the community is big, it will be as easy as searching through the open issues. Or even better, like breaking changes in other libraries there will be a list somewhere with all the known bugs and solutions.

I don’t know, let’s see how it will evolve.

In general, I’m quite happy with shadcn/ui so far, but I also think the downsides have to be clear.

Instead of chasing the hype, you should try to make an informed decision before adopting a new shiny tool. But how is your experience with shadcn going? Let me know in the comments and speaking of hype, let me recommend you this video.

Thanks for watching, bye!


Thanks for reading this article, I hope you found it interesting!

I recently launched a GitHub Community! We create Open Source projects with the goal of learning Web Development together!

Join us: https://github.com/DevLeonardoCommunity

Do you like my content? You might consider subscribing to my YouTube channel! It means a lot to me ❤️
You can find it here:
YouTube

Feel free to follow me to get notified when new articles are out ;)

Comments 8 total

  • Fyodor
    FyodorApr 23, 2024

    Didn’t you by any chance find any reasonable alternatives to cover these shadcn tradeoffs?

    • Heunsig
      HeunsigApr 30, 2024

      I'm using PrimeReact for React projects and PrimeVue for Vue projects. It offers numerous components and integrate well with Tailwind CSS.

  • Johnson
    Johnson Apr 24, 2024

    Thank you ! your artice is very helpfull.
    go88.fo

  • Shrijal Acharya
    Shrijal AcharyaJun 6, 2024

    "Once using their component, then from that point onwards it being my component" is the best thing I like about shadcn/ui though. 🙃

  • Inzamam Baig
    Inzamam BaigJul 23, 2024

    Try rizzui, it has basic components and they are extremely easy to integrate.

  • Denny Rachmadi
    Denny RachmadiApr 11, 2025

    completely agree with you

  • Sana Ullah
    Sana UllahApr 14, 2025

    I have to completely disagree with you on this one.

    I've been building a CRM for a client for the past 6 months, React on the frontend, PHP on the backend and switching to shadcn/ui with Tailwind CSS was hands down the best decision I made during this project.

    In all that time, I haven’t encountered a single bug related to the UI components. Not one. Everything has been solid, clean, and reliable.

    And here’s the thing why would I hand over control of my components to some random npm package that might break everything with the next update? With shadcn, once I import a component, it’s mine. Fully customizable. No guessing, no black box magic. I can tweak it however I need to, and that level of control is everything.

    And the best part? At least shadcn doesn’t shove a paywall in your face every time you want a decent looking modal or a damn date picker. 😂 Unlike those "enterprise grade" libraries that hand you a few basic components for free, then suddenly hit you with $499/year per seat just to unlock a dropdown that actually works.

    shadcn gives you the code, says “it’s yours now,” and walks away like a legend. No strings attached. No subscriptions. No bullshit.

Add comment