Back to all guides
Reactivity advanced 6 min read

Managing Side Effects & untrack() in Svelte 5

Understand when to use $effect, how to handle teardowns, and how to read signals without creating reactivity dependencies using untrack().

Fine-Grained Effect Dependencies

In Svelte 5, $effect automatically tracks any reactive state read inside its body during execution.

Side Effects & Dependency Tracking

React 19 explicit dependency arrays vs Svelte 5 auto-tracked $effect dependencies.

❌ React 19
✨ Svelte 5 (Runes)

Preventing Unwanted Dependencies with untrack()

If you need to read a reactive signal inside an $effect without re-running the effect when that specific signal changes, wrap it in untrack():

import { untrack } from 'svelte';

let count = $state(0);
let totalClicks = $state(0);

$effect(() => {
	// Re-runs whenever 'count' changes, but ignores changes to 'totalClicks'
	console.log('Count:', count);
	console.log(
		'Total clicks snapshot:',
		untrack(() => totalClicks)
	);
});
Found an issue or want to improve this lesson? Edit this page on GitHub
S5
SuperSvelte
Svelte 5 + Hono RPC + Neon

The Batteries-Included Edge TS Framework

Stop assembling your stack from 15 npm packages. Super Svelte ships Auth, Neon DB, Redis SSE, OpenAPI 3.1 Hono RPC, Uploads, and Resend out-of-the-box with sub-10ms edge cold starts.

OpenAPI 3.1 Hono RPC
Better Auth & Multi-Tenancy
Neon DB + Drizzle ORM
Sub-10ms Edge Starts