# Svelte 5 Quick Reference Card ## Runes Cheat Sheet ```svelte ``` --- ## Template Syntax ```svelte {@render children?.()} {@render header?.()} {@render row({ item, index })} {#if condition} ... {:else if other} ... {:else} ... {/if} {#each items as item, index (item.id)} ... {/each} {#await promise} {:then data} {:catch error} {/await} {#key value} {/key} {@html content} {@debug variable} {#snippet name(param1, param2)}
{param1}
{/snippet} ``` --- ## Component Patterns ```svelte {@render header?.()} {@render children?.()} {@render footer?.({ close })} ``` --- ## State Management ```typescript // stores/counter.svelte.ts export class CounterStore { count = $state(0); doubled = $derived(this.count * 2); increment = () => { this.count++; } decrement = () => { this.count--; } reset = () => { this.count = 0; } } export const counter = new CounterStore(); // Usage in component import { counter } from '$lib/stores/counter.svelte'; // Read: counter.count, counter.doubled // Write: counter.increment() ``` --- ## SvelteKit Essentials ```typescript // +page.ts (Universal load) export async function load({ params, fetch }) { const data = await fetch(`/api/items/${params.id}`); return { item: await data.json() }; } // +page.server.ts (Server-only load) export async function load({ params, locals }) { return { user: locals.user }; } // Form Actions export const actions = { default: async ({ request }) => { const data = await request.formData(); // Process form return { success: true }; }, named: async ({ request }) => { // Named action:
} }; // API Routes (+server.ts) export async function GET({ params }) { return json({ data: 'value' }); } export async function POST({ request }) { const body = await request.json(); return json({ created: true }, { status: 201 }); } ``` --- ## File Structure ``` src/ ├── app.html # HTML template ├── app.d.ts # Type declarations ├── lib/ │ ├── components/ # Reusable components │ ├── stores/ # State (.svelte.ts files) │ ├── utils/ # Utility functions │ ├── hooks/ # Custom hooks │ └── server/ # Server-only code ├── routes/ │ ├── +page.svelte # Page component │ ├── +page.ts # Page load (universal) │ ├── +page.server.ts # Page load (server) + actions │ ├── +layout.svelte # Layout component │ ├── +layout.ts # Layout load │ ├── +error.svelte # Error page │ └── api/ │ └── +server.ts # API endpoint └── hooks.server.ts # Server hooks ``` --- ## Common Anti-Patterns ```svelte let { name } = user; // Loses reactivity! {user.name} $effect(() => { doubled = count * 2; // Use $derived instead! }); let doubled = $derived(count * 2); {@render children()} // May error if undefined {@render children?.()} let bad = $derived(count++); // Side effect! let good = $derived(count + 1); ``` --- ## TypeScript Quick Types ```typescript import type { Snippet, // Snippet type Component, // Component type ComponentProps // Extract props from component } from 'svelte'; import type { PageData, // From +page.ts load PageServerData, // From +page.server.ts load Actions, // Form actions type RequestHandler // API route handler } from './$types'; // Snippet with params type ItemSnippet = Snippet<[{ item: Item; index: number }]>; // Component props type ButtonProps = ComponentProps; ``` --- ## Key Commands ```bash # Create new project npx sv create my-app # Development npm run dev # Build npm run build # Preview production build npm run preview # Type checking npm run check # Run migration npx sv migrate svelte-5 ```