The shadcn/ui Dominance in Opus 4.7

Count the import statements in the Claude Opus 4.7 corpus and one name keeps winning: shadcn/ui.

The evidence

From 9,281 Opus 4.7 repos (683,325 files parsed):

Import path Occurrences
@/lib/utils 9,382
@/components/ui/button 6,828
@/components/ui/card 3,684
@/components/ui/badge 3,371
@/components/ui/input 2,100+
@/components/ui/dialog 1,800+
@/components/ui/* (total) ~19,000+
lucide-react 16,221

@/lib/utils is the cn() merge helper that shadcn ships with. Finding it in 9,382 files (over 1 per average repo) is a strong indicator: Opus 4.7 scaffolds shadcn-ui’s folder structure by default, not as an opt-in.

Why it matters

shadcn/ui isn’t a package — it’s a copy-paste component library. Every repo that uses it has its own physical copy of button.tsx, card.tsx, etc. That means:

  • 9,281 repos × ~20 components = ~180,000+ copies of shadcn primitives across the Opus 4.7 corpus
  • The same className={cn(…)} pattern appears everywhere
  • TailwindCSS utility classes are the styling DNA (426 repos pull in tailwindcss as a framework)

For training downstream models, this is both a blessing and a curse:
- Blessing: one normalized UI pattern means the model learns idiomatic shadcn + Tailwind with massive reinforcement
- Curse: duplicate code at scale inflates the corpus and can overfit the model to this specific styling system

The stack underneath

shadcn rarely appears alone. The usual stack in an Opus 4.7 repo:

  • React 18+ — 45,938 imports
  • Next.js App Routernext/server (7K), next/link (6.7K), next/navigation (5.9K)
  • Tailwind CSS — 426 repos, 250 with tailwind.config.ts
  • Vite — 583 repos, 526 with vite.config.ts
  • Vitest — 394 repos (3× more common than Jest)
  • Zod — 3,191 imports (validation)
  • TanStack Query — 3,418 imports (server state)
  • Framer Motion — 3,790 imports (animations)
  • Lucide icons — 16,221 imports

What this means for your product

If you’re generating “build me X” scaffolds and want your output to blend in with the Opus 4.7 ecosystem:
- Default to shadcn/ui + Tailwind + Next.js App Router
- Use Lucide for icons (not Heroicons, not Font Awesome)
- Use Zod for runtime validation (not Yup)
- Use TanStack Query for server state (not Redux, not SWR)
- Use Vitest for tests (not Jest)

This isn’t “the React way” — this is specifically the Opus 4.7 way, and it’s remarkably consistent across thousands of repos.


Numbers are from the live Repobility index, refreshed every 30 min.