mrkeyoor.com_
Sun 20 Sept 06:59 UTC
Webevaluationupdated 20 Sept 2026

vueuse review

VueUse is a TypeScript library of Vue composables for browser APIs, reactive state, events, storage, networking, and other common frontend jobs. It saves Vue developers from repeatedly writing lifecycle cleanup and reactive wrappers around the same platform features.

Verdict

Our VueUse run installed 1,613 packages and used 1,309 MB, then completed its build in 41 seconds and its tests in 70 seconds with no failure. Use it for a Vue 3.5 application when repeated browser and lifecycle plumbing is costing more than a dependency would. Keep major upgrades as explicit migration work because v15 changed runtime behavior as well as minimum versions.

We ran it

Lab card: what happened when we ran vueuseScreenshot of vueuse (vueuse.org)
Install✓ · 46s1613 packages · 1309 MB
Build✓ · 41s
Tests✓ · 70sran, no count parsed
Repo1583 files~75,282 lines of source · 4.4 MB · 3 CI workflows · tests dir

Answers from our run

Does vueuse build from source?

Dependencies installed in 46 seconds (1613 packages), and the build succeeded in 41 seconds. We cloned commit e2d1bf8 into a clean Debian container with 3 CPUs and no project-specific setup.

Do vueuse's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use vueuse?

Vue 2 applications that need the current release: the README sends those users to the older v11 line.

What are the alternatives to vueuse?

Vue.js Core, Pinia, React Use. Our VueUse run installed 1,613 packages and used 1,309 MB, then completed its build in 41 seconds and its tests in 70 seconds with no failure.

Setup4/5One app install, but the contributor tree occupies 1,309 MB
Docs5/5Interactive examples cover functions, cleanup, SSR, and add-ons
Community5/522,374 stars with pushes and issue activity in September 2026
Maturity5/5Version 15 shipped with a passing build and test run

Who it’s for

Vue 3.5 teams that want maintained composables for browser and reactivity work.
Nuxt developers who want auto-imported utilities through the documented module.
TypeScript projects that benefit from typed refs, configurable targets, and automatic cleanup.
Contributors willing to work in a large pnpm monorepo with browser and server test projects.

Who it’s NOT for

Vue 2 applications that need the current release: the README sends those users to the older v11 line.
Projects pinned to Vue 3.3 or 3.4, or build systems pinned to Node 20: v15 requires Vue 3.5 and Node 22.
Teams expecting major upgrades to preserve behavior: v15 changes throttle trailing calls, EventSource message handling, and IndexedDB cross-tab syncing.
Contributors with a tight disk budget: our clean checkout installed 1,613 packages and occupied 1,309 MB.

Setup reality

Our sandbox installed 1,613 pnpm packages in 46 seconds and used 1,309 MB on disk. The build passed in 41 seconds, and the tests passed in 70 seconds. The 4.4 MB checkout contained 1,583 files and about 75,282 lines of source.

Application setup is one @vueuse/core install, with separate packages for Nuxt, Router, RxJS, Firebase, Electron, and third-party integrations. The current package requires Vue 3.5 or newer and Node 22 or newer. A CDN build is also documented.

The repository is a pnpm workspace, so contributing is much heavier than consuming a tree-shaken function. Version 15 removes templateRef, replaces deprecated timer options, and changes several defaults or event behaviors. Those are application migration concerns even though our build and tests passed.

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.

Alternatives

ProjectWhat it isPick it when
Vue.js Core gh↗Vue's own reactivity and lifecycle APIs are enough to write small local composables.pick this instead when you need one or two narrow helpers and want to own their behavior and upgrade surface.
PiniaVue's store library handles shared application state with DevTools support.pick this instead when the problem is durable business state rather than reactive access to browser APIs.
React UseA large hook collection for React applications.pick this instead when the application uses React and needs hooks rather than Vue composables.

What people are saying

  1. [velocity-scout] vueuse/vueuse

Sources

  1. VueUse repository and README
  2. VueUse v15.0.0 release notes
  3. VueUse core package manifest
  4. VueUse best practices
  5. useRouteQuery cancelled-navigation report

More web reviews

react-redux · anime · element-plus · recharts · WebKit · js-cookie · the whole board →