diff --git a/.changeset/silver-mice-double.md b/.changeset/silver-mice-double.md
new file mode 100644
index 000000000000..58e54286f2a7
--- /dev/null
+++ b/.changeset/silver-mice-double.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: properly update store values
diff --git a/packages/svelte/src/internal/client/reactivity/store.js b/packages/svelte/src/internal/client/reactivity/store.js
index 46e57b0fd072..0f491fdacafd 100644
--- a/packages/svelte/src/internal/client/reactivity/store.js
+++ b/packages/svelte/src/internal/client/reactivity/store.js
@@ -28,7 +28,7 @@ export function store_get(store, store_name, stores) {
 		entry.store = store ?? null;
 
 		if (store == null) {
-			set(entry.source, undefined);
+			entry.source.v = undefined; // see synchronous callback comment below
 			entry.unsubscribe = noop;
 		} else {
 			var is_synchronous_callback = true;
diff --git a/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte b/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte
index 36eb1875e099..5e13763ef766 100644
--- a/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte
@@ -9,10 +9,12 @@
 			return () => {};
 		}
 	};
+	let store3 = undefined;
 
 	// store signal is updated during reading this, which normally errors, but shouldn't for stores
 	let name = $derived($store1);
 	let hello = $derived($store2);
+	let undefined_value = $derived($store3);
 </script>
 
-<h1>{hello} {name}</h1>
+<h1>{hello} {name} {undefined_value}</h1>