# Vue 3.5 Composition and Reactivity

`vue/vue-3-5` · Skill · v1.0.0

Current Vue 3.5 composition API, reactivity and component contracts, and the Vue 2 and early Vue 3 habits that silently break them.

Teaches an agent the Vue 3.5 APIs as they behave in vue 3.5.44: reactive props destructure and why a destructured prop passed to a function or composable loses reactivity, composables that take MaybeRefOrGetter and read it with toValue() inside an effect, watch semantics (shallow refs, numeric deep, once, pause/resume, onWatcherCleanup and its synchronous-only rule, cleanup when an effectScope stops), defineModel (local mode without v-model, modifiers and get/set transforms, factory defaults, never mutating an array or object model in place), declared emits and listener fallthrough, $attrs, useTemplateRef, defineExpose, useId with app.config.idPrefix for SSR-stable ids, data-allow-mismatch, provide/inject with typed keys, and how to test all of it with Vitest and @vue/test-utils. Every behaviour was run against vue 3.5.44.

## Verdict

- level: **submitted** — In the catalog, not yet checked for this digest.
- uplift: **untested** — No runs exist for this digest.
- digest: `sha256:3489e2ebf68a6ff04dbca5aaf9c07fc97a6ffcf276c5756a1c0af8a2a50c289a`

## Uplift runs

None for this digest. Untested is not the same as useless: nobody has measured it yet.

## Security

No checks recorded for this digest.

## Compatibility

| agent | targeted | compiled | evaluated |
| --- | --- | --- | --- |
| Claude Code | yes | no record | no record |
| Codex | yes | no record | no record |
| Cursor | yes | no record | no record |
| GitHub Copilot | yes | no record | no record |
| Gemini CLI | yes | no record | no record |
| OpenCode | yes | no record | no record |

## Permissions

- network: none
- shell: npm ls, vitest, vue-tsc, rg
- filesystem: write
- env: none

## Files

- `SKILL.md` 17853 B sha256:38fc8b763bef5f425a53fce91c6ee1f32a0469abe48cf941c2fe3f0b46de0d73
- `references/components-and-v-model.md` 9725 B sha256:6862260e73ed1032971bdd0caa8cc745f5950b57ae8d6b4e64e60df5419f77a9
- `references/reactivity-and-watchers.md` 7281 B sha256:d33ebf41ee7091aa841de197a1e91944ed33564fd714354e0a0df8ddae5448d4
- `references/sources.md` 4023 B sha256:0e3ef94ebe0b1bde60fdf5756951312dec524ff6e356ce797ddeb78204b57202
- `references/testing.md` 5209 B sha256:ab2853bf80aafdc67449cece7b17177aa278ea35d4c6ea73ed759fd526eeb8ce
- `references/vue-2-and-early-3-habits.md` 6320 B sha256:fe186f94f4342ce27a07b20fe752ed7144ba626e74383f7b06e8f03bf2f54825

## Limitations

- Written and verified against vue 3.5.44 (npm latest on 2026-11-01). Vue 3.6 (Vapor mode, alien-signals reactivity) is a release candidate and is not covered.
- Nuxt 4, Pinia and Vue Router are out of scope beyond using composables inside an effectScope; their data-fetching and store APIs have their own rules.
- The proof suite runs in jsdom with @vue/test-utils, so it measures behaviour, hydration warnings and SSR markup but not layout, transitions or real browser focus.
- The Vue 2 migration notes cover the behaviour changes that fail silently in components; the @vue/compat build and its per-feature flags are not taught.
- Type-level guidance (generic components, defineSlots typing) is brief; run vue-tsc for the final word on types.

## Install

```sh
npx sigil add vue/vue-3-5 --agent claude-code,codex,cursor
```

Source: https://github.com/dgesteves/sigil/tree/5cb851d5b2f2f14446ddf631ef5e91bf9d3263dd/catalog/skills/vue/vue-3-5