Skip to content

[Feature Request] First-party registry (vuetify add) — Emerald open-code distribution #24

Description

@johnleider

Summary

Build a Vue-native first-party registrynpx 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

  1. Rides vuetifyjs/0 PR #167 (feat/emerald-paper-design-system) merging — machinery can be built in parallel against a fixture manifest
  2. Hosting URL / CI — registry.vuetifyjs.com vs 0.vuetifyjs.com/r/; who owns the publish step
  3. Post-eject token boundary — does @paper/emerald export emeraldTheme + --emerald-* for owners who copied source but didn't install the DS package?
  4. Confirm no consumer depends on add's current integration-only behavior beyond eslint

Next step

Turn the spec into an implementation plan.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions