Web Development 4 min read ·

Why Svelte 5 changed how I think about reactivity

Runes `$state` and `$derived` collapse years of hooks ceremony into plain JavaScript. Here is what six months of production Svelte 5 taught me.

Why Svelte 5 changed how I think about reactivity

Runes

Runes are the new reactivity primitives that give Svelte superlative fine-grained updates in plain JavaScript. Instead of `let count = 0` plus a compiler magic, you write `let count = $state(0)`.

What feels different

Derived values become `$derived`, and effects become `$effect`. The mental model collapses to: what is state, what reacts to state, and what runs as a side-effect. No dependency arrays, no stale-closure traps, no memo proliferation.

Why it matters

The compiler still does the heavy lifting — it knows exactly which components depend on which value, and only those re-render. Your application ships faster because there is no virtual DOM diffing at runtime.

The practical upshot

If you have been on React for years, expect a short window of disorientation and then genuine joy. Runes are simply a better description of state.

Svelte JavaScript Reactivity