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`

GitHub
安装命令
npx skhub add claude-dev-suite/svelte
Markdown
SKILL.md

Svelte 5 Core Knowledge

Full Reference: See 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

<script lang="ts">
  interface Props {
    name: string;
    count?: number;
  }

  let { name, count = 0 }: Props = $props();

  let localState = $state('');
  let doubled = $derived(count * 2);

  function handleClick() {
    localState = 'clicked';
  }
</script>

<div>
  <h1>Hello {name}</h1>
  <p>Count: {count}, Doubled: {doubled}</p>
  <button onclick={handleClick}>Click</button>
</div>

<style>
  div { padding: 1rem; }
</style>

Runes (Svelte 5)

RunePurpose
$stateReactive state
$derivedComputed values
$effectSide effects
$propsComponent props
$bindableTwo-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 4 -->
<script>
  export let count = 0;
  $: doubled = count * 2;
</script>

<!-- Svelte 5 -->
<script>
  let { count = 0 } = $props();
  let doubled = $derived(count * 2);
</script>

Anti-Patterns

Anti-PatternWhy It's BadCorrect Approach
Using Svelte 4 $: syntaxDeprecated in Svelte 5Use $derived rune
Not using $props()Old prop syntaxUse let { prop } = $props()
Using {@html} without sanitizationXSS vulnerabilityUse DOMPurify before rendering
Complex logic in templatesHard to read/testExtract to $derived or functions
Not cleaning up in onDestroyMemory leaksClear timers, unsubscribe
Overusing storesUnnecessary complexityUse component state when possible

Quick Troubleshooting

IssueLikely CauseSolution
State not reactiveUsing regular letUse $state() rune
Derived not updatingNot using $derivedConvert to $derived()
Effect running too oftenMissing dependenciesCheck $effect dependencies
Props not updatingUsing old syntaxUse $props() rune
Memory leaksNo cleanupAdd onDestroy() lifecycle
Binding not workingWrong syntaxUse bind:value not :value

Production Readiness

Security

<script lang="ts">
  import DOMPurify from 'dompurify';
  let { rawHtml }: { rawHtml: string } = $props();
  let safeHtml = $derived(DOMPurify.sanitize(rawHtml));
</script>

{@html safeHtml}

Testing

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

MetricTarget
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

发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

skills/frontend-frameworks/svelte

默认分支

main

最新提交

9496306

Tree SHA

fe4e2f1