# svelte > Svelte 5 with runes reactivity system. Covers components, state management, and reactive declarations. USE WHEN: user mentions "Svelte", "runes", "$state", "$derived", "$effect", "SvelteKit", asks about "Svelte 5 patterns", "reactive runes" DO NOT USE FOR: Svelte 4 and earlier - use Svelte 4 documentation, React - use `frontend-react`, Vue - use `vue-composition`, Angular - use `angular` - Author: mariepellegrino89 - Repository: claude-dev-suite/claude-dev-suite - Version: 20260206202537 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/claude-dev-suite/claude-dev-suite - Web: https://mule.run/skillshub/@@claude-dev-suite/claude-dev-suite~svelte:20260206202537 --- --- name: svelte description: | Svelte 5 with runes reactivity system. Covers components, state management, and reactive declarations. USE WHEN: user mentions "Svelte", "runes", "$state", "$derived", "$effect", "SvelteKit", asks about "Svelte 5 patterns", "reactive runes" DO NOT USE FOR: Svelte 4 and earlier - use Svelte 4 documentation, React - use `frontend-react`, Vue - use `vue-composition`, Angular - use `angular` allowed-tools: Read, Grep, Glob, Write, Edit --- # Svelte 5 Core Knowledge > **Full Reference**: See [advanced.md](advanced.md) for WebSocket store patterns, room management, Socket.IO integration, and SvelteKit SSE patterns. > **Deep Knowledge**: Use `mcp__documentation__fetch_docs` with technology: `svelte` for comprehensive documentation. ## When NOT to Use This Skill Skip this skill when: - Working with Svelte 4 or earlier (use Svelte 4 docs) - Building React applications (use `frontend-react`) - Using Vue framework (use `vue-composition`) - Working with Angular (use `angular`) - Need only vanilla JavaScript (no framework needed) ## Component Structure ```svelte

Hello {name}

Count: {count}, Doubled: {doubled}

``` ## Runes (Svelte 5) | Rune | Purpose | |------|---------| | `$state` | Reactive state | | `$derived` | Computed values | | `$effect` | Side effects | | `$props` | Component props | | `$bindable` | Two-way bindable props | ## Key Concepts - No virtual DOM - compiles to vanilla JS - Scoped CSS by default - `{#if}`, `{#each}`, `{#await}` blocks - `bind:` for two-way binding - `use:` for actions (reusable behaviors) ## Migration from Svelte 4 ```svelte ``` ## Anti-Patterns | Anti-Pattern | Why It's Bad | Correct Approach | |--------------|--------------|------------------| | Using Svelte 4 `$:` syntax | Deprecated in Svelte 5 | Use `$derived` rune | | Not using `$props()` | Old prop syntax | Use `let { prop } = $props()` | | Using `{@html}` without sanitization | XSS vulnerability | Use DOMPurify before rendering | | Complex logic in templates | Hard to read/test | Extract to `$derived` or functions | | Not cleaning up in `onDestroy` | Memory leaks | Clear timers, unsubscribe | | Overusing stores | Unnecessary complexity | Use component state when possible | ## Quick Troubleshooting | Issue | Likely Cause | Solution | |-------|--------------|----------| | State not reactive | Using regular `let` | Use `$state()` rune | | Derived not updating | Not using `$derived` | Convert to `$derived()` | | Effect running too often | Missing dependencies | Check `$effect` dependencies | | Props not updating | Using old syntax | Use `$props()` rune | | Memory leaks | No cleanup | Add `onDestroy()` lifecycle | | Binding not working | Wrong syntax | Use `bind:value` not `:value` | ## Production Readiness ### Security ```svelte {@html safeHtml} ``` ### Testing ```typescript import { render, screen } from '@testing-library/svelte'; import userEvent from '@testing-library/user-event'; import Counter from './Counter.svelte'; describe('Counter', () => { it('increments count on click', async () => { const user = userEvent.setup(); render(Counter, { props: { initial: 0 } }); const button = screen.getByRole('button'); await user.click(button); expect(screen.getByText('Count: 1')).toBeInTheDocument(); }); }); ``` ### Monitoring Metrics | Metric | Target | |--------|--------| | Bundle size | < 50KB | | First Contentful Paint | < 1s | | Time to Interactive | < 2s | | Hydration time | < 100ms | ### Checklist - [ ] Svelte 5 runes ($state, $derived, $effect) - [ ] No {@html} with user input - [ ] Error boundaries in SvelteKit - [ ] Virtual lists for large data - [ ] Lazy loaded components - [ ] Proper ARIA attributes - [ ] Testing with @testing-library/svelte - [ ] Server-side rendering enabled - [ ] Prerendering static pages - [ ] Bundle analysis ## Reference Documentation - [Runes Cheatsheet](quick-ref/runes-cheatsheet.md) - [Component Patterns](quick-ref/component-patterns.md)