diff --git a/.changeset/nervous-dolls-clean.md b/.changeset/nervous-dolls-clean.md
new file mode 100644
index 0000000000..5b31bdd3c7
--- /dev/null
+++ b/.changeset/nervous-dolls-clean.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: avoid double-calling a derived reference when destructuring `$derived` of another `$derived` during server-side rendering
diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js
index 2c7b14afa5..108f65a884 100644
--- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js
+++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js
@@ -102,9 +102,11 @@ export function VariableDeclaration(node, context) {
} else {
const call = /** @type {CallExpression} */ (declarator.init);
- let rhs = value;
+ // - cannot be a SpreadElement because refused during analysis
+ // - use args[0] rather than value to avoid visiting twice (above in const value = ... and below in for-ofs)
+ let rhs = /** @type {Expression} */ (call.arguments[0]);
- if (rune !== '$derived' || call.arguments[0].type !== 'Identifier') {
+ if (rune === '$derived.by' || call.arguments[0].type !== 'Identifier') {
const id = b.id(context.state.scope.generate('$$d'));
rhs = b.call(id);
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/_config.js
new file mode 100644
index 0000000000..a36c2adf7d
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/_config.js
@@ -0,0 +1,5 @@
+import { test } from '../../test';
+
+export default test({
+ html: ``
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/main.svelte b/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/main.svelte
new file mode 100644
index 0000000000..b1882243f4
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/derived-destructured-from-derived/main.svelte
@@ -0,0 +1,8 @@
+
+
+
+