svelte-knowledge-patch

Installation
SKILL.md

Svelte Knowledge Patch

Claude Opus 4.6 knows Svelte through 4.x and SvelteKit through 1.x. It is unaware of the features below, which cover Svelte 5.0 (released 2024-10-22).

Index

Topic Reference Key features
Runes references/runes.md $state, $state.raw, $state.snapshot, $derived, $derived.by, $effect, $effect.pre, $props, $bindable, $inspect
Snippets & events references/snippets-and-events.md {#snippet}, {@render}, children prop, callback props, mount/hydrate/unmount, Component type

Quick Reference: Svelte 4 to 5 Migration

Svelte 4 Svelte 5
let count = 0 (top-level) let count = $state(0)
$: doubled = count * 2 let doubled = $derived(count * 2)
$: { sideEffect() } $effect(() => { sideEffect() })
export let name let { name } = $props()
export let value + bind:value let { value = $bindable() } = $props()
<slot /> {@render children?.()} with let { children } = $props()
<slot name="header" /> {@render header()} with let { header } = $props()
<slot item={entry} /> + let:item {@render item(entry)} + {#snippet item(data)}...{/snippet}
on:click={handler} onclick={handler}
on:click|preventDefault onclick={(e) => { e.preventDefault(); handler(e) }}
createEventDispatcher() Callback props: let { onclick } = $props()
<svelte:component this={C} /> <C /> (dynamic by default)
new Component({ target }) mount(Component, { target })
$$props / $$restProps let props = $props() / let { ...rest } = $props()

Runes

Runes are $-prefixed compiler instructions for reactivity. They work in .svelte, .svelte.js, and .svelte.ts files.

<script>
  // Reactive state
  let count = $state(0);
  let items = $state([{ text: 'hello' }]); // deeply reactive

  // Computed values
  let doubled = $derived(count * 2);

  // Side effects (browser-only, runs after DOM update)
  $effect(() => {
    document.title = `Count: ${count}`;
    return () => { /* cleanup */ };
  });
</script>

<button onclick={() => count++}>
  {count} (doubled: {doubled})
</button>

Props and bindings

<script>
  let { label, count = 0, class: klass, ...rest } = $props();
  let { value = $bindable('') } = $props(); // opt-in two-way binding
</script>

Snippets

Replace slots with {#snippet} and {@render}:

<!-- Card.svelte -->
<script>
  let { title, children, footer } = $props();
</script>
<div class="card">
  <h2>{title}</h2>
  {@render children?.()}
  {#if footer}
    <div class="footer">{@render footer()}</div>
  {/if}
</div>

<!-- Usage -->
<Card title="Hello">
  <p>Default content goes here</p>
  {#snippet footer()}
    <button>OK</button>
  {/snippet}
</Card>

Events

Event handlers are regular properties. No more on: directive or createEventDispatcher.

<button onclick={handler}>Click</button>

Components accept callback props:

<!-- Child -->
<script>
  let { onchange } = $props();
</script>
<input onchange={(e) => onchange?.(e.target.value)} />

Component API

Components are functions. Use mount, hydrate, unmount from 'svelte':

import { mount, unmount } from 'svelte';
import App from './App.svelte';
const app = mount(App, { target: document.body, props: { name: 'world' } });
// unmount(app, { outro: true });

SSR: import { render } from 'svelte/server'


Shared Reactive Logic

Use .svelte.js / .svelte.ts files for runes outside components:

// store.svelte.js
export function createTodos() {
  let items = $state([]);
  return {
    get items() { return items },
    add: (text) => items.push({ text, done: false }),
  };
}

Reference Files

File Contents
runes.md $state, $state.raw, $state.snapshot, $derived, $derived.by, $effect, $effect.pre, $props, $bindable, $inspect, .svelte.js files
snippets-and-events.md {#snippet}, {@render}, children prop, event properties, callback props, mount/hydrate/unmount, Component type, migration
Related skills
Installs
3
GitHub Stars
19
First Seen
Apr 7, 2026
Security Audits