sveltejs/kit · error · Error

Could not resolve peer dependency "${name}" relative to your

Error message

Could not resolve peer dependency "${name}" relative to your project — please install it and try again.

What it means

adapter-auto resolves its peer adapter packages (e.g. @sveltejs/adapter-node) by walking up from process.cwd() looking for node_modules/<name>/package.json. When the directory walk reaches the filesystem root without finding the package, it throws this error meaning the detected environment's adapter is not installed in the project.

Source

Thrown at packages/adapter-auto/index.js:57

		return manager;
	} catch {
		return 'npm';
	}
}

/**
 * Resolves a peer dependency relative to the current CWD. Duplicated with `packages/kit`
 * @param {string} dependency
 */
function resolve_peer(dependency) {
	let [name, ...parts] = dependency.split('/');
	if (name[0] === '@') name += `/${parts.shift()}`;

	let dir = process.cwd();

	while (!fs.existsSync(`${dir}/node_modules/${name}/package.json`)) {
		if (dir === (dir = path.dirname(dir))) {
			throw new Error(
				`Could not resolve peer dependency "${name}" relative to your project — please install it and try again.`
			);
		}
	}

	const pkg_dir = `${dir}/node_modules/${name}`;
	const pkg = JSON.parse(fs.readFileSync(`${pkg_dir}/package.json`, 'utf-8'));

	const subpackage = ['.', ...parts].join('/');

	let exported = pkg.exports[subpackage];

	while (typeof exported !== 'string') {
		if (!exported) {
			throw new Error(`Could not find valid "${subpackage}" export in ${name}/package.json`);
		}

		exported = exported['import'] ?? exported['default'];

View on GitHub (pinned to 03f1687fe6)

Solutions

  1. Install the adapter the auto-detector chose: npm i -D @sveltejs/adapter-node (or whichever adapter matches your platform).
  2. Check package.json devDependencies include the adapter and run a full install (not --production).
  3. In monorepos, add the adapter to the app package's devDependencies or configure hoisting so it lands in a resolvable node_modules.
  4. Bypass auto-detection by importing the specific adapter directly in svelte.config.js.

Example fix

// before
// svelte.config.js uses adapter-auto, deploying to Vercel without the adapter installed
// after
import adapter from '@sveltejs/adapter-vercel';
export default { kit: { adapter: adapter() } };
Defensive patterns

Strategy: validation

Validate before calling

import fs from 'node:fs';
import path from 'node:path';
const adapters = ['@sveltejs/adapter-node','@sveltejs/adapter-vercel','@sveltejs/adapter-netlify','@sveltejs/adapter-cloudflare','@sveltejs/adapter-bun'];
const resolvable = (name) => {
  let dir = process.cwd();
  while (true) {
    if (fs.existsSync(path.join(dir, 'node_modules', name, 'package.json'))) return true;
    const parent = path.dirname(dir);
    if (parent === dir) return false;
    dir = parent;
  }
};
// before build: ensure the adapter you expect is resolvable
if (!adapters.some(resolvable)) throw new Error('No platform adapter installed — add one to devDependencies');

Type guard

const isAdapterInstalled = (name) => {
  let dir = process.cwd();
  while (true) {
    if (fs.existsSync(path.join(dir, 'node_modules', name, 'package.json'))) return true;
    const parent = path.dirname(dir);
    if (parent === dir) return false;
    dir = parent;
  }
};

Try / catch

try {
  await build();
} catch (e) {
  const m = /Could not resolve peer dependency "([^"]+)"/.exec(e.message);
  if (m) {
    console.error(`Missing adapter ${m[1]}. Run: npm i -D ${m[1]}`);
    process.exit(1);
  }
  throw e;
}

Prevention

When it happens

Trigger: get_adapter detected a deployment environment (via environment variables), mapped it to an adapter module name, and resolve_peer could not find that package's package.json in any node_modules directory between the project root and the filesystem root.

Common situations: Fresh CI environments where devDependencies were not installed (e.g. npm install --production or pnpm install --prod); monorepos where the adapter is in a different workspace package that isn't hoisted; adapters deleted from package.json while relying on auto-detection.

Related errors


AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02). Data as JSON: /api/errors/af1569a1417508fb. Report an issue: GitHub.