sveltejs/kit · error · Error

@sveltejs/enhanced-img requires @sveltejs/vite-plugin-svelte

Error message

@sveltejs/enhanced-img requires @sveltejs/vite-plugin-svelte 6 or higher to be installed

What it means

@sveltejs/enhanced-img builds on top of @sveltejs/vite-plugin-svelte. At Vite config resolution time the plugin looks for the `vite-plugin-svelte:config` plugin; if it is absent, the installed/loaded vite-plugin-svelte is too old (or not loaded), so enhanced-img refuses to run.

Source

Thrown at packages/enhanced-img/src/vite-plugin.js:31

/**
 * Creates the Svelte image plugin.
 * @param {import('vite').Plugin<void>} imagetools_plugin
 * @returns {import('vite').Plugin<void>}
 */
export function image_plugin(imagetools_plugin) {
	/** @type {import('vite').ResolvedConfig} */
	let vite_config;

	const name = 'vite-plugin-enhanced-img-markup';

	/** @type {import('vite').Plugin<void>} */
	const plugin = {
		name,
		configResolved(config) {
			vite_config = config;
			const svelteConfigPlugin = config.plugins.find((p) => p.name === 'vite-plugin-svelte:config');
			if (!svelteConfigPlugin) {
				throw new Error(
					'@sveltejs/enhanced-img requires @sveltejs/vite-plugin-svelte 6 or higher to be installed'
				);
			}
			const api = svelteConfigPlugin.api;
			const id_filter = api.filter.id;
			// @ts-expect-error plugin.transform is defined below before configResolved is called
			plugin.transform.filter.id = {
				include: id_filter.include,
				// Exclude modules with query parameters (e.g. ?raw, ?url) — these are not
				// Svelte components to compile, so parsing them as markup would fail.
				exclude: [...id_filter.exclude, /\?/]
			};
		},
		transform: {
			order: 'pre', // puts it before vite-plugin-svelte:compile
			filter: {
				code: /<enhanced:img/ // code filter must match in addition to the id filter set in configResolved hook above
			},

View on GitHub (pinned to 03f1687fe6)

Solutions

  1. Install/upgrade @sveltejs/vite-plugin-svelte to version 6 or higher: `pnpm add -D @sveltejs/vite-plugin-svelte@^6`
  2. Run your package manager's dedupe to remove stale older copies from node_modules
  3. Verify the SvelteKit/Vite versions are compatible (SvelteKit 2 + Vite 6/7 era) and reinstall dependencies

Example fix

// before
"devDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0" }
// after
"devDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0" }
Defensive patterns

Strategy: validation

Validate before calling

import { version } from '@sveltejs/vite-plugin-svelte/package.json' with { type: 'json' };
// or check before dev/build:
const pkg = require('@sveltejs/vite-plugin-svelte/package.json');
if (parseInt(pkg.version) < 6) throw new Error('enhanced-img needs vite-plugin-svelte >= 6');

Try / catch

try {
  await vite.build(config);
} catch (e) {
  if (String(e.message).includes('vite-plugin-svelte 6')) {
    console.error('Upgrade @sveltejs/vite-plugin-svelte to ^6');
  }
  throw e;
}

Prevention

When it happens

Trigger: `configResolved` runs during `vite dev`/`vite build` and `config.plugins` contains no plugin named 'vite-plugin-svelte:config', i.e. @sveltejs/vite-plugin-svelte < 6 is installed or not included in the Vite config.

Common situations: Dependency resolution left an older vite-plugin-svelte in node_modules, the plugin was forgotten in vite.config, or a package manager hoisted an incompatible version (e.g. via SvelteKit version mismatch).

Related errors


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