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
- Ensure the file contains `export const params = defineParams({ ... })`
- Check the default export isn't used where a named `params` export is required
- Verify the file path in the manifest matches the intended params module
- 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
- Always write `export const params = defineParams({...})` — never bare defineParams or default export
- Run a quick build after creating params files
- Restart dev server after editing params modules
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
- Could not find node for ${url}
- @sveltejs/enhanced-img requires @sveltejs/vite-plugin-svelte
- Could not locate ${file_path}. Please move it to be located
- Could not locate ${file_path}. See https://vitejs.dev/guide/
- Could not load ${resolved_id}
AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02).
Data as JSON: /api/errors/d692a1bfd28b7622.
Report an issue: GitHub.