vuejs/devtools-v6 · error · Error
[Vue Devtools] Vue version not found
Error message
[Vue Devtools] Vue version not found
What it means
registerDevToolsApp/registerAppJob requires the app's Vue version string to select the correct backend (Vue 2 vs Vue 3) by parsing the major version. If options.version is empty or undefined, it throws instead of guessing a backend. This guards against registering an app whose version could not be detected.
Source
Thrown at packages/app-backend-core/src/app.ts:36
const jobs = new JobQueue()
let recordId = 0
type AppRecordResolver = (record: AppRecord) => void | Promise<void>
const appRecordPromises = new Map<App, AppRecordResolver[]>()
export async function registerApp(options: AppRecordOptions, ctx: BackendContext) {
return jobs.queue('regiserApp', () => registerAppJob(options, ctx))
}
async function registerAppJob(options: AppRecordOptions, ctx: BackendContext) {
// Dedupe
if (ctx.appRecords.find(a => a.options.app === options.app)) {
return
}
if (!options.version) {
throw new Error('[Vue Devtools] Vue version not found')
}
// Find correct backend
const baseFrameworkVersion = Number.parseInt(options.version.substring(0, options.version.indexOf('.')))
for (let i = 0; i < availableBackends.length; i++) {
const backendOptions = availableBackends[i]
if (backendOptions.frameworkVersion === baseFrameworkVersion) {
// Enable backend if it's not enabled
const backend = getBackend(backendOptions, ctx)
await createAppRecord(options, backend, ctx)
break
}
}
}
async function createAppRecord(options: AppRecordOptions, backend: DevtoolsBackend, ctx: BackendContext) {View on GitHub (pinned to dd2ab5d427)
Solutions
- Pass an explicit version when registering: include `version: Vue.version` (e.g. '3.4.21') in the options object.
- Verify the app actually exposes Vue.version before registration; if using a bundled/aliased Vue import, import from the real 'vue' package to get the version.
- If writing a custom backend integration, guard the call: only call registerApp once a version string is available, or default to a known major like '3.0.0'.
- Update vue-devtools packages to the latest version — newer detectors handle more framework builds.
Example fix
// before
registerDevToolsApi({ app, appId, options: { app } }) // no version
// after
import Vue from 'vue'
registerDevToolsApi({ app, appId, options: { app, version: Vue.version } }) Defensive patterns
Strategy: validation
Validate before calling
const version = options.version ?? Vue.version
if (typeof version !== 'string' || !/^\d+\./.test(version)) {
throw new Error(`registerApp requires a valid version string, got: ${version}`)
}
registerDevToolsApi({ ...options, version }) Type guard
function hasVersion(o) { return typeof o?.version === 'string' && o.version.length > 0 } Prevention
- Always pass Vue.version explicitly when registering an app programmatically
- Avoid registering before the framework has fully loaded
- Add a startup assertion that version exists in your devtools integration code
When it happens
Trigger: Calling app-backend registerApp (via the registerAppJob path) with an AppOptions object whose `version` field is undefined, null, or an empty string — typically because the backend sent `hook.Vue` / `app.version` before Vue exposed it.
Common situations: Custom app integrations calling the devtools API manually without passing version; apps using exotic Vue builds where `Vue.version` is missing; timing issues where registration happens before the framework sets its version; third-party framework wrappers that report no version.
Understand the failure class
Background: "Must pass :limit option" / "Missing required option" — required option errors explained — this error's family across 41 libraries.
Related errors
AI-assisted analysis of vuejs/devtools-v6@dd2ab5d427 (2026-08-31).
Data as JSON: /api/errors/e91a5788f6c8cb8c.
Report an issue: GitHub.