Campfire
Registry

Registry

shadcn-compatible primitives, blocks, and kits

Campfire distributes layouts and components through a shadcn-compatible registry — no custom format, no hidden runtime dependencies. Items are copied as source straight into your repo:

components/   registry components install here
layouts/      registry layouts install here
lib/          shared helpers (cn) install here

There is no special registry folder — installed files sit next to your own and are yours to edit. If an installed file would collide with one of yours, review the diff shadcn shows before accepting the overwrite.

Installing

camp add metric-card
camp add problem-solution

Bare names resolve to this site: /r/<name>.json. Anything shadcn-compatible works too:

bunx shadcn@latest add https://campfire-deck.vercel.app/r/metric-card.json

Components

Small reusable primitives, installed under components/:

Blocks

Narrative patterns — a layout plus its supporting components, installed under layouts/ (and components/ for anything they pull in):

Kits

Starter packs that compose multiple blocks (planned, not v1).

Principles

Shipped items follow the components.build standard for composable components:

  • Native first. Every component wraps one element and extends its attributes (ComponentProps<"div">), so anything HTML accepts, the component accepts.
  • Overridable styling. Base classes merge with your className through cn (clsx + tailwind-merge), user classes win. The utils item provides cn; every item depends on it.
  • Stable styling hooks. Each part exposes a data-slot attribute (data-slot="metric-card-value"), so theme.css can restyle items without touching their source. Variants surface as data attributes too (data-tone on Callout).
  • No naming conflicts. Props never shadow native attributes — items use heading instead of title, affiliation instead of role.
  • Exported types. Every item exports its <Name>Props type.

And the registry itself:

  • The registry distributes source code into your repo.
  • Installation behavior is exactly shadcn's — camp add only resolves nicer names.
  • Item metadata uses shadcn's schema: files[].target places code under layouts/ and components/; registryDependencies pulls in supporting items.

On this page