"ALWAYS use when writing code importing \"shadcn-vue\". Consult for debugging, best practices, or modifying shadcn-vue, shadcn vue."
Install
npx skillscat add harlan-zw/vue-ecosystem-skills/shadcn-vue-skilld Install via the SkillsCat registry.
unovue/shadcn-vue shadcn-vue
Version: 2.4.3 (Dec 2025)
Deps: @dotenvx/dotenvx@^1.51.1, @modelcontextprotocol/sdk@^1.24.3, @unovue/detypes@^0.8.5, @vue/compiler-sfc@^3.5, c12@^3.3.2, commander@^14.0.2, consola@^3.4.2, dedent@^1.7.0, deepmerge@^4.3.1, diff@^8.0.2, fs-extra@^11.3.2, fuzzysort@^3.1.0, get-tsconfig@^4.13.0, magic-string@^0.30.21, nypm@^0.6.2, ofetch@^1.5.1, ora@^9.0.0, pathe@^2.0.3, postcss@^8.5.6, prompts@^2.4.2, reka-ui@^2.6.1, semver@^7.7.3, stringify-object@^6.0.0, tailwindcss@^4.1.17, tinyexec@^1.0.2, tinyglobby@^0.2.15, ts-morph@^27.0.2, undici@^7.16.0, vue-metamorph@^3.3.3, zod@^3.25.76, zod-to-json-schema@^3.25.0
Tags: radix: 0.11.4 (Feb 2025), latest: 2.4.3 (Dec 2025)
References: Docs — API reference, guides • GitHub Issues — bugs, workarounds, edge cases • GitHub Discussions — Q&A, patterns, recipes • Releases — changelog, breaking changes, new APIs
API Changes
This section documents version-specific API changes — prioritize recent major/minor releases.
BREAKING:
Separatorlabel props removed — labels inSeparatorare no longer supported in Tailwind v3 configurations since v2.2.0 sourceBREAKING:
vue-sonnerv2 update — requires manual update ofToastercomponent for compatibility with the latest version sourceBREAKING: HSL colors converted to OKLCH — default color space changed to OKLCH in v2.0.0, affecting custom CSS variable logic source
BREAKING:
NavigationMenuLinkstate change — now usesdata-activeinstead of previous state indicators to matchreka-uisourceBREAKING:
ChartshowGradientprop — corrected typo in prop name fromshowGradianttoshowGradientin v2.3.0 sourceDEPRECATED:
toastcomponent — officially deprecated in favor ofsonner; currenttoastimplementations should be migrated sourceDEPRECATED:
defaultstyle — phased out in v2.0.0; new projects are initialized withnew-yorkby default sourceNEW: Tailwind v4 support — introduces full integration with the Tailwind v4 engine and
@themedirective sourceNEW:
NativeSelectmodelValue— provides nativev-modelsupport for theNativeSelectcomponent sourceNEW:
Kbdcomponent — keyboard key display component for shortcuts and UI documentation sourceNEW:
Button-groupcomponent — new layout component specifically for grouping related button actions sourceNEW:
Spinnercomponent — added dedicated loading spinner component to the registry sourceNEW:
PinInputgeneric types — enhanced type safety forPinInputallowing custom value types sourceNEW:
data-slotattributes — added to all primitives to simplify granular styling in complex components source
Also changed: Stepper slot props binding fix · Sidebar cookie state · size-* utility support · phosphor and tabler icon support
Best Practices
Prefer CSS variables over utility classes for theming to enable dynamic runtime adjustments and easier maintenance of complex color schemes source
Omit the
backgroundsuffix when using variables for background colors in utility classes; for example,bg-primaryautomatically maps to the--primaryvariable sourceBuild sidebars by composing sub-components (
SidebarProvider,SidebarContent,SidebarGroup, etc.) rather than a single monolithic component to maintain flexibility and customization sourceAvoid the legacy
Formcomponent; useVeeValidateorTanStack Formintegrations for more robust, actively maintained form handling and validation patterns sourceUtilize the
valueUpdaterhelper when managing TanStack Table state in Vue to correctly handle both direct value assignments and functional state transformations source
export function valueUpdater<T extends Updater<any>>(updaterOrValue: T, ref: Ref) {
ref.value = typeof updaterOrValue === 'function'
? updaterOrValue(ref.value)
: updaterOrValue
}Enable automatic sidebar state persistence across page reloads by providing a
storageKeyprop to theSidebarProvidercomponent sourceLeverage the default
cmd+borctrl+bkeyboard shortcuts provided bySidebarProviderto toggle sidebar visibility without manual event listeners sourceTreat the code in
Sidebar*.vue(and other added UI components) as your own project code; you are explicitly encouraged to modify the source to suit specific design needs sourceBuild custom data tables from headless primitives and the basic
<Table />component instead of looking for a pre-built, configuration-heavy "DataTable" component source(experimental) Use the
buildcommand andregistry.jsonschema to create and share your own custom component registries for internal or community use source