VueUse replaces repeated browser glue with typed composables
A mouse listener looks trivial until an application has to expose reactive coordinates, remove the listener on unmount, survive server rendering, and accept a configurable target. VueUse packages that work into composables such as useMouse, useEventListener, useLocalStorage, and usePreferredDark. Its best-practice guide says side effects follow Vue scopes, so an event listener registered inside a component is cleaned up when that component unmounts. Some functions also return a manual stop handler.
This is far beyond a folder of snippets. Our commit e2d1bf8 checkout contained 1,583 files and about 75,282 lines of source, yet occupied only 4.4 MB before dependencies. Separate workspace packages cover core functions, shared helpers, math, Router, RxJS, Firebase, Electron, Nuxt, and wrappers for other libraries. That split matters: an app can take the core composables without pulling every integration into the same runtime package.
Version 15 requires Vue 3.5 and Node 22
The current @vueuse/core package declares Vue ^3.5.0 as its peer and Node >=22 as its engine. The README directs Vue 2 users to v11 and says v12 ended Vue 2 support. It also says v13 requires Vue 3.3, while v14 and the current v15 require Vue 3.5. A team maintaining an older Vue application cannot treat the latest VueUse as an isolated package update.
For consumers, installation is one npm command. For contributors, our clean pnpm install took 46 seconds, pulled 1,613 packages, and occupied 1,309 MB. The repository uses workspaces and builds several packages, documentation, generated metadata, and test projects. That weight is understandable for the catalog it maintains, but it changes the cost of a quick source patch or a fresh CI worker.
What happened when we ran it
Our 3-CPU, 8 GB sandbox installed the measured commit in 46 seconds. The build succeeded in 41 seconds, and the tests succeeded in 70 seconds. There was no failing assertion or compiler error to explain away. Those results cover the repository commands we ran in a fresh unprivileged container, not the behavior of every composable inside a particular browser and application.
The checkout had 3 CI workflow files, a tests directory, and monorepo workspaces. It had no Dockerfile, which is unsurprising for a frontend library rather than a service. With 1,583 files and roughly 75,282 source lines, the passing test step is meaningful evidence that the measured revision hangs together. It is not a browser support matrix or a promise that an upgrade preserves application semantics.
Tree shaking limits app cost, not contributor cost
The README calls the library fully tree shakeable, and the core package declares sideEffects: false. It ships ESM, type declarations, and an IIFE build for CDN use. Direct imports let a bundler keep the functions an application uses instead of the whole catalog. The core package also stays separate from add-ons that wrap Axios, Firebase, RxJS, Sortable, and other projects whose dependencies should remain optional.
That packaging distinction keeps the 1,309 MB lab install from becoming a claim about an application's bundle. Our number describes the full development workspace after 1,613 packages were installed. VueUse publishes an export-size page for function-level inspection, so a team can check the utilities it imports in its own built artifact. Do that for the app's production bundle; the repository checkout size answers a different question.
Version 15 changes behavior as well as minimum versions
The v15.0.0 release removes templateRef and deprecated timer options. It changes useThrottleFn so trailing calls default to true, makes useIDBKeyval synchronize changes across tabs, and changes how useEventSource handles message events. Those may be sensible changes, but each can alter an existing application's timing or state. Read the release notes before allowing a major-version update through an automated dependency queue.
A passing 70-second suite shows that commit e2d1bf8 meets the project's own checks. Application tests still need to cover the composables a product depends on, especially route state, storage synchronization, reconnects, and timers. An issue opened on September 15 reports that useRouteQuery does not roll its internal state back when navigation is cancelled, and an open pull request addresses that case. The quick response is a good health signal; the report is also a reminder that wrappers inherit edge cases from the APIs they coordinate.
September releases and issue work support adoption
GitHub recorded a push on September 19, 2026, three days after v15.0.0 was published. The repository had 22,374 stars and 375 combined issues and pull requests when fetched. That combined count is not a bug total. Recent open work included route cancellation, TypeScript documentation, pointer cancellation, and browser API handling, which shows active maintenance across both code and docs.
VueUse earns its place when a Vue 3.5 team keeps rewriting cleanup, reactive storage, media queries, or network state. Our 41-second build and 70-second test run make the current source a credible dependency, while the v15 changes set the operating rule: import narrowly, test the behaviors your app uses, and read each major release before updating.

