Svelte

Svelte 5 Best Practices

Svelte 5 Best Practices

Overview

Svelte 5 introduces Runes โ€” a universal, fine-grained reactivity system that replaces the Svelte 4 compiler-driven reactivity. This page documents production-ready patterns for Svelte 5 (v5.0+).

Core Runes

$state โ€” Reactive State

<script>
  // Primitive โ€” fine-grained
  let count = $state(0);
  
  // Object โ€” deeply reactive (proxied)
  let user = $state({ name: 'Ada', age: 36 });
  
  // Array โ€” deeply reactive
  let items = $state(['a', 'b', 'c']);
  
  // Raw โ€” no proxy, only reassignment triggers updates
  let rawData = $state.raw(largeApiResponse);
</script>

Key rules:

Svelte 5 Migration Guide

Svelte 5 Migration Guide

Overview

Complete guide for migrating Svelte 4 applications to Svelte 5. Covers breaking changes, codemods, and incremental adoption strategies.

Breaking Changes Summary

AreaSvelte 4Svelte 5
ReactivityCompiler-driven ($:)Runes ($state, $derived, $effect)
Propsexport let$props()
Slots<slot>Snippets ({#snippet}, {@render})
Eventson:clickonclick
ContextsetContext/getContextStill works, but $state modules preferred
DispatchcreateEventDispatcherCallback props

Automated Migration

1. Run the Official Codemod

npx @sveltejs/migrate@latest svelte-5

This handles: