sveltejs/kit · error · Error

${manifest_data.params} does not export `params` from `defin

Error message

${manifest_data.params} does not export `params` from `defineParams`

What it means

When generating the dev manifest, SvelteKit imports the file configured as route `params` (written with `defineParams`) and reads its `params` export. If the module resolves but does not export `params`, this error is thrown. It means the params definition file exists but doesn't follow the required `defineParams` API.

Source

Thrown at packages/kit/src/exports/vite/dev/generate_manifest.js:204

					page: route.page,
					endpoint: endpoint
						? async () => {
								const url = path.resolve(root, endpoint.file);
								return await loud_ssr_load_module(vite, vite_dev_server, runner, url);
							}
						: null,
					endpoint_id: endpoint?.file
				};
			})
		),
		matchers: async () => {
			if (!manifest_data.params) return {};

			const url = path.resolve(root, manifest_data.params);
			const module = await runner.import(url);

			if (!module.params) {
				throw new Error(`${manifest_data.params} does not export \`params\` from \`defineParams\``);
			}

			return module.params;
		}
	};
}

/**
 * @param {typeof import('vite')} vite
 * @param {ViteDevServer} vite_dev_server
 * @param {ModuleRunner} runner
 * @param {string} url
 * @returns {Promise<Record<string, any>>}
 */
export async function loud_ssr_load_module(vite, vite_dev_server, runner, url) {
	try {
		return await runner.import(url);
	} catch (/** @type {any} */ err) {

View on GitHub (pinned to 03f1687fe6)

Solutions

  1. Ensure the file contains `export const params = defineParams({ ... })`
  2. Check the default export isn't used where a named `params` export is required
  3. Verify the file path in the manifest matches the intended params module
  4. Restart the dev server after editing params files so the module is re-imported

Example fix

// before
import { defineParams } from '@sveltejs/kit';
defineParams({ id: 'number' });
// after
import { defineParams } from '@sveltejs/kit';
export const params = defineParams({ id: 'number' });
Defensive patterns

Strategy: validation

Validate before calling

// In src/params/*.ts, verify the export exists:
if (!('params' in (await import('./params/shape.ts')))) {
  throw new Error('params module must export `params` from defineParams');
}

Type guard

function exportsParams(mod) {
  return typeof mod === 'object' && mod !== null && 'params' in mod;
}

Try / catch

try {
  const mod = await import('$lib/params/shape');
  if (!mod.params) throw new Error('missing `params` export');
} catch (err) {
  console.error('Invalid params module:', err.message);
}

Prevention

When it happens

Trigger: A `params` file referenced in route config (e.g. `src/params/shape.ts`) that imports `defineParams` but never assigns it to a `params` export, or exports under a different name (`export default` instead of `export const params = ...`).

Common situations: Hand-writing a params validator after copying a snippet incompletely; renaming `export const params` during refactoring; TypeScript file that only type-exports; stale file created by scaffolding tools.

Related errors


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