vitest-dev/vitest · error · Error
the blobs in " " were generated by a different version of…
Error message
the blobs in "${blobsDirectory}" were generated by a different version of Vitest. Expected v${currentVersion}, but received v${blobs[0].version} What it means
The blobs are mutually consistent (a single version among them) but that version differs from the Vitest instance now running `mergeReports`. The reader only understands its own version's blob format, so it refuses to deserialize a foreign-version blob.
Solutions
- Run `mergeReports` with the exact Vitest version that produced the blobs.
- Or regenerate the blobs using the current Vitest version so producer and consumer match.
- Pin a single Vitest version across all environments that generate or merge blobs.
Example fix
# before: blobs written by vitest 2.x, merged by vitest 3.x vitest --merge-reports=./blobs # error: expected v3.x, got v2.x # after (option A): merge with the matching version) npx vitest@2 --merge-reports=./blobs # after (option B): regenerate with current version) rm -rf ./blobs && vitest --run --reporter=blob && vitest --merge-reports=./blobs
Defensive patterns
Strategy: validation
Validate before calling
import { readdir, readFile } from 'node:fs/promises'
import { parse } from 'flatted'
async function assertBlobsMatchRunnerVersion(dir: string, runnerVersion: string) {
for (const name of await readdir(dir)) {
const [v] = parse(await readFile(resolve(dir, name), 'utf-8')) as [string, ...unknown[]]
if (v !== runnerVersion) {
throw new Error(`Blob '${name}' is v${v} but runner is v${runnerVersion}. Merge with v${v} or regenerate blobs.`)
}
}
} Prevention
- Generate and merge blobs in the same image/environment with the same Vitest pin.
- Re-run the generate step locally if you switch Vitest versions between runs.
When it happens
Trigger: `versions.size === 1` but `!versions.has(currentVersion)` — e.g. blobs written by Vitest 2.x being merged by Vitest 3.x, or vice versa.
Common situations: Generate step and merge step run in different containers/images with different Vitest pins; blobs produced in CI, merged locally on another version.
Related errors
- vitest.mergeReports() requires all blob files to be…
- vitest.mergeReports() expects all paths in
- vitest.mergeReports() expects all paths in
- vitest.mergeReports() requires at least one blob file in
- Blob reporter is not supported in watch mode
AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11).
Data as JSON: /api/errors/78ed63671e8c5c01.
Report an issue: GitHub.
Appendix: source
Thrown at packages/vitest/src/node/reporters/blob.ts:156
return { version, files, errors, coverage, file: filename, executionTime, environmentModules }
})
const blobs = await Promise.all(promises)
if (!blobs.length) {
throw new Error(
`vitest.mergeReports() requires at least one blob file in "${blobsDirectory}" directory, but none were found`,
)
}
const versions = new Set(blobs.map(blob => blob.version))
if (versions.size > 1) {
throw new Error(
`vitest.mergeReports() requires all blob files to be generated by the same Vitest version, received\n\n${blobs.map(b => `- "${b.file}" uses v${b.version}`).join('\n')}`,
)
}
if (!versions.has(currentVersion)) {
throw new Error(
`the blobs in "${blobsDirectory}" were generated by a different version of Vitest. Expected v${currentVersion}, but received v${blobs[0].version}`,
)
}
// Restore module graph
const projects = Object.fromEntries(
projectsArray.map(p => [p.name, p]),
)
blobs.forEach((blob) => {
Object.entries(blob.environmentModules).forEach(([projectName, modulesByProject]) => {
const project = projects[projectName]
if (!project) {
return
}
modulesByProject.external.forEach(([id, externalized]) => {
project._resolver.externalizeCache.set(id, externalized)View on GitHub (pinned to 1fa9837ec2)