vercel/turborepo · error · ConvertError
package_manager-unsupported_version
package_manager-unsupported_version
Error message
Unsupported package manager version.
What it means
install() selects install instructions via getPackageManagerMeta(): with a known version it finds the PACKAGE_MANAGERS entry whose semver range matches (pnpm '6.x' vs '>=7', yarn '<2' vs '>=2', bun '^1.0.1'); with no version it takes the default entry. If the version satisfies no range, it throws ConvertError type package_manager-unsupported_version before running the install command.
Source
Thrown at packages/turbo-workspaces/src/install.ts:130
const { version, name } = packageManager;
if (version) {
return PACKAGE_MANAGERS[name].find((manager) =>
satisfies(version, manager.semver)
);
}
return PACKAGE_MANAGERS[name].find((manager) => {
return manager.default;
});
}
export async function install(args: InstallArgs) {
const { to, logger, options } = args;
const installLogger = logger ?? new Logger(options);
const packageManager = getPackageManagerMeta(to);
if (!packageManager) {
throw new ConvertError("Unsupported package manager version.", {
type: "package_manager-unsupported_version"
});
}
installLogger.subStep(
`running "${packageManager.command} ${packageManager.installArgs.join(
" "
)}"`
);
if (!options?.dry) {
let spinner;
if (installLogger.interactive) {
spinner = ora({
text: "installing dependencies...",
spinner: {
frames: installLogger.installerFrames()
}
}).start();View on GitHub (pinned to 9f94a7d215)
Solutions
- Upgrade the target manager to a supported major (pnpm >= 7, yarn 1.x or >= 2, bun >= 1.0.1) and re-run
- Omit the explicit version so the default PACKAGE_MANAGERS entry is used
- Check the detected version (`pnpm --version`) against the ranges declared in packages/turbo-workspaces/src/install.ts
Example fix
# before: pnpm 5.18 detected, satisfies neither 6.x nor >=7 pnpm --version # 5.18.10 # after npm i -g pnpm@latest pnpm --version # 9.x — retry the conversion
Defensive patterns
Strategy: validation
Validate before calling
import { satisfies } from "semver";
const SUPPORTED: Record<string, Array<string>> = {
pnpm: ["6.x", ">=7"],
yarn: ["<2", ">=2"],
bun: ["^1.0.1"],
npm: ["*"]
};
const version = execSync(`${convertTo.name} --version`).toString().trim();
const supported = SUPPORTED[convertTo.name]?.some((range) => satisfies(version, range));
if (!supported) throw new Error(`${convertTo.name}@${version} is unsupported; upgrade first`); Type guard
function isUnsupportedVersionError(e: unknown): boolean {
return e instanceof ConvertError && e.type === "package_manager-unsupported_version";
} Try / catch
try {
await install({ project, to, logger, options });
} catch (e) {
if (e instanceof ConvertError && e.type === "package_manager-unsupported_version") {
// suggest upgrading the target manager, then re-run the conversion
} else throw e;
} Prevention
- Check the installed manager version against turbo-workspaces' semver ranges before converting
- Upgrade old pnpm 5/6 or bun 0.x installs before migrations
- In automation, branch on ConvertError.type === 'package_manager-unsupported_version' to route to an upgrade hint
When it happens
Trigger: Converting with a target version outside every supported range: pnpm 5.x or older, bun 0.x, or a prerelease version string that semver.satisfies rejects (prereleases don't satisfy ranges by default).
Common situations: Legacy repos pinned to pnpm 5; old global manager installs; user-supplied version strings in conversion scripts; experimental canary versions.
Related errors
- package_manager-already_in_use
- package_manager-could_not_be_found
- bun-workspace_glob_error
- Unable to update README.md
- Invalid version: ${version}
AI-assisted analysis of vercel/turborepo@9f94a7d215 (2026-08-16).
Data as JSON: /api/errors/142ab1b9ada4d585.
Report an issue: GitHub.