I have shipped products built on Bootstrap, Material, Chakra, Radix, Headless UI, MUI, Mantine, and a dozen smaller things.
For my own work I write the components myself. Here is why.
The library tax
Every component library is an opinion about how UI should work. You inherit the opinions whether you wanted them or not — focus rings, animation curves, ARIA shapes, the bundle size of the framework underneath.
Most of the time, the opinions are fine. Sometimes they’re great. Occasionally they’re a five-day debugging session with no good answer at the end.
What I gain
- Every component I have is one I understand.
- The bundle is whatever I decided to ship.
- I can change the focus ring without writing a PR against somebody else’s repo.
What I lose
Speed of the first three days. Accessibility primitives I’d have gotten for free. The comfort of a popular Discord.
I still use libraries on client work. For my own things — small, slow, mine — the trade lands the other way.