NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3504 most downloaded on npm
Last release 11 days ago
16 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
277 releases · first in 2020
One column per quarter.
### Bug Fixes * types: close #291
types: update templateRef types
get: accept prop as second argument
new functions - get, set, reactifyObject
createGlobalState: SSR compactiblity
types: add return type for useVModel
@neelance @matias-capeletto @maxma241 @scottbedard @DarkXanteR @anteriovieira @amrbashir @liaoliao666 @yangger6 @Demivan @iGalaxyz @sxzz @sibbng @Eric
@neelance @matias-capeletto @maxma241 @scottbedard @DarkXanteR @anteriovieira @amrbashir @liaoliao666 @yangger6 @Demivan @iGalaxyz @sxzz @sibbng @Ericteen
pausableWatch, debouncedWatch, etc.window, document, etc.isSupported for browsers compatibility check.<details> <summary> <b><code>useTransition</code></b> - named transition presets are removed. Import them from <code>TransitionPresets</code> instead. #190 </summary>
<br>
import { useTransition } from '@vueuse/core'
useTransition(baseNumber, {
duration: 1000,
transition: 'easeInOutCubic',
})
Changed to
import { useTransition, TransitionPresets } from '@vueuse/core'
useTransition(baseNumber, {
duration: 1000,
transition: TransitionPresets.easeInOutCubic,
})
</details>
<details> <summary> <b><code>asyncComputed</code></b> - evaluating state is now passed through arguments instead of returning tuple </summary>
<br>
import { asyncComputed } from '@vueuse/core'
const [state, evaluating] = asyncComputed(async () => {}, {})
Changed to
import { asyncComputed } from '@vueuse/core'
const evaluating = ref(false)
const state = asyncComputed(async () => {}, {}, evaluating)
</details>
<details> <summary> <b><code>useEventListener</code></b> - event target moved from 4th argument to first </summary>
<br>
import { useEventListener } from '@vueuse/core'
useEventListener('click', handler, undefined, document)
Changed to
import { useEventListener } from '@vueuse/core'
useEventListener(document, 'click', handler)
</details>
<details>
<summary>
<b><code>useRefHistory</code></b> - flush now default to pre, returned current renamed to source, hisotry point value renamed to snapshot
</summary>
<br> Refer to docs for more details. </details>
<details>
<summary>
<b><code>useWebWorkerFn</code></b> - workerStatus changed from enum to literal unions
</summary>
<br>
import { useWebWorkerFn, WorkStatus } from '@vueuse/core'
const { workerStatus } = useWebWorkerFn(fn)
workerStatus.value === WorkStatus.running
Changed to
import { useWebWorkerFn } from '@vueuse/core'
const { workerStatus } = useWebWorkerFn(fn)
workerStatus.value === 'RUNNING'
</details>
<details>
<summary>
<b><del><code>useNow</code></del></b> - useNow renamed to useTimestamp with API changes
</summary>
<br>
import { useNow } from '@vueuse/core'
const now = useNow()
Changed to
import { useTimestamp } from '@vueuse/core'
const { timestamp: now, pause, resume } = useTimestamp()
</details>
<details>
<summary>
<b><del><code>useRaf</code></del></b> - dropped in favor of useTimestamp
</summary>
<br> None </details>
<details>
<summary>
<b><code>useTimeout / useInterval</code></b> - returned activated renamed to isActive
</summary>
<br> None </details>
<details>
<summary>
<b><code>useRafFn</code></b> - start / stop renamed to resume / pause
</summary>
<br> None </details>
<details> <summary> <b><code>useXXXObserver</code></b> - API changes </summary> <br>
Refer to docs and types for more details. </details>
<details> <summary>Generated changelog</summary>
</details>
useElementVisibility: set the listener for scrollTarget on mounted and use Ref
useVModel: TypeError: Cannot read property '_events' of undefined
add lazy option to asyncComputed
useWebSocket: return WebSocket instance
### Bug Fixes * router: update timing
useGeolocation: update types for Geolocation in TS 4.1, close #231
### Features * onClickOutside: new function
useTimeout: on stop inifite loop
@neelance @matias-capeletto @maxma241 @scottbedard @DarkXanteR @anteriovieira
@neelance @matias-capeletto @maxma241 @scottbedard @DarkXanteR @anteriovieira
pausableWatch, debouncedWatch, etc.window, document, etc.isSupported for browsers compatibility check.<details> <summary> <b><code>useTransition</code></b> - named transition presets are removed. Import them from <code>TransitionPresets</code> instead. #190 </summary>
<br>
import { useTransition } from '@vueuse/core'
useTransition(baseNumber, {
duration: 1000,
transition: 'easeInOutCubic',
})
Changed to
import { useTransition, TransitionPresets } from '@vueuse/core'
useTransition(baseNumber, {
duration: 1000,
transition: TransitionPresets.easeInOutCubic,
})
</details>
<details> <summary> <b><code>asyncComputed</code></b> - evaluating state is now passed through arguments instead of returning tuple </summary>
<br>
import { asyncComputed } from '@vueuse/core'
const [state, evaluating] = asyncComputed(async () => {}, {})
Changed to
import { asyncComputed } from '@vueuse/core'
const evaluating = ref(false)
const state = asyncComputed(async () => {}, {}, evaluating)
</details>
<details> <summary> <b><code>useEventListener</code></b> - event target moved from 4th argument to first </summary>
<br>
import { useEventListener } from '@vueuse/core'
useEventListener('click', handler, undefined, document)
Changed to
import { useEventListener } from '@vueuse/core'
useEventListener(document, 'click', handler)
</details>
<details>
<summary>
<b><code>useRefHistory</code></b> - flush now default to pre, returned current renamed to source, hisotry point value renamed to snapshot
</summary>
<br> Refer to docs for more details. </details>
<details>
<summary>
<b><code>useWebWorkerFn</code></b> - workerStatus changed from enum to literal unions
</summary>
<br>
import { useWebWorkerFn, WorkStatus } from '@vueuse/core'
const { workerStatus } = useWebWorkerFn(fn)
workerStatus.value === WorkStatus.running
Changed to
import { useWebWorkerFn } from '@vueuse/core'
const { workerStatus } = useWebWorkerFn(fn)
workerStatus.value === 'RUNNING'
</details>
<details>
<summary>
<b><del><code>useNow</code></del></b> - useNow renamed to useTimestamp with API changes
</summary>
<br>
import { useNow } from '@vueuse/core'
const now = useNow()
Changed to
import { useTimestamp } from '@vueuse/core'
const { timestamp: now, pause, resume } = useTimestamp()
</details>
<details>
<summary>
<b><del><code>useRaf</code></del></b> - dropped in favor of useTimestamp
</summary>
<br> None </details>
<details>
<summary>
<b><code>useTimeout / useInterval</code></b> - returned activated renamed to isActive
</summary>
<br> None </details>
<details>
<summary>
<b><code>useRafFn</code></b> - start / stop renamed to resume / pause
</summary>
<br> None </details>
<details> <summary> <b><code>useXXXObserver</code></b> - API changes </summary> <br>
Refer to docs and types for more details. </details>
<details> <summary>Generated changelog</summary>
</details>
useMouseInElement: improve touch
useMouseInElement: crash in firefox
adds fallback for Safari < 14 and older browsers
### Bug Fixes * type error
### Features * new function biSyncRef
types: embeded ResizeObserverSize types, close #154
### Features * new function - useQRCode
docs: story for useMouseInElement
useAxios: added request cancelation
when: update when to align @vue-reactivity/when
Nothing published for this version
useIntersectionObserver stopping
### Features * add useCookies (#148) (#150) (47febb9) * useAxios
Your coding agent can read these notes before it upgrades. Set up the MCP server →