NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2948 most downloaded on npm
> Plugins API for easier DevTools integrations.
Last release 3 days ago
01 Oct 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
155 releases · first in 2020
One column per quarter.
Solid border for settings button - by @webfansplz (4fb12)
Switch component a11y - by @vansh-nagar in #1141 (dd771)Vue DevTools v9 is a rewrite of the Vue debugging surface on top of Vite DevTools and Devframe by @webfansplz (4df831) . It keeps the familiar Compone
Vue DevTools v9 is a rewrite of the Vue debugging surface on top of Vite DevTools and Devframe by @webfansplz (4df831). It keeps the familiar Components / Pages / Timeline / Pinia / Router / Graph workflow, and ships as a Vite plugin plus a Chromium extension.
See the Migration Guide for setup and plugin API changes.
8.3.0+ and a project-level @vitejs/devtools install with devtools: true in the Vite configvite-plugin-vue-devtools; register vueDevTools() as a Vue dock onlycomponentInspector and launchEditor. Component inspection lives in the Vue dock; open-in-editor is owned by @vitejs/devtools via vite:core:open-in-editorbuiltinViteDevTools to devtools.builtinDevTools, and move embeddedVisibility / dockPreferences under Vite's devtools config. VueDevToolsDockPreferences is no longer exportedaddCustomTab, addCustomCommand, and removeCustomCommand. Use Devframe ctx.docks.register() and ctx.commands.register() insteadtabId + frameId + documentId) and per-frame runtimes, close #687, #745, #984-negative, tag:, file:, and is:favorite, close #304, #801, #1001, #1002Ctrl/Cmd/Alt+K) shared across the Vite dock and Chrome panelundefined / "undefined", null, NaN/Infinity, BigInt, Symbol, Date, RegExp, Error, functions, Map/Set, Proxy, cycles, and class instances, close #809, #906, #953, #1087, #1100_custom.actions, timeline layers, and plugin settings, close #761, #832, #918appendTo accepts string | RegExp | Array<string | RegExp>; inject the client at most once per module, close #586capabilities.openInEditor, close #746, #774, #1093<dialog> elements, close #567, #892triggerRef) for stale/lost-reactivity debugging, close #1041not accessed without running the getter, close #535$tempN) exposes the live runtime handle instead of a truncated previewrole=tree / treeitem with roving focus, close #10180 / O / 1 / I / l on component tags, close #1124mouseover uses capture so nested components still highlight through @mouseover.stop, close #487devtoolsRawSetupState / setupState / expose() when setup() returns a render function or JSX defineComponent, close #376, #853base for dock/client routes, close #803, #824, #914, #1013vite-plugin-inspect / vite-hot-client / vite-dev-rpc, close #1068Remaining validation: #791 still needs representative large-app interaction checks; #997 is addressed by deferred collection and layer controls, not fully deferred runtime injection. Browser/network/GPU and long-session reports (#709, #806, #817, #835, #909) remain outside the closure claims. Manual component exclusion (#898) and Timeline JSON export (#1043) are not implemented here.
Sample: 11,112 Vue components in a tree with 10 children per branch, plus 10,000 root-state records. Latest v8 main vs v9, on Apple M3 Pro / 18 GB RAM / macOS, headless Chrome, Node.js 24, and the same Vue 3.5 runtime. Timings are medians of five runs after warm-up.
| Measurement | v8 | v9 |
|---|---|---|
| Open panel → component tree visible | 540.4ms | 188.9ms |
| Batch update → inspected state painted | 810.9ms | 174.8ms |
| Main-thread CPU during batch update | 385.2ms | 111.7ms |
| Mount 11,111 components → tree visible | 694.0ms | 298.3ms |
| Select root component → state painted | 98.4ms | 87.6ms |
| Expand one branch → children painted | 66.9ms | 100.2ms |
| Stop Timeline recording during event flood | 3,577.8ms | 31.1ms |
| Initial tree payload | 2,064,622 bytes | 2,187 bytes |
| Initial state payload | 1,480,712 bytes | 10,217 bytes |
UI timings use the real iframe panels and include RPC, deferred refresh, and painting, rather than stopping at Vue nextTick. Main-thread CPU covers the same 1.1-second update window. Mount starts from an empty tree; component tests have Timeline recording off.
Timeline uses the same scheduled producer (250 emits every 50ms) and each version's default collection policy. This measures stop-button responsiveness, not equal event throughput: v9 drops excess events, while v8's producer also slows under load.
Initial payloads measure the first response, not full-tree expansion: v9 returns 12 tree nodes and lazy state previews. This reduces initial work but can make an individual branch expansion slower, as shown above.
core : Avoid bundling Vite and Vue Router types in declarations - by @webfansplz (8f51a)
devtools-api : Add no-op stub under node export condition - by @danielroe in #1114 (435e6)
No significant changes View changes on GitHub
No significant changes
kit,shared : Mark packages side-effect-free for treeshaking - by @danielroe in #1108 (2b9ce)
vite : Align module field with emitted ESM output - by @itosa-kazu in #1106 (4720c)
Bump vite-plugin-vue-inspector to support vapor app - by @webfansplz in #1096 (784c3)
vite-plugin-vue-inspector to support vapor app - by @webfansplz in #1096 (784c3)devtools-background.js as type="module" - by @skirtles-code in #1072 (eed09)overlay : Enhance style inspector button ux when enabled - by @skirtles-code in #1069 (0e32d)
toggleEnabled to allow exiting in spector mode - by @SaKaNa-Y in #1067 (ace74)No significant changes View changes on GitHub
No significant changes
Show VNode lifecycle events as built-in - by @skirtles-code in https://github.com/vuejs/devtools/issues/1036 (35de5)
built-in - by @skirtles-code in https://github.com/vuejs/devtools/issues/1036 <samp>(35de5)</samp>displayName for functional components - by @skirtles-code in https://github.com/vuejs/devtools/issues/1046 <samp>(20efd)</samp>computed and inject leak via mixins - by @skirtles-code in https://github.com/vuejs/devtools/issues/1050 <samp>(ecca7)</samp>Add IIFE and ESM browser builds - by @skirtles-code in https://github.com/vuejs/devtools/issues/1024 (62fe5)
Dts exports, close #1007 - by @webfansplz in https://github.com/vuejs/devtools/issues/1007 (aa1f5)
Enhance node import edge recognizability - by @LittleSound in https://github.com/vuejs/devtools/issues/993 (94974)
Compatible with node25, close #977 - by @webfansplz in https://github.com/vuejs/devtools/issues/977 (5d97b)
execa - by @43081j in https://github.com/vuejs/devtools/issues/964 <samp>(16fed)</samp>Remove vulnerable unmaintained ip package - by @segevfiner and @webfansplz in https://github.com/vuejs/devtools/issues/830 (f64d3)
Support for keyboard on component tab - by @mauryapari in https://github.com/vuejs/devtools/issues/877 (34f99)
Drop support for vite < 6 - by @webfansplz (f36ec)
vite-plugin-inspect, close #923 - by @webfansplz in https://github.com/vuejs/devtools/issues/923 <samp>(72566)</samp>kit,shared,api : Mark packages side-effect-free for treeshaking - by @webfansplz (5a0df)
Compatible with node v25.2 - by @webfansplz (9edc5)
Compatible with node v25 - by @webfansplz (ebdcf)
kit: Support devtools in iframe - by @alexzhang1030 in https://github.com/vuejs/devtools/issues/886 (e8ea5)
client: Set components page as default page - by @webfansplz (f4729)
components page as default page - by @webfansplz <samp>(f4729)</samp>*No significant changes* ##### View changes on GitHub
No significant changes
vite: Pin vite-plugin-inspect - by @webfansplz (1571b)
vite-plugin-inspect - by @webfansplz <samp>(1571b)</samp>Resolve Map nested object modification - by @rbgmulmb in https://github.com/vuejs/devtools/issues/799 (60fb4)
Map nested object modification - by @rbgmulmb in https://github.com/vuejs/devtools/issues/799 <samp>(60fb4)</samp>api: Allow treeshaking - by @posva in https://github.com/vuejs/devtools/issues/795 (81cac)
client: Add vue SFC custom tab - by @FliPPeDround in https://github.com/vuejs/devtools/issues/775 (59996)
Respect preferred-reduce-motion - by @alexzhang1030 in https://github.com/vuejs/devtools/issues/744 (e5e58)
client: XSS vulnerability in components tab - by @xuzuodong in https://github.com/vuejs/devtools/issues/726 (77494)
vite-plugin-inspect for both Vite 5 and 6 - by @peterpeterparker in https://github.com/vuejs/devtools/issues/730 <samp>(c8cfd)</samp>vite: Pin vite-plugin-inspect to be compatible with both vite 5 & 6, close #716 - by @webfansplz in https://github.com/vuejs/devtools/issues/716 (39b2
vite-plugin-inspect to be compatible with both vite 5 & 6, close #716 - by @webfansplz in https://github.com/vuejs/devtools/issues/716 <samp>(39b21)</samp>Support vite6 - by @webfansplz (36ceb)
Add null-safety check when accessing pinia store state, close #707 - by @webfansplz in https://github.com/vuejs/devtools/issues/707 (2fd1b)
Proxy value - by @FoundTheWOUT and Alex in https://github.com/vuejs/devtools/issues/701 <samp>(4539e)</samp>Refine bg/text color for dark mode - by @alexzhang1030 and @webfansplz in https://github.com/vuejs/devtools/issues/686 (9e8ae)
Component highlighter - by @webfansplz in https://github.com/vuejs/devtools/issues/683 (550bc)
select-none on StateViewer - by @alexzhang1030 in https://github.com/vuejs/devtools/issues/675 <samp>(dc075)</samp>Filter tree/states for custom inspectors - by @alexzhang1030 in https://github.com/vuejs/devtools/issues/664 (dce7c)
kit: Add null-safety check to detect vue reactive linked list node - by @webfansplz in https://github.com/vuejs/devtools/issues/661 (c3f19)
Add node tags for component tree - by @webfansplz in https://github.com/vuejs/devtools/issues/655 (82509)
timeline: Hide switcher in internal timeline panel and exclude internal timeline events to prevent triggering - by @webfansplz (2623a)
Debounce sending of inspector tree/state updates - by @webfansplz (588d9)
Improve UX for toggling timeline layer enabled state, #609 - by @webfansplz in https://github.com/vuejs/devtools-next/issues/609 (44eb9)
kit: Detect vue doubly-linked node to avoid circular references on encoding - by @webfansplz in https://github.com/vuejs/devtools-next/issues/638 (7ce
kit: Support non localStorage env for timeline storage, closes #635 - by @webfansplz in https://github.com/vuejs/devtools-next/issues/635 (0573f)
localStorage env for timeline storage, closes #635 - by @webfansplz in https://github.com/vuejs/devtools-next/issues/635 <samp>(0573f)</samp>Add not-recording tips for timeline tab - by @webfansplz (7e7b2)
Timeline panel - by @webfansplz in https://github.com/vuejs/devtools-next/issues/627 (d1e3a)
index.vue components - by @niksy in https://github.com/vuejs/devtools-next/issues/628 <samp>(58195)</samp>isInElectron env - by @danielj247 in https://github.com/vuejs/devtools-next/issues/629 <samp>(60dea)</samp>overlay: Add credentialless attribute for iframe - by @hrynevychroman in https://github.com/vuejs/devtools-next/issues/614 (53add)
credentialless attribute for iframe - by @hrynevychroman in https://github.com/vuejs/devtools-next/issues/614 <samp>(53add)</samp>Add migration logs for Vue2 app - by @webfansplz in https://github.com/vuejs/devtools-next/issues/603 (550f9)
applet: Intergration ui package's unocss style - by @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/598 (b89e6)
*No significant changes* ##### View changes on GitHub
No significant changes
*No significant changes* ##### View changes on GitHub
No significant changes
applet: Add missing imports - by @webfansplz (0141d)
Add route-meta for pages - by @wzc520pyfm, Alex and @webfansplz in https://github.com/vuejs/devtools-next/issues/560 (34498)
Add multiple-app toggle feature in components panel - by @webfansplz (f6c9b)
exposeInstanceToWindow work failed in no-browser env - by @naiveeee and gaozhao <samp>(ba8fd)</samp>extension: Support open-in-editor - by @webfansplz in https://github.com/vuejs/devtools-next/issues/543 (05833)
ObjectRefImpl and GetterRefImpl - by @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/563 <samp>(ad642)</samp>Group assets in duplicate paths between root and public by relativePath - by @LoTwT in https://github.com/vuejs/devtools-next/issues/514 (12614)
client: Improve Vue api icon on CommandPalette - by @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/501 (0e780)
Use Ic icon on custom inspector/tab/command - by @webfansplz, Alex and @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/466 (bc97b)
DevToolsHeader component - by @reslear in https://github.com/vuejs/devtools-next/issues/474 <samp>(a54f7)</samp>RenderCode component style - by @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/482 <samp>(f8563)</samp>dockingPanel dropdown on window resize - by @LukerSpringtree and 陆德靖 in https://github.com/vuejs/devtools-next/issues/479 <samp>(37f2d)</samp>core: Add vue as peerDependencies - by @webfansplz (8e143)
browser-ext: Update content_security_policy to support wasm - by @alexzhang1030 in https://github.com/vuejs/devtools-next/issues/463 (dd4c4)
Enhance inspect component ux - by @webfansplz (bd0cc)
Your coding agent can read these notes before it upgrades. Set up the MCP server →