R

Rob Austin - Aug 18, 2026

Shadcn Blocks for Vue - A brand new site

We’ve been getting the Vue question for a long time: do you have these blocks for Vue?

Today the answer is yes — on a sister site, shadcnblocksvue.com. It’s a dedicated catalog of 1,400+ blocks built on shadcn-vue, Tailwind, and Vue. Same team, same design bar, same copy-and-own model. Not a tab on shadcnblocks.com.

That was a deliberate choice. Putting Vue on the React site would have been the easy announcement. It also would have been a worse product for both audiences.

It’s not the same library

shadcnblocks.com is built around shadcn/ui for React. That ecosystem has had years to settle: Radix, now Base UI, the official registry, component styles, and a CLI everyone already has in muscle memory.

The Vue side is shadcn-vue — a community port, not a drop-in of the React library. The primitives are different. The registry items are not the same files with a .vue extension. There isn’t full Base UI support. Install looks like this:

npx shadcn-vue@latest add @shadcnblocksvue/hero1

not npx shadcn add @shadcnblocks/hero1.

If we had put a Vue toggle on every React block page, it would have implied the two catalogs are interchangeable. They aren’t. The code, the dependencies, the components.json, and the preview runtime are different products that happen to share a visual language.

We also couldn’t honestly preview Vue inside the React site. Our block pages render React in an iframe. Vue single-file components need a Vue runtime, a different CLI, and a different registry. Dual-stack previews on 1,800 React pages is a lot of machinery for a feature that would still confuse the person who came here for Next.js.

The rest of the product isn’t on Vue yet

shadcnblocks.com is not only blocks. It’s components, pages, templates, themes, the admin kit, the page builder, the IDE extension, and the registry that ties them together.

Vue does not have that yet. We haven’t converted the templates — for the same reasons as the primitives. A marketing site or admin kit is not a mechanical port. It depends on framework conventions, data libraries, and a component registry that still doesn’t match React one-for-one.

Listing Vue blocks in the same explorer as React templates would have created a product that constantly apologizes. “Here’s hero32 in Vue. The landing-page template it came from? React only. The page builder? React only. Base UI? React only.” That’s not a Vue edition. That’s a second-class checkbox.

I’d rather ship a Vue site that is complete for what it is — a block library you can browse, preview, and install — than a half-feature on the React site that trains people to ask for things we can’t give them yet.

Two audiences, two homepages

Almost everyone on shadcnblocks.com is here for React and Next.js. That’s who the SEO, the docs, and the install path are written for. A Vue switch in the main chrome would get curiosity clicks from React developers and dead ends from Vue developers who still have to hunt for Nuxt setup, shadcn-vue, and a registry that doesn’t live here.

Vue developers should land on a site that assumes Vue. Docs that start from Vite or Nuxt. A CLI that is shadcn-vue. A catalog that doesn’t keep saying “not available in Vue.”

React developers should keep a site that doesn’t make them step over another framework to get to the code they came for.

What we’re doing instead

shadcnblocksvue.com is soft-launched. The block catalog is real — over a thousand published Vue blocks, same visual system, install via the shadcn-vue CLI. Templates, pages, and the rest of the kit are not there, and we’re not going to pretend they are.

On this site, if a block has a Vue counterpart, the block page toolbar now has a Vue link. That’s the crosswalk: same hero, same layout, different stack. No Vue tabs in the explorer, no Vue chips on every thumbnail.

If you build with Vue, start on the Vue site. If you build with React, stay here. If you’re evaluating both, the toolbar link is there so you can compare a specific block without us merging two products that aren’t the same product yet.

— Rob