diff --git a/.changeset/sixty-numbers-hope.md b/.changeset/sixty-numbers-hope.md
new file mode 100644
index 000000000000..eb1c94975002
--- /dev/null
+++ b/.changeset/sixty-numbers-hope.md
@@ -0,0 +1,5 @@
+---
+"svelte": patch
+---
+
+fix: support `$state.snapshot` as part of variable declarations
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/javascript-runes.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/javascript-runes.js
index 7857909aa523..7646ae78b7c0 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/javascript-runes.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/javascript-runes.js
@@ -197,7 +197,13 @@ export const javascript_visitors_runes = {
for (const declarator of node.declarations) {
const init = declarator.init;
const rune = get_rune(init, state.scope);
- if (!rune || rune === '$effect.active' || rune === '$effect.root' || rune === '$inspect') {
+ if (
+ !rune ||
+ rune === '$effect.active' ||
+ rune === '$effect.root' ||
+ rune === '$inspect' ||
+ rune === '$state.snapshot'
+ ) {
if (init != null && is_hoistable_function(init)) {
const hoistable_function = visit(init);
state.hoisted.push(
diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot/_config.js b/packages/svelte/tests/runtime-runes/samples/state-snapshot/_config.js
index c0d6357f14c9..1088a5189ca0 100644
--- a/packages/svelte/tests/runtime-runes/samples/state-snapshot/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot/_config.js
@@ -1,12 +1,12 @@
import { test } from '../../test';
export default test({
- html: ``,
+ html: `[{"a":0}] `,
async test({ assert, target }) {
const btn = target.querySelector('button');
await btn?.click();
- assert.htmlEqual(target.innerHTML, ``);
+ assert.htmlEqual(target.innerHTML, `[{"a":0}] `);
}
});
diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot/main.svelte b/packages/svelte/tests/runtime-runes/samples/state-snapshot/main.svelte
index ac438dacc49d..567b7fa537a1 100644
--- a/packages/svelte/tests/runtime-runes/samples/state-snapshot/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot/main.svelte
@@ -1,5 +1,7 @@
+{JSON.stringify(start)}