<slot> syntax with a more powerful and flexible system.
Snippets: The Basics
Snippets let you define reusable markup chunks:{#snippet greeting(name = 'world')}
<p>Hello {name}!</p>
{/snippet}
{@render greeting()}
{@render greeting('Alice')}
{#snippet card(title, description)}
<div class="card">
<h2>{title}</h2>
<p>{description}</p>
</div>
{/snippet}
{@render card('Welcome', 'This is a card component')}
Passing Snippets to Components
Explicit Snippet Props
Pass snippets as props to create flexible, composable components:Implicit Snippet Props
Snippets declared inside component tags automatically become props:The Children Snippet
Content that’s not in a named snippet becomes thechildren snippet:
Optional Snippets
Make snippets optional with optional chaining or conditional rendering:Typing Snippets
Use theSnippet interface from svelte for type safety:
Generic Snippet Types
Create type-safe snippets with generics:Snippet Patterns
Render Props Pattern
Pass data from parent to snippet parameters:Recursive Snippets
Snippets can reference themselves:Conditional Rendering
Provide different snippet implementations:Exporting Snippets
Snippets can be exported from<script module>:
Programmatic Snippets
Create snippets programmatically withcreateRawSnippet:
Legacy Slots (Svelte 4)
In Svelte 4, content was passed using<slot> elements. This is now deprecated:
Best Practices
- Name snippets clearly - Use descriptive names that indicate what the snippet renders
- Document parameters - Make it clear what data snippets expect
- Provide fallbacks - Use optional chaining or conditional rendering for optional snippets
- Type your snippets - Use TypeScript for better autocomplete and error checking
- Keep snippets focused - Each snippet should have a single, clear purpose