Show HN: Basecoat – shadcn/UI components, no React required

99 points by hunvreus 11 hours ago

Basecoat ports the upcoming shadcn/ui v4 [1] to plain HTML + Tailwind (no React):

- Live demo & documentation: https://basecoatui.com

- MIT‑licensed and free: https://github.com/hunvreus/basecoat/

- Works with any backend (Flask, Django, Rails, PHP, etc.) or static site.

- Fully theme‑compatible with shadcn/ui [2].

- Uses a sliver of Alpine.js only for a few interactive bits (e.g. combobox). Swap in your own JS if you prefer.

- Dead simple to use, just drop in a class here and there:

  <button class="btn" data-tooltip="This is a tooltip text">Click me</button>
Why I built it: after moving from a Next.js stack back to Flask + Tailwind + HTMX, I missed shadcn/ui and didn’t want walls of Tailwind classes (like Flowbite or Preline).

Feedback is most welcome: bugs, requests for components, criticism.

[1]: https://v4.shadcn.com/

[2]: https://basecoatui.com/installation/#install-theming

[3]: https://pagescms.org

exiguus 4 hours ago

> Why I built it: after moving from a Next.js stack back to Flask + Tailwind + HTMX, I missed shadcn/ui and didn’t want walls of Tailwind classes (like Flowbite or Preline).

I understand that Next.js can feel bloated, especially when used as a static site generator or within a classic JAMStack setup.

Basecoatui reminds me a bit of Bootstrap during the golden era of Ruby on Rails.

I took a look at the Git repository and tried to find an automated solution to convert shadcn to plain HTML but didn't find anything suitable. Is there a script available for this, or was this done manually?

WilcoKruijer 5 hours ago

Very cool! Are you manually porting all components or are you using some sort of automated process?

replwoacause 8 hours ago

Looks nice! Can you add a CDN option? Would be nice for a quick start to play around.

Also, reminds me of https://franken-ui.dev

  • hunvreus 8 hours ago

    Yep, I've been considering adding a CDN option.

    I think it may be on the heavier side though (~100k).

gsanderson 5 hours ago

Looks great!

One suggestion would be adding a focus trap, such as when a Dialog opens. It's nice to use the tab key to move around the Dialog (inputs and buttons). Currently focus leaves to the page behind. It might be as simple as adding https://alpinejs.dev/plugins/focus#x-trap

czhu12 3 hours ago

Really great! A major downside of moving from SPA's back to vanilla JS is how much you lose in terms of UI components.

I've normally done DaisyUI + Tailwind + Rails but it never feels quite right. Basecoat is a really nice step forward.

I have to imagine the author is planning to charge for a premium package at some point, but given that a huge % of development is spent on UI design, I'd be more than happy to pay for a year of updates.

juddlyon 2 hours ago

There’s a huge need for this, thank you! I build server-rendered marketing sites and there’s a huge gulf between the jQuery and React era.

BenderV 9 hours ago

Awesome. Using Vue/Tailwind, I'm definitely interested in this. Maybe you could try to add examples of integrations with others frameworks? I'll play with it and give you my 2 cents.

diordiderot 2 hours ago

Absolutely love this. Wanted to do this myself but never enough to get started. You're a legend.

rglullis 3 hours ago

Would you be interested in getting rid of Tailwind and have the styling strictly with SASS mixins?

klaussilveira 2 hours ago

This is great! The HTMX community needs more friendly UI kits like this.

o_m 6 hours ago

Why did you decide going old school using Alpine.js instead of using plain vanilla web components?

  • edoceo 4 hours ago

    Alpine is old school now?

    • o_m 29 minutes ago

      I'd say anything new in 2025 that involves working with the DOM that doesn't use web component is a waste. Lately I have been porting some old JS libraries (7+ years old) that still are visually impressive to web components, and in my experience after porting some libraries there is about 30% fewer lines of code. Before web components there was so much work to get things up and running in the DOM. Alpine.js does this behind the scenes, but there isn't really a need for it anymore.

Jonovono 4 hours ago

This is awesome. I did the same and have been using AlpineJS Pines UI library. Been pretty happy with it! But will take a look at this

diiiimaaaa 5 hours ago

So if I understand correctly all JS is custom-written Alpine JS components.

And all CSS is custom classes that use Tailwind @apply, I'm not sure why, can someone elaborate.

jmisavage 5 hours ago

FYI I don't think all of your styles are loading on the page. Tried safari and firefox and it doesn't look right.

anon1094 2 hours ago

Glad you shared this. Looks nice!

urbanisierung 2 hours ago

This is great! Thanks for implementing this!

tegdude 4 hours ago

Thank you! I was searching for this exact thing the other week.

boxed 5 hours ago

Can someone eli5 how this is different from something like bootstrap?

  • wafadaar 5 hours ago

    Bootstrap is a completely different framework with a different design language (one that many may precieve as out of fashion). This library/framework allows folks to use ShadCN (a component library) similar to Bootstrap which is only available through React/Vue/Svelte, etc.. with vanilla HTML.

    • boxed 5 hours ago

      So it's different in visual design, but the goal here is actually to make shadcn more like bootstrap? Hmm.. I think I like that.

drcongo 2 hours ago

This looks great. I've never used React so had never heard of shadcn, and annoyingly I've just got to the point in a side project where pulling out DaisyUI and replacing it with this might be a bit of a chore.

pacmanche 6 hours ago

Now you just need to remove Tailwind

  • hunvreus 6 hours ago

    If I offer a CDN version, it will be Tailwind-free.

    • yawnxyz 5 hours ago

      Yes please! Even if we have to add the tailwind as a CDN, this would be useful — as we don't have to use npm / yarn to build the project anymore.

      (I like building pure html files in alpine)

  • revskill 6 hours ago

    And then ?

    • campak 5 hours ago

      and then... that solves the issue of a Tailwind dep

      • 7bit 4 hours ago

        If deps are a problem for you, don't use basecoat.

jacktheturtle 4 hours ago

this is awesome, thanks for creating it

campak 5 hours ago

I dig it. Love this

zeroq 5 hours ago

>> Works with any backend

Have you fully tested it with Solaris or AIX? /s