{"record":{"id":"41424f55796e983b","repo":"sveltejs/svelte","slug":"invalid-snippet","errorCode":"invalid_snippet","errorMessage":"invalid_snippet\nCould not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\nhttps://svelte.dev/e/invalid_snippet","messagePattern":"invalid_snippet\nCould not `(.+?)` snippet due to the expression being `null` or `undefined`\\. Consider using optional chaining `(.+?)`\nhttps://svelte\\.dev/e/invalid_snippet","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/svelte/src/internal/client/errors.js","lineNumber":360,"sourceCode":"\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}","sourceCodeStart":342,"sourceCodeEnd":378,"githubUrl":"https://github.com/sveltejs/svelte/blob/20b341f10048cf1016a2028ac7eee5595cfef6a5/packages/svelte/src/internal/client/errors.js#L342-L378","documentation":"Thrown at dom/blocks/snippet.js:34 in DEV when a {@render snippet()} expression evaluates to null or undefined. Svelte 5 snippets are functions; rendering a non-existent snippet is a programming error. The fix the error itself suggests is optional chaining {@render snippet?.()} when the snippet may be absent.","triggerScenarios":"A parent passes no value for a snippet prop the child renders unconditionally; a conditional snippet that is sometimes undefined; destructuring a snippet prop that wasn't provided. The guard at snippet.js:33-35 fires when get_snippet() returns null/undefined.","commonSituations":"A component declares `{@render children()}` but is used with no children; optional snippet props not marked optional; refactoring slots to snippets and forgetting a default; passing a snippet conditionally and rendering it unconditionally.","solutions":["Use optional chaining: {@render snippet?.()} when the snippet may legitimately be absent.","Provide a default snippet when destructuring props: `const { snippet = () => {} } = $props()`.","Ensure the caller always passes the snippet, or make rendering conditional on its presence."],"exampleFix":"// before\nconst { header } = $props();\n{@render header()}\n\n// after — optional chaining\nconst { header } = $props();\n{@render header?.()}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Use optional chaining in {@render} expressions to guard against null/undefined snippets.\n// In JS, a snippet is a function or null/undefined:\n/** @param {Function|null|undefined} snippet */\nfunction isSnippet(v) { return typeof v === 'function'; }","tryCatchPattern":null,"preventionTips":["Use {@render snippet?.()} for any snippet that may be absent.","Provide defaults when destructuring: `const { header = () => {} } = $props()`.","Type snippet props as optional (Snippet | undefined) so callers know they can omit them."],"tags":["svelte","snippets","runes","template","rendering"],"backgroundTag":null,"analyzedSha":"20b341f10048cf1016a2028ac7eee5595cfef6a5","analyzedAt":"2026-08-12T23:37:30.399Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}