The module validates your runtime config to catch configuration errors early. By default, validation runs at build time only.
With default settings, validation runs at:
nuxt devnuxt buildexport default defineNuxtConfig({
safeRuntimeConfig: {
$schema: runtimeConfigSchema,
validateAtBuild: true, // default
},
})
Build-time validation uses your schema library directly. It catches:
Benefits:
Runtime validation catches issues that only appear in production, like environment variables set differently than during build.
export default defineNuxtConfig({
safeRuntimeConfig: {
$schema: runtimeConfigSchema,
validateAtRuntime: true,
},
})
When enabled:
useRuntimeConfig() on cold startWhat it catches:
DATABASE_URL not set)NUXT_PORT=abc when expecting number)Control how validation errors are handled:
export default defineNuxtConfig({
safeRuntimeConfig: {
$schema: runtimeConfigSchema,
onBuildError: 'throw', // 'throw' | 'warn' | 'ignore'
onRuntimeError: 'throw', // 'throw' | 'warn' | 'ignore'
},
})
'throw' (default) - stops build or crashes server'warn' - logs warning, continues'ignore' - silentWhen validation fails:
[safe-runtime-config] Validation failed!
1. databaseUrl: Invalid type: Expected string but received undefined
2. public.apiBase: Invalid type: Expected string but received undefined
3. port: Invalid type: Expected number but received string
Enable both for maximum safety:
export default defineNuxtConfig({
safeRuntimeConfig: {
$schema: runtimeConfigSchema,
validateAtBuild: true, // catch dev errors
validateAtRuntime: true, // catch prod errors
},
})