Summary
Build a Vue-native first-party registry — npx vuetify add <component> copies ownable, MIT-licensed Emerald component source into the user's project (shadcn-style "open code"), built on @vuetify/v0 + Paper. Design-system-scoped, with Emerald as the default DS.
Full design spec (private): https://bin.vuetifyjs.com/bins/el91kQ
Local spec: .claude/specs/2026-07-08-first-party-registry-design.md
Locked decisions
- Unit: styled, ownable components (headline) + composable eject (wedge)
- DS axis: DS-scoped registry;
designSystem field load-bearing from day one; Emerald = default (only populated DS until a second lands)
- Delivery: static registry, no gating (Emerald is MIT/free; only its Figma file is commercial)
- Source of truth: co-located in
packages/emerald (vuetifyjs/0); manifest emitted at build
- Eject: own-the-source; copied source visibly imports v0
createX; no headless twins. Composable recipes = v1.1
v1 scope
vuetify init — installs deps, wires the emerald token layer (UnoCSS emeraldTheme + --emerald-* vars), writes vuetify.config
vuetify add <item…> — resolve item + transitive registryDependencies + npm deps, write source, print notes
vuetify add (no args) / vuetify list — interactive select
- Static manifest on CDN; cross-family dependency resolution
- Reconcile existing
add (integrations-only today) → registry-first, eslint stays a reserved keyword
Out of v1: multi-DS population (schema ready), composable recipes, blocks/templates, DS-payload items.
Open items / risks
- Rides vuetifyjs/0 PR #167 (
feat/emerald-paper-design-system) merging — machinery can be built in parallel against a fixture manifest
- Hosting URL / CI —
registry.vuetifyjs.com vs 0.vuetifyjs.com/r/; who owns the publish step
- Post-eject token boundary — does
@paper/emerald export emeraldTheme + --emerald-* for owners who copied source but didn't install the DS package?
- Confirm no consumer depends on
add's current integration-only behavior beyond eslint
Next step
Turn the spec into an implementation plan.
Summary
Build a Vue-native first-party registry —
npx vuetify add <component>copies ownable, MIT-licensed Emerald component source into the user's project (shadcn-style "open code"), built on@vuetify/v0+ Paper. Design-system-scoped, with Emerald as the default DS.Full design spec (private): https://bin.vuetifyjs.com/bins/el91kQ
Local spec:
.claude/specs/2026-07-08-first-party-registry-design.mdLocked decisions
designSystemfield load-bearing from day one; Emerald = default (only populated DS until a second lands)packages/emerald(vuetifyjs/0); manifest emitted at buildcreateX; no headless twins. Composable recipes = v1.1v1 scope
vuetify init— installs deps, wires the emerald token layer (UnoCSSemeraldTheme+--emerald-*vars), writesvuetify.configvuetify add <item…>— resolve item + transitiveregistryDependencies+ npm deps, write source, print notesvuetify add(no args) /vuetify list— interactive selectadd(integrations-only today) → registry-first,eslintstays a reserved keywordOut of v1: multi-DS population (schema ready), composable recipes, blocks/templates, DS-payload items.
Open items / risks
feat/emerald-paper-design-system) merging — machinery can be built in parallel against a fixture manifestregistry.vuetifyjs.comvs0.vuetifyjs.com/r/; who owns the publish step@paper/emeraldexportemeraldTheme+--emerald-*for owners who copied source but didn't install the DS package?add's current integration-only behavior beyondeslintNext step
Turn the spec into an implementation plan.