vercel/turborepo · error · ConvertError
package_manager-unsupported_version
package_manager-unsupported_version
Error message
Unsupported package manager version.
What it means
install() maps the requested manager name to a known entry (getPackageManagerMeta looks up PACKAGE_MANAGERS[name] and takes its default entry) to get the install command and args. An unknown name or an entry without a default throws ConvertError type package_manager-unsupported_version, stopping before any install subprocess runs.
Solutions
- Check the exact spelling/casing of the manager name you passed
- Upgrade @turbo-workspaces/turbo to a version that supports the manager
- Inspect PACKAGE_MANAGERS keys in your installed version to see accepted names
- If calling programmatically, validate the name against the exported list before calling install
Example fix
// before
await install({ to: { name: "pnpm3", version: "3.0.0" }, options }); // unknown name -> throws
// after
await install({ to: { name: "pnpm", version: "9.1.0" }, options }); Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED = new Set(["npm", "pnpm", "yarn", "bun" /* + managers your version supports */]);
function isSupportedManager(name: string): boolean {
return SUPPORTED.has(name.toLowerCase());
}
// if (!isSupportedManager(to.name)) fail with a clear message before install(); Type guard
function isKnownManager(name: string): name is "npm" | "pnpm" | "yarn" | "bun" {
return ["npm", "pnpm", "yarn", "bun"].includes(name);
} Try / catch
try {
await install({ to, options });
} catch (err) {
if (err instanceof ConvertError && err.type === "package_manager-unsupported_version") {
throw new Error(`Unsupported manager '${to.name}' - upgrade @turbo-workspaces?`, { cause: err });
}
throw err;
} Prevention
- Validate manager names against the supported list at your CLI boundary
- Upgrade turbo/@turbo-workspaces when adopting newly released package managers
- Pass plain manager names (no version suffixes) where a name is expected
When it happens
Trigger: Calling install with a manager name not present in the PACKAGE_MANAGERS registry, or a registry entry with no default version - e.g. asking to install with an unreleased/unknown manager identifier or a version-specific key that has no default.
Common situations: Typos in the --to manager name, depending on a newer manager supported by a newer @turbo-workspaces version than the one installed, or passing a versioned identifier where a plain name is expected.
Related errors
- package_manager-already_in_use
- invalid_directory
- package_manager-could_not_be_found
- package_manager-unexpected
- Try running without "--skip-transforms" to convert
AI-assisted analysis of vercel/turborepo@f9245100cf (2026-08-17).
Data as JSON: /api/errors/142ab1b9ada4d585.
Report an issue: GitHub.
Appendix: 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 f9245100cf)