{"record":{"id":"40bea69baaf65680","repo":"pnpm/pnpm","slug":"not-supported-archive","errorCode":"NOT_SUPPORTED_ARCHIVE","errorMessage":"The binary fetcher doesn't support archive type ${resolution.archive}","messagePattern":"The binary fetcher doesn't support archive type (.+?)","errorType":"exception","errorClass":"PnpmError","httpStatus":null,"severity":"error","filePath":"pnpm11/fetching/binary-fetcher/src/index.ts","lineNumber":92,"sourceCode":"        await downloadAndUnpackZip(ctx.fetch, {\n          url: resolution.url,\n          integrity: resolution.integrity,\n          basename: resolution.prefix ?? '',\n          ignoreEntry: archiveFilter?.regex,\n        }, tempLocation)\n        fetchResult = await addFilesFromDir({\n          storeDir: cafs.storeDir,\n          storeIndex: ctx.storeIndex,\n          dir: tempLocation,\n          filesIndexFile: opts.filesIndexFile,\n          readManifest: false,\n          appendManifest: manifest,\n          includeNodeModules: true,\n        })\n        break\n      }\n      default: {\n        throw new PnpmError('NOT_SUPPORTED_ARCHIVE', `The binary fetcher doesn't support archive type ${resolution.archive as string}`)\n      }\n    }\n    return {\n      ...fetchResult,\n      manifest,\n    }\n  }\n  return {\n    binary: fetchBinary,\n  }\n}\n\nexport interface AssetInfo {\n  url: string\n  integrity: string\n  basename: string\n  /**\n   * Regex matched against each zip entry's path relative to the archive's top-level basename.","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/pnpm/pnpm/blob/5b11d3a15b9022a2109cb18ed96a5d652630371f/pnpm11/fetching/binary-fetcher/src/index.ts#L74-L110","documentation":"The binary fetcher switches on resolution.archive and only handles the archive kinds it implements (tarball, zip, and a directory form); the resolution carried any other value, hitting the default case. This means the lockfile or a resolver produced an archive type this fetcher version cannot handle — usually a hand-edited lockfile or a resolver/fetcher version mismatch.","triggerScenarios":"resolution.archive set to an unknown string: manual pnpm-lock.yaml edits, a lockfile written by a different pnpm version with a different archive vocabulary, or corrupted resolution objects.","commonSituations":"Editing lockfiles to 'fix' resolutions; switching between incompatible pnpm versions; third-party tools rewriting lockfiles incorrectly.","solutions":["Regenerate resolutions: delete pnpm-lock.yaml (or revert the edit) and run pnpm install","Use one consistent pnpm version across the team and CI","Never hand-edit resolution fields; express intent in package.json or overrides and let pnpm re-resolve"],"exampleFix":"# before - hand-edited lockfile\ntarball:\n  resolution:\n    archive: targz     # unsupported value\n\n# after - regenerate\nrm pnpm-lock.yaml && pnpm install","handlingStrategy":"validation","validationCode":"const SUPPORTED_ARCHIVE_TYPES = new Set(['tarball', 'zip', 'dir'])\nfunction hasSupportedArchiveType (resolution: { archive?: string }): boolean {\n  return resolution.archive == null || SUPPORTED_ARCHIVE_TYPES.has(resolution.archive)\n}\n// validate lockfile resolutions before install; regenerate if any fail","typeGuard":null,"tryCatchPattern":"catch code === 'NOT_SUPPORTED_ARCHIVE'; regenerate the lockfile (rm pnpm-lock.yaml && pnpm install) or re-run with the pnpm version that produced it","preventionTips":["Never hand-edit resolution objects in pnpm-lock.yaml","Keep one pnpm version across the team and CI so lockfile vocabulary stays consistent","Validate lockfiles in CI after any programmatic rewriting"],"tags":["lockfile","binary","version-mismatch","install"],"backgroundTag":null,"analyzedSha":"5b11d3a15b9022a2109cb18ed96a5d652630371f","analyzedAt":"2026-08-16T13:18:59.198Z","schemaVersion":2},"datasetVersion":"2026-08-16T18:17:16.020Z"}