vueuse-integrations-skilld
Integration wrappers for utility libraries in @vueuse/integrations v15. ALWAYS use when writing code importing "@vueuse/integrations" or any of its composables (useAxios, useSortable, useFocusTrap, useCookies, useIDBKeyval, useFuse, useChangeCase, useDrauu, useJwt, useNProgress, useQRCode, useAsyncValidator). Consult for debugging, best practices, or modifying @vueuse/integrations, vueuse integrations, vueuse.
How do I install this agent skill?
npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill vueuse-integrations-skilldIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill is a comprehensive documentation resource for the @vueuse/integrations library, providing API references, best practices, and integration examples for various utility libraries such as Axios, Fuse.js, and focus-trap. No security issues or malicious patterns were detected.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
@vueuse/integrations 15.0.0
Add-on to VueUse: reactive wrappers for 12 utility libraries. Requires Vue (^3.5.0) and ships @vueuse/core + @vueuse/shared 15.0.0 as dependencies (package.json:55-70,108-111). ESM-only since v13. Node >= 22 since v15 (package.json:52-54).
References
- Full API surface — every export, signature, option, and default, verified against
dist/. - Usage patterns — per-function recipes and gotchas.
- Migration v14 to v15 — breaking changes and update steps.
Install
npm i @vueuse/integrations
Each wrapper needs its own optional peer dependency installed, otherwise the import fails at runtime:
| Composable | Peer dependency |
|---|---|
useAsyncValidator | async-validator@^4 |
useAxios | axios@^1 |
useChangeCase | change-case@^5 |
useCookies | `universal-cookie@^7 |
useDrauu | `drauu@^1 |
useFocusTrap | `focus-trap@^7 |
useFuse | fuse.js@^7 |
useIDBKeyval | idb-keyval@^6 |
useJwt | jwt-decode@^4 |
useNProgress | nprogress@^0.2 |
useQRCode | qrcode@^1.5 |
useSortable | sortablejs@^1 |
Source: package.json:55-69.
Import rule: use submodules
Import from per-function submodules for tree-shaking (README.md:33-42):
// Preferred
import { useAxios } from '@vueuse/integrations/useAxios'
// Avoid
import { useAxios } from '@vueuse/integrations'
Components import from /component subpaths:
import { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'
import { UseSortable } from '@vueuse/integrations/useSortable/component'
import { UseAsyncValidator } from '@vueuse/integrations/useAsyncValidator/component'
Alias exports were deprecated in v14.0.0; use the original names (https://github.com/vueuse/vueuse/issues/5009).
v15 breaking changes (from v14)
useIDBKeyvalreturns an object{ data, isFinished, isSupported, set }, not a ref (dist/useIDBKeyval.d.ts:46-51).const count = useIDBKeyval('k', 0)no longer compiles; destructuredatainstead.useIDBKeyvalsyncs across tabs viaBroadcastChannelby default; disable withlistenToStorageChanges: false(dist/useIDBKeyval.js:60-76, https://github.com/vueuse/vueuse/pull/5338).- Node.js 20 dropped; requires Node >= 22 (https://github.com/vueuse/vueuse/releases/tag/v15.0.0).
drauupeer range widened to^1 || ^0.4(https://github.com/vueuse/vueuse/pull/5595).
Details and migration code: migration reference.
Quick examples
useAxios
import { useAxios } from '@vueuse/integrations/useAxios'
// Awaits the whole result; rejects on error
const { data, error } = await useAxios('/api/posts')
// Manual trigger without firing immediately
const { execute } = useAxios('/api/posts', { method: 'GET' }, { immediate: false })
// Typed data via initialData (data becomes Ref<T> instead of Ref<T | undefined>)
const { data } = useAxios<User[]>('/api/users', undefined, { initialData: [] })
execute() accepts url, config, or both. Default options: immediate (true only when a url string is passed), shallow: true, abortPrevious: true, resetOnExecute: false (dist/useAxios.js:13-17,35).
useIDBKeyval
import { useIDBKeyval } from '@vueuse/integrations/useIDBKeyval'
const { data: count, set } = useIDBKeyval('my-count', 0)
count.value++ // watched, persisted automatically
await set(10) // explicit write, resolves after the IDB transaction
count.value = null // deletes the key
useSortable
import { useSortable } from '@vueuse/integrations/useSortable'
const list = ref(['a', 'b', 'c'])
const { start, stop, option } = useSortable(el, list, {
watchElement: true, // reinitialize when el appears/disappears (v-if)
})
The default onUpdate handler moves the array element for you (dist/useSortable.js:14-16). Pass your own onUpdate to override; use moveArrayElement(list, from, to, e) for manual moves.
useFocusTrap
import { useFocusTrap } from '@vueuse/integrations/useFocusTrap'
const target = useTemplateRef<HTMLElement>('modal')
const { activate, deactivate, hasFocus } = useFocusTrap(target, { immediate: true })
async function open() {
show.value = true
await nextTick() // wait for v-if to render the element
activate()
}
Container element changes are tracked automatically; the returned object is { hasFocus, isPaused, activate, deactivate, pause, unpause } with no updateContainerElements (dist/useFocusTrap.js:37-66).
useCookies
import { useCookies } from '@vueuse/integrations/useCookies'
const { get, set, remove } = useCookies(['token'], { autoUpdateDependencies: true })
For SSR, build the composable from the request with createCookies(req) (dist/useCookies.d.ts:4-9). In Nuxt, import explicitly to avoid clashing with Nuxt's useCookie.
useFuse
import { useFuse } from '@vueuse/integrations/useFuse'
const search = ref('')
const { results } = useFuse(search, data, {
fuseOptions: { keys: ['title'] },
resultLimit: 10,
matchAllWhenSearchEmpty: true,
})
Remaining wrappers
useChangeCase('hello world', 'camelCase') // writable computed; type must match a change-case *Case export
useDrauu(svgEl, { brush: { color: 'red' } }) // target must be an <svg> element
useJwt(token) // { header, payload } with fallbackValue on decode error
useNProgress() // { isLoading, progress, start, done, remove }
useQRCode('https://vueuse.org') // ShallowRef<string> of a data URL
useAsyncValidator(form, rules, { manual: true }) // thenable; { pass, errors, execute }
See usage patterns before writing non-trivial code with useDrauu, useNProgress, useQRCode, or useAsyncValidator.
Environment limits
- Vue
^3.5.0peer (package.json:68). - ESM-only; no CommonJS build since v13.0.0 (https://github.com/vueuse/vueuse/releases/tag/v13.0.0).
- Node >= 22 (package.json:53).
useQRCoderenders only in the browser (isClientguard, dist/useQRCode.js:16).useIDBKeyvaltab sync needsBroadcastChannel;isSupportedreports it (dist/useIDBKeyval.js:18).
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/skilld-dev/vue-ecosystem-skills/vueuse-integrations-skilld">View vueuse-integrations-skilld on skillZs</a>