npx skills add https://modelscope.cn/skills/@harlan-zw/vue-skilld
skilld-dev/vue-ecosystem-skills
vue-skilld
The progressive JavaScript framework for building modern web UI. ALWAYS use when editing or working with *.vue files or code importing \"vue\". Consult for debugging, best practices, or modifying vue, core.
Installation
npx skills add skilld-dev/vue-ecosystem-skills --skill vue-skilld
Similar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Browser automation CLI for AI agents. Use when the user needs to interact with websites, includ…
810.4K installsDebug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe …
568.9K installsPre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure…
567.7K installsPostgres best practices maintained by Supabase, for Postgres running anywhere. Load this skill …
391.6K installsAlso in this package
Other skills from skilld-dev/vue-ecosystem-skills · top by installs.
npx skills add skilld-dev/vue-ecosystem-skills
More details
Agent compatibility
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Also listed on
Alternate registries and mirrors of this skill.
Repository health
main
Skill metadata
Parsed from SKILL.md frontmatter.
More metadata
- version
- 3.6.0-beta.10
- generated_at
- 2026-04-20
- references_synced_at
- 2026-04-20
Package contents
Files included with this skill beyond the listing page.
-
skill md
SKILL.md8,779 B -
docs
SUMMARY.md221 B
History
- First seen on skills.sh
- First recorded snapshot · 313 installs
SKILL.md
vuejs/core [email protected]
Tags: csp: 1.0.28-csp, v2-latest: 2.7.16, legacy: 2.7.16
References: [Docs](./references/docs/_INDEX.md)
API Changes
This section documents version-specific API changes — prioritize recent major/minor releases.
- NEW:
createVaporApp()(experimental) — new in v3.6, creates a Vapor-mode app instance without pulling in the Virtual DOM runtime; usecreateApp()for standard VDOM apps [source](./references/releases/v3.6.0-alpha.1.md#about-vapor-mode)
- NEW:
vaporInteropPlugin(experimental) — new in v3.6, install into a VDOMcreateApp()instance to allow Vapor components inside VDOM trees; without it, Vapor SFCs cannot be used in VDOM apps [source](./references/releases/v3.6.0-beta.1.md#about-vapor-mode)
- NEW:
<script setup vapor>attribute (experimental) — new in v3.6, opts an SFC into Vapor Mode compilation; only works with<script setup>; does not support Options API,app.config.globalProperties, orgetCurrentInstance()[source](./references/releases/v3.6.0-beta.1.md#opting-in-to-vapor-mode)
- NEW:
useTemplateRef(key)— new in v3.5, preferred replacement for plainrefvariable names matchingref="key"attributes; supports dynamic string IDs at runtime unlike the old static-only pattern [source](./references/releases/blog-3.5.md#usetemplateref)
- NEW:
useId()— new in v3.5, generates stable unique IDs per component instance guaranteed to match between SSR and client hydration; replaces manual ID management for form/accessibility attributes [source](./references/releases/blog-3.5.md#useid)
- NEW:
onWatcherCleanup(fn)— new in v3.5, registers a cleanup callback inside awatchorwatchEffectcallback; replaces theonCleanupparameter pattern and can be called from nested functions [source](./references/releases/blog-3.5.md#onwatchercleanup)
- NEW:
hydrateOnVisible(),hydrateOnIdle(),hydrateOnInteraction(),hydrateOnMediaQuery()— new in v3.5, lazy hydration strategies passed todefineAsyncComponent({ hydrate: hydrateOnVisible() }); without thehydrateoption, async components hydrate immediately [source](./references/releases/blog-3.5.md#lazy-hydration)
- NEW:
defineModel()stable — promoted from experimental in v3.3 to stable in v3.4; automatically declares a prop and returns a mutable ref; replaces the manualdefineProps+defineEmits('update:modelValue')pattern [source](./references/releases/blog-3.4.md#definemodel-is-now-stable)
- NEW:
definePropsdestructure with defaults — stabilized in v3.5 (was experimental in v3.3);const { count = 0 } = defineProps<{ count?: number }>()replaceswithDefaults(defineProps<...>(), { count: 0 }); destructured vars must be wrapped in getters to pass towatch()or composables [source](./references/releases/blog-3.5.md#reactive-props-destructure)
- BREAKING:
@vnodeXXXevent listeners — removed in v3.4, are now a compiler error; use@vue:XXXlisteners instead (e.g.@vue:mounted) [source](./references/releases/blog-3.4.md#other-removed-features)
- BREAKING: Reactivity Transform (
$ref,$computed, etc.) — removed in v3.4 after being deprecated in v3.3; was experimental and distinct from the now-stable props destructure feature; use Vue Macros plugin to continue using it [source](./references/releases/blog-3.4.md#other-removed-features)
- BREAKING: Global
JSXnamespace — no longer registered by default since v3.4; setjsxImportSource: "vue"intsconfig.jsonor importvue/jsxto restore it; affects TSX users only [source](./references/releases/blog-3.4.md#global-jsx-namespace)
- BREAKING:
app.config.unwrapInjectedRef— removed in v3.4; ref unwrapping ininject()is now always enabled and cannot be disabled [source](./references/releases/blog-3.4.md#other-removed-features)
- NEW:
<Teleport defer>prop — new in v3.5, mounts the teleport after the current render cycle so the target element can be rendered by Vue in the same component tree; requires explicitdeferattribute for backwards compatibility [source](./references/releases/blog-3.5.md#deferred-teleport)
Also changed: defineSlots<{}>() macro NEW v3.3 for typed slot declarations · defineOptions({}) macro NEW v3.3 to set component options without a separate <script> block · toRef(() => getter) enhanced in v3.3 to accept plain values and getters · toValue() NEW v3.3 normalizes values/getters/refs to values (inverse of toRef) · v-bind same-name shorthand NEW v3.4 (:id shorthand for :id="id") · data-allow-mismatch attribute NEW v3.5 to suppress hydration mismatch warnings · useHost() / useShadowRoot() NEW v3.5 for custom element host access · v-is directive REMOVED v3.4 (use is="vue:ComponentName" instead) · reactivity system alien-signals refactor in v3.6 improves memory usage with no API changes
Best Practices
- Use reactive props destructure (3.5+) with native default value syntax instead of
withDefaults()— destructured variables are reactive and the compiler rewrites accesses toprops.xautomatically. When passing to composables orwatch, wrap in a getter:watch(() => count, ...)[source](./references/docs/api/sfc-script-setup.md#reactive-props-destructure)
- Use
toValue()in composables to normalizeMaybeRefOrGetter<T>arguments — handles plain values, refs, and getter functions uniformly so callers can pass any form without the composable caring [source](./references/docs/api/reactivity-utilities.md#tovalue)
- Use
onWatcherCleanup()(3.5+) instead of theonCleanupcallback parameter inwatchandwatchEffect— it can be called from any helper function in the sync execution stack, not just the top-level callback, making cleanup logic easier to extract [source](./references/docs/api/reactivity-core.md#onwatchercleanup)
- Use
useTemplateRef()(3.5+) instead of a plainrefwith a matching variable name for template refs — supports dynamic ref IDs and provides better IDE auto-completion and type checking via@vue/language-tools2.1 [source](./references/docs/api/composition-api-helpers.md#usetemplateref)
- Use
useId()(3.5+) for form element and accessibility IDs in SSR apps — generated IDs are stable across server and client renders, preventing hydration mismatches. Avoid calling insidecomputed()as it can cause instance conflicts [source](./references/docs/api/composition-api-helpers.md#useid)
- Use
shallowRef()/shallowReactive()for large immutable data structures — deep reactivity tracks every property access via proxy traps; shallow variants avoid this overhead while still reacting to root.valuereplacement [source](./references/docs/guide/best-practices/performance.md#reduce-reactivity-overhead-for-large-immutable-structures)
- Pass computed values directly as
activeprops rather than IDs for comparison — child components re-render when any received prop changes, so passing a stable boolean avoids re-rendering every list item when only one item's active state changes [source](./references/docs/guide/best-practices/performance.md#props-stability)
- When a computed returns a new object on every evaluation, accept
oldValueand return it unchanged when data is equivalent — avoids unnecessary downstream effect triggers since Vue 3.4+ only triggers effects when the computed value reference changes [source](./references/docs/guide/best-practices/performance.md#computed-stability)
- Use
defineAsyncComponentwith a lazy hydration strategy (3.5+) for SSR —hydrateOnVisible(),hydrateOnIdle(),hydrateOnInteraction(), andhydrateOnMediaQuery()are tree-shakable and defer hydration until the component is actually needed
import { defineAsyncComponent, hydrateOnVisible } from 'vue'
const AsyncComp = defineAsyncComponent({
loader: () => import('./Comp.vue'),
hydrate: hydrateOnVisible()
})
[source](./references/docs/guide/components/async.md#lazy-hydration)
- (experimental) Opt in to Vapor Mode per-component with
<script setup vapor>when targeting performance-sensitive UI — Vapor avoids Virtual DOM diffing entirely and achieves Solid/Svelte 5 benchmark parity, but does not support Options API,app.config.globalProperties, orgetCurrentInstance(). UsevaporInteropPluginto mix Vapor and VDOM components in an existing app [source](./references/releases/v3.6.0-beta.1.md#about-vapor-mode)