diff --git a/.changeset/healthy-dancers-play.md b/.changeset/healthy-dancers-play.md
new file mode 100644
index 0000000000..6fe572bb67
--- /dev/null
+++ b/.changeset/healthy-dancers-play.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: improve prop binding warning validation for stores
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
index 82d49f0ad7..ef2cde82fd 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
@@ -214,6 +214,11 @@ export function client_component(analysis, options) {
: b.thunk(store_get)
)
);
+ if (dev) {
+ store_setup.push(
+ b.stmt(b.assignment('=', b.member(binding.node, b.id('$is_store')), b.literal(true)))
+ );
+ }
}
}
diff --git a/packages/svelte/src/internal/client/validate.js b/packages/svelte/src/internal/client/validate.js
index 415982a02b..16755f2517 100644
--- a/packages/svelte/src/internal/client/validate.js
+++ b/packages/svelte/src/internal/client/validate.js
@@ -105,7 +105,7 @@ export function validate_binding(binding, get_object, get_property, line, column
var filename = dev_current_component_function?.[FILENAME];
render_effect(() => {
- if (warned) return;
+ if (warned || get_object.$is_store) return;
var object = get_object();
var property = get_property();
diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte b/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte
new file mode 100644
index 0000000000..93207db1bb
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js b/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js
new file mode 100644
index 0000000000..e93067eb9d
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js
@@ -0,0 +1,11 @@
+import { test } from '../../test';
+
+export default test({
+ mode: ['client'],
+ compileOptions: {
+ dev: true
+ },
+ async test({ warnings, assert }) {
+ assert.deepEqual(warnings, []);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte b/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte
new file mode 100644
index 0000000000..a5477c914c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte
@@ -0,0 +1,9 @@
+
+
+
{$stuff.count}