Clone shadcn implementation patterns with source-by-source parity. Use when the user says "shadcn parity", asks to mirror shadcn, copy shadcn UX/architecture/tests, or wants more than inspiration.
When the user asks for shadcn parity, treat ../shadcn as the source of
truth for registry behavior and patterns.
Do not give them "inspired by shadcn". Do not invent a Plate-specific model when upstream shadcn already has one.
The rule is simple:
Plate does not fork shadcn CLI. Do not talk about Plate as if it owns a custom installer. Plate owns a registry and template sync layer around the upstream shadcn contract.
If you diverge, say exactly why.
Shadcn owns the contract:
@shadcn/button and other registry prefixescomponents.jsonPlate owns the content and delivery:
apps/www/src/registry/*apps/www/scripts/build-registry.mtsapps/www/public/r and apps/www/public/rd@plate namespace configured in template components.jsontooling/scripts/update-template.shtooling/scripts/prepare-local-template-registry.mjsImportant boundary:
Plate's registry build is custom. The goal is still upstream parity at the item and resolver boundary.
Registry items should stay as close as possible to upstream RegistryItem
shape.
When building or changing Plate registry items:
../shadcn firstRegistry dependency rules:
@shadcn/* when an upstream shadcn item existsDo not fork shadcn CLI to compensate for Plate registry problems. Fix the registry data or the Plate sync tooling instead.
For template installs, shadcn CLI is still the installer. Plate supplies the registry.
Template rules:
templates/*/components.json aligned with shadcn registry semantics@plate in components.json as the install entrypoint for Plate
items../shadcn before inventing a custom ruleFor local template sync:
--local uses local-file mode, not localhostapps/www/public/rdIf a change would make public installs cleaner but would break local-file sync, call that out and fix both sides together.
These are real Plate divergences today. Treat them as constraints, not as a pattern to spread.
apps/www, not from upstream shadcn
infrastructure@plate registry in components.jsonStop and reassess if you are about to do any of this: