withastro/astro · error · Error

Integration " " conflicts with " ". You can only configure…

Error message

Integration "${maybeConflictingIntegration}" conflicts with "${settings.adapter.name}". You can only configure one deployment integration.

What it means

`validateSetAdapter` runs when an integration registers an adapter via its `astro:config:setup` hook. If `settings.adapter` already holds an adapter with a different name, Astro throws this plain Error: only one deployment integration may be configured. The name in quotes is the previously registered adapter.

Solutions

  1. Remove one of the conflicting adapters from the `integrations` array, keeping only the deployment target you actually use.
  2. Uninstall the unused adapter package (`npm uninstall @astrojs/node`).
  3. Clean up config keys belonging to the removed adapter (site-specific options, env vars).
  4. If you meant to switch, prefer editing the config manually rather than stacking `astro add` runs.

Example fix

// before
import node from '@astrojs/node';
import vercel from '@astrojs/vercel';
export default defineConfig({
  integrations: [node(), vercel()], // two deployment adapters
});

// after
import vercel from '@astrojs/vercel';
export default defineConfig({
  integrations: [vercel()],
});
Defensive patterns

Strategy: validation

Validate before calling

// Fail fast at config authoring time: only one deployment integration
import vercel from '@astrojs/vercel';
const integrations = [vercel()];
// adding node() here as well would throw at runtime — keep exactly one adapter
export default defineConfig({ integrations });

Prevention

When it happens

Trigger: Two adapter integrations in `integrations: [node(), vercel()]`; running `astro add netlify` when the config already contains `@astrojs/node` or another adapter; a non-adapter integration that also calls `setAdapter`.

Common situations: Switching deploy targets (e.g. Vercel to Netlify) by adding the new adapter without removing the old one; copy-pasting an example config that already had an adapter; forgetting an adapter added by a team member.

Related errors


AI-assisted analysis of withastro/astro@52e6c34790 (2026-08-18). Data as JSON: /api/errors/6493868aeedfc80a. Report an issue: GitHub.

Appendix: source

Thrown at packages/astro/src/core/dev/adapter-validation.ts:28

	if (hasWarnedMissingAdapter) return;
	if (settings.buildOutput === 'server' && !settings.config.adapter) {
		logger.warn(
			'config',
			'This project contains server-rendered routes, but no adapter is installed. This is fine for development, but an adapter will be required to build your site for production.',
		);
		hasWarnedMissingAdapter = true;
	}
}

export function validateSetAdapter(
	logger: AstroLogger,
	settings: AstroSettings,
	adapter: AstroAdapter,
	maybeConflictingIntegration: string,
	command?: 'dev' | 'build' | string,
) {
	if (settings.adapter && settings.adapter.name !== adapter.name) {
		throw new Error(
			`Integration "${maybeConflictingIntegration}" conflicts with "${settings.adapter.name}". You can only configure one deployment integration.`,
		);
	}

	if (settings.buildOutput === 'server' && adapter.adapterFeatures?.buildOutput === 'static') {
		// If the adapter is not compatible with the build output, throw an error
		if (command === 'build') {
			const adapterRecommendation = getAdapterStaticRecommendation(adapter.name);

			throw new AstroError({
				...AstroErrorData.AdapterSupportOutputMismatch,
				message: AstroErrorData.AdapterSupportOutputMismatch.message(adapter.name),
				hint: adapterRecommendation ? adapterRecommendation : undefined,
			});
		} else if (command === 'dev') {
			logger.warn(
				null,
				`The adapter ${adapter.name} does not support emitting a server output, but the project contain server-rendered pages. Your project will not build correctly.`,

View on GitHub (pinned to 52e6c34790)