Repository: sveltejs/eslint-plugin-svelte
Pull request #1034 (2025-01-19 02:55:11)

chore: add Svelte 5 docs for `prefer-destructured-store-props` rule

changeset-bot[bot]: ###  🦋  Changeset detected

Latest commit: baa64fed61262d8c7376c20b4ada0a782b0549a8

**The changes in this PR will be included in the next version bump.**

<details><summary>This PR includes changesets to release 1 package</summary>

  | Name                 | Type  |
| -------------------- | ----- |
| eslint-plugin-svelte | Patch |

</details>

Not sure what this means? [Click here  to learn what changesets are](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add another changeset to this PR](https://github.com/sveltejs/eslint-plugin-svelte/new/chore/prefer-destructured-store-props?filename=.changeset/chatty-needles-drum.md&value=---%0A%22eslint-plugin-svelte%22%3A%20patch%0A---%0A%0Achore%3A%20do%20not%20run%20%60prefer-destructured-store-props%60%20rule%20on%20Svelte%205%20with%20runes%0A)


pkg-pr-new[bot]: 
[Open in Stackblitz](https://pkg.pr.new/template/dc2b82e7-ace7-42b5-b244-043559644ce6)


```
npm i https://pkg.pr.new/eslint-plugin-svelte@1034
```


_commit: <a href="https://github.com/sveltejs/eslint-plugin-svelte/runs/35828653936"><code>baa64fe</code></a>_

marekdedic: Why this? You can still use stores with runes?
baseballyama: Does the performance differ depending on whether the GOOD or BAD syntax is used when Svelte 5 is run in runes mode?

```
<script>
  /* eslint svelte/prefer-destructured-store-props: "error" */
  import store from './store.js';
  $: ({ foo } = $store);
</script>

<!-- ✓ GOOD -->
{foo}

<!-- ✗ BAD -->
{$store.foo}
```

Patch:
diff --git a/.changeset/gorgeous-cats-exercise.md b/.changeset/gorgeous-cats-exercise.md
new file mode 100644
index 0000000..2db770b
--- /dev/null
+++ b/.changeset/gorgeous-cats-exercise.md
@@ -0,0 +1,31 @@
+---
+'eslint-plugin-svelte': major
+---
+
+**Enabled in recommended config**:
+- `svelte/infinite-reactive-loop`
+- `svelte/no-dom-manipulating`
+- `svelte/no-dupe-on-directives`
+- `svelte/no-dupe-use-directives`
+- `svelte/no-export-load-in-svelte-module-in-kit-pages`
+- `svelte/no-immutable-reactive-statements`
+- `svelte/no-inspect`
+- `svelte/no-raw-special-elements`
+- `svelte/no-reactive-functions`
+- `svelte/no-reactive-literals`
+- `svelte/no-reactive-reassign`
+- `svelte/no-store-async`
+- `svelte/no-svelte-internal`
+- `svelte/no-useless-children-snippet`
+- `svelte/no-useless-mustaches`
+- `svelte/require-each-key`
+- `svelte/require-event-dispatcher-types`
+- `svelte/require-store-reactive-access`
+- `svelte/require-stores-init`
+- `svelte/valid-each-key`
+- `svelte/valid-prop-names-in-kit-pages`
+
+**Removed from recommended config**:
+- `svelte/valid-compile`
+
+This update introduces breaking changes due to newly enabled rules.
diff --git a/.changeset/nine-walls-hammer.md b/.changeset/nine-walls-hammer.md
new file mode 100644
index 0000000..9f45727
--- /dev/null
+++ b/.changeset/nine-walls-hammer.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': patch
+---
+
+chore: run `require-event-dispatcher-types` rule on Svelte 3/4 only
diff --git a/.changeset/old-numbers-pull.md b/.changeset/old-numbers-pull.md
new file mode 100644
index 0000000..9bcf48b
--- /dev/null
+++ b/.changeset/old-numbers-pull.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': patch
+---
+
+fix: account for \n and \r in `TemplateLiteral` handling for the `no-useless-mustaches` rule
diff --git a/.changeset/stale-bobcats-laugh.md b/.changeset/stale-bobcats-laugh.md
new file mode 100644
index 0000000..8f6b5f0
--- /dev/null
+++ b/.changeset/stale-bobcats-laugh.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': patch
+---
+
+chore: do not run `no-reactive-literals` rule on Svelte 5 with runes
diff --git a/.changeset/swift-clocks-turn.md b/.changeset/swift-clocks-turn.md
new file mode 100644
index 0000000..f91bc65
--- /dev/null
+++ b/.changeset/swift-clocks-turn.md
@@ -0,0 +1,5 @@
+---
+'eslint-plugin-svelte': patch
+---
+
+chore: run `no-useless-children-snippet` rule on Svelte 5 only
diff --git a/README.md b/README.md
index 9ebcfd4..01eb6bd 100644
--- a/README.md
+++ b/README.md
@@ -319,22 +319,22 @@ These rules relate to possible syntax or logic errors in Svelte code:
 
 | Rule ID | Description |    |
 |:--------|:------------|:---|
-| [svelte/infinite-reactive-loop](https://sveltejs.github.io/eslint-plugin-svelte/rules/infinite-reactive-loop/) | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. |  |
-| [svelte/no-dom-manipulating](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/) | disallow DOM manipulating |  |
+| [svelte/infinite-reactive-loop](https://sveltejs.github.io/eslint-plugin-svelte/rules/infinite-reactive-loop/) | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. | :star: |
+| [svelte/no-dom-manipulating](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dom-manipulating/) | disallow DOM manipulating | :star: |
 | [svelte/no-dupe-else-if-blocks](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-else-if-blocks/) | disallow duplicate conditions in `{#if}` / `{:else if}` chains | :star: |
-| [svelte/no-dupe-on-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/) | disallow duplicate `on:` directives |  |
+| [svelte/no-dupe-on-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-on-directives/) | disallow duplicate `on:` directives | :star: |
 | [svelte/no-dupe-style-properties](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-style-properties/) | disallow duplicate style properties | :star: |
-| [svelte/no-dupe-use-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/) | disallow duplicate `use:` directives |  |
+| [svelte/no-dupe-use-directives](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-dupe-use-directives/) | disallow duplicate `use:` directives | :star: |
 | [svelte/no-not-function-handler](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-not-function-handler/) | disallow use of not function in event handler | :star: |
 | [svelte/no-object-in-text-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-object-in-text-mustaches/) | disallow objects in text mustache interpolation | :star: |
-| [svelte/no-raw-special-elements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-raw-special-elements/) | Checks for invalid raw HTML elements | :wrench: |
-| [svelte/no-reactive-reassign](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/) | disallow reassigning reactive values |  |
+| [svelte/no-raw-special-elements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-raw-special-elements/) | Checks for invalid raw HTML elements | :star::wrench: |
+| [svelte/no-reactive-reassign](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-reassign/) | disallow reassigning reactive values | :star: |
 | [svelte/no-shorthand-style-property-overrides](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-shorthand-style-property-overrides/) | disallow shorthand style properties that override related longhand properties | :star: |
-| [svelte/no-store-async](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-store-async/) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features |  |
+| [svelte/no-store-async](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-store-async/) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features | :star: |
 | [svelte/no-unknown-style-directive-property](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |
 | [svelte/require-store-callbacks-use-set-param](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-callbacks-use-set-param/) | store callbacks must use `set` param |  |
-| [svelte/require-store-reactive-access](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-reactive-access/) | disallow to use of the store itself as an operand. Need to use $ prefix or get function. | :wrench: |
-| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. | :star: |
+| [svelte/require-store-reactive-access](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-store-reactive-access/) | disallow to use of the store itself as an operand. Need to use $ prefix or get function. | :star::wrench: |
+| [svelte/valid-compile](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. |  |
 
 ## Security Vulnerability
 
@@ -355,23 +355,23 @@ These rules relate to better ways of doing things to help you avoid problems:
 | [svelte/button-has-type](https://sveltejs.github.io/eslint-plugin-svelte/rules/button-has-type/) | disallow usage of button without an explicit type attribute |  |
 | [svelte/no-at-debug-tags](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/) | disallow the use of `{@debug}` | :star: |
 | [svelte/no-ignored-unsubscribe](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-ignored-unsubscribe/) | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores. |  |
-| [svelte/no-immutable-reactive-statements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-immutable-reactive-statements/) | disallow reactive statements that don't reference reactive values. |  |
+| [svelte/no-immutable-reactive-statements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-immutable-reactive-statements/) | disallow reactive statements that don't reference reactive values. | :star: |
 | [svelte/no-inline-styles](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inline-styles/) | disallow attributes and directives that produce inline styles |  |
-| [svelte/no-inspect](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/) | Warns against the use of `$inspect` directive |  |
-| [svelte/no-reactive-functions](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-functions/) | it's not necessary to define functions in reactive statements | :bulb: |
-| [svelte/no-reactive-literals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/) | don't assign literal values in reactive statements | :bulb: |
-| [svelte/no-svelte-internal](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/) | svelte/internal will be removed in Svelte 6. |  |
+| [svelte/no-inspect](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inspect/) | Warns against the use of `$inspect` directive | :star: |
+| [svelte/no-reactive-functions](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-functions/) | it's not necessary to define functions in reactive statements | :star::bulb: |
+| [svelte/no-reactive-literals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/) | don't assign literal values in reactive statements | :star::bulb: |
+| [svelte/no-svelte-internal](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-svelte-internal/) | svelte/internal will be removed in Svelte 6. | :star: |
 | [svelte/no-unused-class-name](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-class-name/) | disallow the use of a class in the template without a corresponding style |  |
 | [svelte/no-unused-svelte-ignore](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-svelte-ignore/) | disallow unused svelte-ignore comments | :star: |
-| [svelte/no-useless-children-snippet](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-children-snippet/) | disallow explicit children snippet where it's not needed |  |
-| [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :wrench: |
+| [svelte/no-useless-children-snippet](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-children-snippet/) | disallow explicit children snippet where it's not needed | :star: |
+| [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :star::wrench: |
 | [svelte/prefer-const](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-const/) | Require `const` declarations for variables that are never reassigned after declared | :wrench: |
 | [svelte/prefer-destructured-store-props](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-destructured-store-props/) | destructure values from object stores for better change tracking & fewer redraws | :bulb: |
-| [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block |  |
-| [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` |  |
+| [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block | :star: |
+| [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` | :star: |
 | [svelte/require-optimized-style-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-optimized-style-attribute/) | require style attributes that can be optimized |  |
-| [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store |  |
-| [svelte/valid-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-each-key/) | enforce keys to use variables defined in the `{#each}` block |  |
+| [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store | :star: |
+| [svelte/valid-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-each-key/) | enforce keys to use variables defined in the `{#each}` block | :star: |
 
 ## Stylistic Issues
 
@@ -414,9 +414,9 @@ These rules relate to SvelteKit and its best Practices.
 
 | Rule ID | Description |    |
 |:--------|:------------|:---|
-| [svelte/no-export-load-in-svelte-module-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-export-load-in-svelte-module-in-kit-pages/) | disallow exporting load functions in `*.svelte` module in SvelteKit page components. |  |
+| [svelte/no-export-load-in-svelte-module-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-export-load-in-svelte-module-in-kit-pages/) | disallow exporting load functions in `*.svelte` module in SvelteKit page components. | :star: |
 | [svelte/no-navigation-without-base](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-navigation-without-base/) | disallow using navigation (links, goto, pushState, replaceState) without the base path |  |
-| [svelte/valid-prop-names-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-prop-names-in-kit-pages/) | disallow props other than data or errors in SvelteKit page components. |  |
+| [svelte/valid-prop-names-in-kit-pages](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-prop-names-in-kit-pages/) | disallow props other than data or errors in SvelteKit page components. | :star: |
 
 ## Experimental
 
diff --git a/docs-svelte-kit/package.json b/docs-svelte-kit/package.json
index 5ef0b0d..830321a 100644
--- a/docs-svelte-kit/package.json
+++ b/docs-svelte-kit/package.json
@@ -16,8 +16,8 @@
     "@babel/types": "^7.26.0",
     "@fontsource/fira-mono": "^5.1.0",
     "@ota-meshi/eslint-plugin": "^0.17.6",
-    "@shikijs/markdown-it": "^1.24.0",
-    "@shikijs/twoslash": "^1.24.0",
+    "@shikijs/markdown-it": "^2.0.0",
+    "@shikijs/twoslash": "^2.0.0",
     "@sindresorhus/slugify": "^2.2.1",
     "@sveltejs/adapter-static": "^3.0.6",
     "@sveltejs/kit": "^2.8.5",
diff --git a/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte b/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
index f0f7f1d..3248bb5 100644
--- a/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
+++ b/docs-svelte-kit/src/lib/sidemenu/UlMenu.svelte
@@ -7,7 +7,7 @@
 </script>
 
 <ul class="sidebar-menu sidebar-menu--level{level}">
-	{#each children as item}
+	{#each children as item (item.id)}
 		<li
 			class="sidebar-menu-item"
 			class:active={item.active || (item.path && isActive(item.path, $page))}
diff --git a/docs/rules.md b/docs/rules.md
index 5e710c5..5e509b0 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -14,24 +14,24 @@ sidebarDepth: 0
 
 These rules relate to possible syntax or logic errors in Svelte code:
 
-| Rule ID                                                                                          | Description                                                                                                                            |          |
-| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| [svelte/infinite-reactive-loop](./rules/infinite-reactive-loop.md)                               | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. |          |
-| [svelte/no-dom-manipulating](./rules/no-dom-manipulating.md)                                     | disallow DOM manipulating                                                                                                              |          |
-| [svelte/no-dupe-else-if-blocks](./rules/no-dupe-else-if-blocks.md)                               | disallow duplicate conditions in `{#if}` / `{:else if}` chains                                                                         | :star:   |
-| [svelte/no-dupe-on-directives](./rules/no-dupe-on-directives.md)                                 | disallow duplicate `on:` directives                                                                                                    |          |
-| [svelte/no-dupe-style-properties](./rules/no-dupe-style-properties.md)                           | disallow duplicate style properties                                                                                                    | :star:   |
-| [svelte/no-dupe-use-directives](./rules/no-dupe-use-directives.md)                               | disallow duplicate `use:` directives                                                                                                   |          |
-| [svelte/no-not-function-handler](./rules/no-not-function-handler.md)                             | disallow use of not function in event handler                                                                                          | :star:   |
-| [svelte/no-object-in-text-mustaches](./rules/no-object-in-text-mustaches.md)                     | disallow objects in text mustache interpolation                                                                                        | :star:   |
-| [svelte/no-raw-special-elements](./rules/no-raw-special-elements.md)                             | Checks for invalid raw HTML elements                                                                                                   | :wrench: |
-| [svelte/no-reactive-reassign](./rules/no-reactive-reassign.md)                                   | disallow reassigning reactive values                                                                                                   |          |
-| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties                                                          | :star:   |
-| [svelte/no-store-async](./rules/no-store-async.md)                                               | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features                          |          |
-| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md)     | disallow unknown `style:property`                                                                                                      | :star:   |
-| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param                                                                                                   |          |
-| [svelte/require-store-reactive-access](./rules/require-store-reactive-access.md)                 | disallow to use of the store itself as an operand. Need to use $ prefix or get function.                                               | :wrench: |
-| [svelte/valid-compile](./rules/valid-compile.md)                                                 | disallow warnings when compiling.                                                                                                      | :star:   |
+| Rule ID                                                                                          | Description                                                                                                                            |                |
+| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------- |
+| [svelte/infinite-reactive-loop](./rules/infinite-reactive-loop.md)                               | Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent. | :star:         |
+| [svelte/no-dom-manipulating](./rules/no-dom-manipulating.md)                                     | disallow DOM manipulating                                                                                                              | :star:         |
+| [svelte/no-dupe-else-if-blocks](./rules/no-dupe-else-if-blocks.md)                               | disallow duplicate conditions in `{#if}` / `{:else if}` chains                                                                         | :star:         |
+| [svelte/no-dupe-on-directives](./rules/no-dupe-on-directives.md)                                 | disallow duplicate `on:` directives                                                                                                    | :star:         |
+| [svelte/no-dupe-style-properties](./rules/no-dupe-style-properties.md)                           | disallow duplicate style properties                                                                                                    | :star:         |
+| [svelte/no-dupe-use-directives](./rules/no-dupe-use-directives.md)                               | disallow duplicate `use:` directives                                                                                                   | :star:         |
+| [svelte/no-not-function-handler](./rules/no-not-function-handler.md)                             | disallow use of not function in event handler                                                                                          | :star:         |
+| [svelte/no-object-in-text-mustaches](./rules/no-object-in-text-mustaches.md)                     | disallow objects in text mustache interpolation                                                                                        | :star:         |
+| [svelte/no-raw-special-elements](./rules/no-raw-special-elements.md)                             | Checks for invalid raw HTML elements                                                                                                   | :star::wrench: |
+| [svelte/no-reactive-reassign](./rules/no-reactive-reassign.md)                                   | disallow reassigning reactive values                                                                                                   | :star:         |
+| [svelte/no-shorthand-style-property-overrides](./rules/no-shorthand-style-property-overrides.md) | disallow shorthand style properties that override related longhand properties                                                          | :star:         |
+| [svelte/no-store-async](./rules/no-store-async.md)                                               | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features                          | :star:         |
+| [svelte/no-unknown-style-directive-property](./rules/no-unknown-style-directive-property.md)     | disallow unknown `style:property`                                                                                                      | :star:         |
+| [svelte/require-store-callbacks-use-set-param](./rules/require-store-callbacks-use-set-param.md) | store callbacks must use `set` param                                                                                                   |                |
+| [svelte/require-store-reactive-access](./rules/require-store-reactive-access.md)                 | disallow to use of the store itself as an operand. Need to use $ prefix or get function.                                               | :star::wrench: |
+| [svelte/valid-compile](./rules/valid-compile.md)                                                 | disallow warnings when compiling.                                                                                                      |                |
 
 ## Security Vulnerability
 
@@ -46,29 +46,29 @@ These rules relate to security vulnerabilities in Svelte code:
 
 These rules relate to better ways of doing things to help you avoid problems:
 
-| Rule ID                                                                                  | Description                                                                                                                               |          |
-| :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| [svelte/block-lang](./rules/block-lang.md)                                               | disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks. | :bulb:   |
-| [svelte/button-has-type](./rules/button-has-type.md)                                     | disallow usage of button without an explicit type attribute                                                                               |          |
-| [svelte/no-at-debug-tags](./rules/no-at-debug-tags.md)                                   | disallow the use of `{@debug}`                                                                                                            | :star:   |
-| [svelte/no-ignored-unsubscribe](./rules/no-ignored-unsubscribe.md)                       | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.                                                  |          |
-| [svelte/no-immutable-reactive-statements](./rules/no-immutable-reactive-statements.md)   | disallow reactive statements that don't reference reactive values.                                                                        |          |
-| [svelte/no-inline-styles](./rules/no-inline-styles.md)                                   | disallow attributes and directives that produce inline styles                                                                             |          |
-| [svelte/no-inspect](./rules/no-inspect.md)                                               | Warns against the use of `$inspect` directive                                                                                             |          |
-| [svelte/no-reactive-functions](./rules/no-reactive-functions.md)                         | it's not necessary to define functions in reactive statements                                                                             | :bulb:   |
-| [svelte/no-reactive-literals](./rules/no-reactive-literals.md)                           | don't assign literal values in reactive statements                                                                                        | :bulb:   |
-| [svelte/no-svelte-internal](./rules/no-svelte-internal.md)                               | svelte/internal will be removed in Svelte 6.                                                                                              |          |
-| [svelte/no-unused-class-name](./rules/no-unused-class-name.md)                           | disallow the use of a class in the template without a corresponding style                                                                 |          |
-| [svelte/no-unused-svelte-ignore](./rules/no-unused-svelte-ignore.md)                     | disallow unused svelte-ignore comments                                                                                                    | :star:   |
-| [svelte/no-useless-children-snippet](./rules/no-useless-children-snippet.md)             | disallow explicit children snippet where it's not needed                                                                                  |          |
-| [svelte/no-useless-mustaches](./rules/no-useless-mustaches.md)                           | disallow unnecessary mustache interpolations                                                                                              | :wrench: |
-| [svelte/prefer-const](./rules/prefer-const.md)                                           | Require `const` declarations for variables that are never reassigned after declared                                                       | :wrench: |
-| [svelte/prefer-destructured-store-props](./rules/prefer-destructured-store-props.md)     | destructure values from object stores for better change tracking & fewer redraws                                                          | :bulb:   |
-| [svelte/require-each-key](./rules/require-each-key.md)                                   | require keyed `{#each}` block                                                                                                             |          |
-| [svelte/require-event-dispatcher-types](./rules/require-event-dispatcher-types.md)       | require type parameters for `createEventDispatcher`                                                                                       |          |
-| [svelte/require-optimized-style-attribute](./rules/require-optimized-style-attribute.md) | require style attributes that can be optimized                                                                                            |          |
-| [svelte/require-stores-init](./rules/require-stores-init.md)                             | require initial value in store                                                                                                            |          |
-| [svelte/valid-each-key](./rules/valid-each-key.md)                                       | enforce keys to use variables defined in the `{#each}` block                                                                              |          |
+| Rule ID                                                                                  | Description                                                                                                                               |                |
+| :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------------- |
+| [svelte/block-lang](./rules/block-lang.md)                                               | disallows the use of languages other than those specified in the configuration for the lang attribute of `<script>` and `<style>` blocks. | :bulb:         |
+| [svelte/button-has-type](./rules/button-has-type.md)                                     | disallow usage of button without an explicit type attribute                                                                               |                |
+| [svelte/no-at-debug-tags](./rules/no-at-debug-tags.md)                                   | disallow the use of `{@debug}`                                                                                                            | :star:         |
+| [svelte/no-ignored-unsubscribe](./rules/no-ignored-unsubscribe.md)                       | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores.                                                  |                |
+| [svelte/no-immutable-reactive-statements](./rules/no-immutable-reactive-statements.md)   | disallow reactive statements that don't reference reactive values.                                                                        | :star:         |
+| [svelte/no-inline-styles](./rules/no-inline-styles.md)                                   | disallow attributes and directives that produce inline styles                                                                             |                |
+| [svelte/no-inspect](./rules/no-inspect.md)                                               | Warns against the use of `$inspect` directive                                                                                             | :star:         |
+| [svelte/no-reactive-functions](./rules/no-reactive-functions.md)                         | it's not necessary to define functions in reactive statements                                                                             | :star::bulb:   |
+| [svelte/no-reactive-literals](./rules/no-reactive-literals.md)                           | don't assign literal values in reactive statements                                                                                        | :star::bulb:   |
+| [svelte/no-svelte-internal](./rules/no-svelte-internal.md)                               | svelte/internal will be removed in Svelte 6.                                                                                              | :star:         |
+| [svelte/no-unused-class-name](./rules/no-unused-class-name.md)                           | disallow the use of a class in the template without a corresponding style                                                                 |                |
+| [svelte/no-unused-svelte-ignore](./rules/no-unused-svelte-ignore.md)                     | disallow unused svelte-ignore comments                                                                                                    | :star:         |
+| [svelte/no-useless-children-snippet](./rules/no-useless-children-snippet.md)             | disallow explicit children snippet where it's not needed                                                                                  | :star:         |
+| [svelte/no-useless-mustaches](./rules/no-useless-mustaches.md)                           | disallow unnecessary mustache interpolations                                                                                              | :star::wrench: |
+| [svelte/prefer-const](./rules/prefer-const.md)                                           | Require `const` declarations for variables that are never reassigned after declared                                                       | :wrench:       |
+| [svelte/prefer-destructured-store-props](./rules/prefer-destructured-store-props.md)     | destructure values from object stores for better change tracking & fewer redraws                                                          | :bulb:         |
+| [svelte/require-each-key](./rules/require-each-key.md)                                   | require keyed `{#each}` block                                                                                                             | :star:         |
+| [svelte/require-event-dispatcher-types](./rules/require-event-dispatcher-types.md)       | require type parameters for `createEventDispatcher`                                                                                       | :star:         |
+| [svelte/require-optimized-style-attribute](./rules/require-optimized-style-attribute.md) | require style attributes that can be optimized                                                                                            |                |
+| [svelte/require-stores-init](./rules/require-stores-init.md)                             | require initial value in store                                                                                                            | :star:         |
+| [svelte/valid-each-key](./rules/valid-each-key.md)                                       | enforce keys to use variables defined in the `{#each}` block                                                                              | :star:         |
 
 ## Stylistic Issues
 
@@ -109,11 +109,11 @@ These rules extend the rules provided by ESLint itself, or other plugins to work
 
 These rules relate to SvelteKit and its best Practices.
 
-| Rule ID                                                                                                        | Description                                                                            |     |
-| :------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :-- |
-| [svelte/no-export-load-in-svelte-module-in-kit-pages](./rules/no-export-load-in-svelte-module-in-kit-pages.md) | disallow exporting load functions in `*.svelte` module in SvelteKit page components.   |     |
-| [svelte/no-navigation-without-base](./rules/no-navigation-without-base.md)                                     | disallow using navigation (links, goto, pushState, replaceState) without the base path |     |
-| [svelte/valid-prop-names-in-kit-pages](./rules/valid-prop-names-in-kit-pages.md)                               | disallow props other than data or errors in SvelteKit page components.                 |     |
+| Rule ID                                                                                                        | Description                                                                            |        |
+| :------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :----- |
+| [svelte/no-export-load-in-svelte-module-in-kit-pages](./rules/no-export-load-in-svelte-module-in-kit-pages.md) | disallow exporting load functions in `*.svelte` module in SvelteKit page components.   | :star: |
+| [svelte/no-navigation-without-base](./rules/no-navigation-without-base.md)                                     | disallow using navigation (links, goto, pushState, replaceState) without the base path |        |
+| [svelte/valid-prop-names-in-kit-pages](./rules/valid-prop-names-in-kit-pages.md)                               | disallow props other than data or errors in SvelteKit page components.                 | :star: |
 
 ## Experimental
 
diff --git a/docs/rules/infinite-reactive-loop.md b/docs/rules/infinite-reactive-loop.md
index 30da359..aa76e2f 100644
--- a/docs/rules/infinite-reactive-loop.md
+++ b/docs/rules/infinite-reactive-loop.md
@@ -10,6 +10,8 @@ since: 'v2.16.0'
 
 > Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 Svelte runtime prevents calling the same reactive statement twice in a microtask.<br/>
diff --git a/docs/rules/no-dom-manipulating.md b/docs/rules/no-dom-manipulating.md
index 8a0ddec..e6ac3d1 100644
--- a/docs/rules/no-dom-manipulating.md
+++ b/docs/rules/no-dom-manipulating.md
@@ -10,6 +10,8 @@ since: 'v2.13.0'
 
 > disallow DOM manipulating
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 In general, DOM manipulating should delegate to Svelte runtime. If you manipulate the DOM directly, the Svelte runtime may confuse because there is a difference between the actual DOM and the Svelte runtime's expected DOM.
diff --git a/docs/rules/no-dupe-on-directives.md b/docs/rules/no-dupe-on-directives.md
index 12823fc..777c9f0 100644
--- a/docs/rules/no-dupe-on-directives.md
+++ b/docs/rules/no-dupe-on-directives.md
@@ -10,6 +10,8 @@ since: 'v2.14.0'
 
 > disallow duplicate `on:` directives
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 We can define any number of `on:` directive with the same event name, but duplicate directives with the exact same event name and expression are probably a mistake.
diff --git a/docs/rules/no-dupe-use-directives.md b/docs/rules/no-dupe-use-directives.md
index da1b6dd..956d695 100644
--- a/docs/rules/no-dupe-use-directives.md
+++ b/docs/rules/no-dupe-use-directives.md
@@ -10,6 +10,8 @@ since: 'v2.14.0'
 
 > disallow duplicate `use:` directives
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 We can define any number of `use:` directive with the same action, but duplicate directives with the exact same action and expression are probably a mistake.
diff --git a/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md b/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
index 45bf702..5c6ccab 100644
--- a/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
+++ b/docs/rules/no-export-load-in-svelte-module-in-kit-pages.md
@@ -10,6 +10,8 @@ since: 'v2.12.0'
 
 > disallow exporting load functions in `*.svelte` module in SvelteKit page components.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports unexpected exported `load` function at `<script context="module">`.
diff --git a/docs/rules/no-immutable-reactive-statements.md b/docs/rules/no-immutable-reactive-statements.md
index 956e10f..9109a6b 100644
--- a/docs/rules/no-immutable-reactive-statements.md
+++ b/docs/rules/no-immutable-reactive-statements.md
@@ -10,6 +10,8 @@ since: 'v2.27.0'
 
 > disallow reactive statements that don't reference reactive values.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports if all variables referenced in reactive statements are immutable. That reactive statement is immutable and not reactive.
diff --git a/docs/rules/no-inspect.md b/docs/rules/no-inspect.md
index 07eb48d..f671135 100644
--- a/docs/rules/no-inspect.md
+++ b/docs/rules/no-inspect.md
@@ -10,6 +10,8 @@ since: 'v2.45.0'
 
 > Warns against the use of `$inspect` directive
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports usages of `$inspect`.
diff --git a/docs/rules/no-raw-special-elements.md b/docs/rules/no-raw-special-elements.md
index 30d9653..1e6f9bc 100644
--- a/docs/rules/no-raw-special-elements.md
+++ b/docs/rules/no-raw-special-elements.md
@@ -10,6 +10,7 @@ since: 'v3.0.0-next.1'
 
 > Checks for invalid raw HTML elements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-functions.md b/docs/rules/no-reactive-functions.md
index ff88faf..d81f186 100644
--- a/docs/rules/no-reactive-functions.md
+++ b/docs/rules/no-reactive-functions.md
@@ -10,6 +10,7 @@ since: 'v2.5.0'
 
 > it's not necessary to define functions in reactive statements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-literals.md b/docs/rules/no-reactive-literals.md
index 286eded..d0633ae 100644
--- a/docs/rules/no-reactive-literals.md
+++ b/docs/rules/no-reactive-literals.md
@@ -10,6 +10,7 @@ since: 'v2.4.0'
 
 > don't assign literal values in reactive statements
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :bulb: Some problems reported by this rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).
 
 ## :book: Rule Details
diff --git a/docs/rules/no-reactive-reassign.md b/docs/rules/no-reactive-reassign.md
index 2635d30..210ad9d 100644
--- a/docs/rules/no-reactive-reassign.md
+++ b/docs/rules/no-reactive-reassign.md
@@ -10,6 +10,8 @@ since: 'v2.27.0'
 
 > disallow reassigning reactive values
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule aims to prevent unintended behavior caused by modification or reassignment of reactive values.
diff --git a/docs/rules/no-store-async.md b/docs/rules/no-store-async.md
index 5285688..6cdd6b6 100644
--- a/docs/rules/no-store-async.md
+++ b/docs/rules/no-store-async.md
@@ -10,6 +10,8 @@ since: 'v2.7.0'
 
 > disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports all uses of async/await inside svelte stores.
diff --git a/docs/rules/no-svelte-internal.md b/docs/rules/no-svelte-internal.md
index a1160b2..22c995d 100644
--- a/docs/rules/no-svelte-internal.md
+++ b/docs/rules/no-svelte-internal.md
@@ -10,6 +10,8 @@ since: 'v2.39.0'
 
 > svelte/internal will be removed in Svelte 6.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports the use of the deprecated API `svelte/internal` and `svelte/internal/xxx`. `svelte/internal` is deprecated in Svelte 5. And it will be deleted in Svelte 6. These APIs can change in breaking ways at any time without notice.
diff --git a/docs/rules/no-useless-children-snippet.md b/docs/rules/no-useless-children-snippet.md
index 6e798ee..e27a1e7 100644
--- a/docs/rules/no-useless-children-snippet.md
+++ b/docs/rules/no-useless-children-snippet.md
@@ -10,6 +10,8 @@ since: 'v3.0.0-next.9'
 
 > disallow explicit children snippet where it's not needed
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 Any content inside component tags that is not a snippet declaration implicitly becomes part of the children snippet. Thus, declaring the children snippet explicitly is only necessary when the snippet has parameters.
diff --git a/docs/rules/no-useless-mustaches.md b/docs/rules/no-useless-mustaches.md
index b4bf377..5ded185 100644
--- a/docs/rules/no-useless-mustaches.md
+++ b/docs/rules/no-useless-mustaches.md
@@ -10,6 +10,7 @@ since: 'v0.0.4'
 
 > disallow unnecessary mustache interpolations
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/prefer-destructured-store-props.md b/docs/rules/prefer-destructured-store-props.md
index 66ac5a1..ce9890b 100644
--- a/docs/rules/prefer-destructured-store-props.md
+++ b/docs/rules/prefer-destructured-store-props.md
@@ -24,7 +24,10 @@ An example of the improvements can be see in this [REPL](https://svelte.dev/repl
 <script>
   /* eslint svelte/prefer-destructured-store-props: "error" */
   import store from './store.js';
+  // Svelte3/4
   $: ({ foo } = $store);
+  // Svelte5 with Runes
+  let foo = $derived($store.foo);
 </script>
 
 <!-- ✓ GOOD -->
diff --git a/docs/rules/require-each-key.md b/docs/rules/require-each-key.md
index 03bf626..af8186b 100644
--- a/docs/rules/require-each-key.md
+++ b/docs/rules/require-each-key.md
@@ -10,6 +10,8 @@ since: 'v2.28.0'
 
 > require keyed `{#each}` block
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports `{#each}` block without key
diff --git a/docs/rules/require-event-dispatcher-types.md b/docs/rules/require-event-dispatcher-types.md
index e89b0ec..7ee6273 100644
--- a/docs/rules/require-event-dispatcher-types.md
+++ b/docs/rules/require-event-dispatcher-types.md
@@ -10,6 +10,8 @@ since: 'v2.16.0'
 
 > require type parameters for `createEventDispatcher`
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule is aimed to enforce type parameters when calling `createEventDispatcher`. Adding types makes all `dispatch` calls as well as all event listeners typechecked. For more information, see the [svelte docs](https://github.com/sveltejs/language-tools/blob/master/docs/preprocessors/typescript.md#typing-component-events).
diff --git a/docs/rules/require-store-reactive-access.md b/docs/rules/require-store-reactive-access.md
index 6ade59c..b8d917c 100644
--- a/docs/rules/require-store-reactive-access.md
+++ b/docs/rules/require-store-reactive-access.md
@@ -10,6 +10,7 @@ since: 'v2.12.0'
 
 > disallow to use of the store itself as an operand. Need to use $ prefix or get function.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
 - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
 
 ## :book: Rule Details
diff --git a/docs/rules/require-stores-init.md b/docs/rules/require-stores-init.md
index 13dcc99..177dd3c 100644
--- a/docs/rules/require-stores-init.md
+++ b/docs/rules/require-stores-init.md
@@ -10,6 +10,8 @@ since: 'v2.5.0'
 
 > require initial value in store
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule is aimed to enforce initial values when initializing the Svelte stores.
diff --git a/docs/rules/valid-compile.md b/docs/rules/valid-compile.md
index 8783b30..567ad6c 100644
--- a/docs/rules/valid-compile.md
+++ b/docs/rules/valid-compile.md
@@ -10,8 +10,6 @@ since: 'v0.7.0'
 
 > disallow warnings when compiling.
 
-- :gear: This rule is included in `"plugin:svelte/recommended"`.
-
 ## :book: Rule Details
 
 This rule uses Svelte compiler to check the source code.
diff --git a/docs/rules/valid-each-key.md b/docs/rules/valid-each-key.md
index bf2d476..5e6aa57 100644
--- a/docs/rules/valid-each-key.md
+++ b/docs/rules/valid-each-key.md
@@ -10,6 +10,8 @@ since: 'v2.28.0'
 
 > enforce keys to use variables defined in the `{#each}` block
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports that `{#each}` block keys does not use the variables which are defined by the `{#each}` block.
diff --git a/docs/rules/valid-prop-names-in-kit-pages.md b/docs/rules/valid-prop-names-in-kit-pages.md
index 0400848..7162f4b 100644
--- a/docs/rules/valid-prop-names-in-kit-pages.md
+++ b/docs/rules/valid-prop-names-in-kit-pages.md
@@ -10,6 +10,8 @@ since: 'v2.12.0'
 
 > disallow props other than data or errors in SvelteKit page components.
 
+- :gear: This rule is included in `"plugin:svelte/recommended"`.
+
 ## :book: Rule Details
 
 This rule reports unexpected exported variables at `<script>`.<br>
diff --git a/package.json b/package.json
index 5caf23a..44892ce 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
     "@typescript-eslint/parser": "^8.16.0",
     "c8": "^10.1.2",
     "env-cmd": "^10.1.0",
-    "eslint": "~9.18.0",
+    "eslint": "~9.19.0",
     "eslint-config-prettier": "^10.0.0",
     "eslint-formatter-friendly": "^7.0.0",
     "eslint-plugin-eslint-plugin": "^6.3.2",
diff --git a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
index 278704d..fc7f089 100644
--- a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
+++ b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts
@@ -10,18 +10,38 @@ const config: Linter.Config[] = [
 		rules: {
 			// eslint-plugin-svelte rules
 			'svelte/comment-directive': 'error',
+			'svelte/infinite-reactive-loop': 'error',
 			'svelte/no-at-debug-tags': 'warn',
 			'svelte/no-at-html-tags': 'error',
+			'svelte/no-dom-manipulating': 'error',
 			'svelte/no-dupe-else-if-blocks': 'error',
+			'svelte/no-dupe-on-directives': 'error',
 			'svelte/no-dupe-style-properties': 'error',
+			'svelte/no-dupe-use-directives': 'error',
+			'svelte/no-export-load-in-svelte-module-in-kit-pages': 'error',
+			'svelte/no-immutable-reactive-statements': 'error',
 			'svelte/no-inner-declarations': 'error',
+			'svelte/no-inspect': 'warn',
 			'svelte/no-not-function-handler': 'error',
 			'svelte/no-object-in-text-mustaches': 'error',
+			'svelte/no-raw-special-elements': 'error',
+			'svelte/no-reactive-functions': 'error',
+			'svelte/no-reactive-literals': 'error',
+			'svelte/no-reactive-reassign': 'error',
 			'svelte/no-shorthand-style-property-overrides': 'error',
+			'svelte/no-store-async': 'error',
+			'svelte/no-svelte-internal': 'error',
 			'svelte/no-unknown-style-directive-property': 'error',
 			'svelte/no-unused-svelte-ignore': 'error',
+			'svelte/no-useless-children-snippet': 'error',
+			'svelte/no-useless-mustaches': 'error',
+			'svelte/require-each-key': 'error',
+			'svelte/require-event-dispatcher-types': 'error',
+			'svelte/require-store-reactive-access': 'error',
+			'svelte/require-stores-init': 'error',
 			'svelte/system': 'error',
-			'svelte/valid-compile': 'error'
+			'svelte/valid-each-key': 'error',
+			'svelte/valid-prop-names-in-kit-pages': 'error'
 		}
 	}
 ];
diff --git a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
index ff7c6b4..fba1ac9 100644
--- a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
+++ b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts
@@ -136,7 +136,7 @@ export default createRule('@typescript-eslint/no-unnecessary-condition', {
 			noStrictNullCheck:
 				'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.'
 		},
-		type: 'suggestion', // "problem", or "layout",
+		type: 'suggestion',
 		deprecated: true,
 		replacedBy: {
 			note: 'This rule is no longer needed when using svelte-eslint-parser>=v0.19.0.'
diff --git a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
index 621dfef..1770f79 100644
--- a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
+++ b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts
@@ -369,8 +369,7 @@ export default createRule('infinite-reactive-loop', {
 			description:
 				"Svelte runtime prevents calling the same reactive statement twice in a microtask. But between different microtask, it doesn't prevent.",
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
index 0b5e7b7..08145f8 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts
@@ -35,7 +35,7 @@ export default createRule('no-dom-manipulating', {
 		docs: {
 			description: 'disallow DOM manipulating',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
index 9762567..0b1bf87 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts
@@ -9,7 +9,7 @@ export default createRule('no-dupe-on-directives', {
 		docs: {
 			description: 'disallow duplicate `on:` directives',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
index 09f6ef3..9c27fe0 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts
@@ -9,7 +9,7 @@ export default createRule('no-dupe-use-directives', {
 		docs: {
 			description: 'disallow duplicate `use:` directives',
 			category: 'Possible Errors',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
index 0a39a4e..e4ce141 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts
@@ -7,8 +7,7 @@ export default createRule('no-export-load-in-svelte-module-in-kit-pages', {
 			description:
 				'disallow exporting load functions in `*.svelte` module in SvelteKit page components.',
 			category: 'SvelteKit',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
index d6cba52..d9ed4db 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts
@@ -10,8 +10,7 @@ export default createRule('no-immutable-reactive-statements', {
 		docs: {
 			description: "disallow reactive statements that don't reference reactive values.",
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
index b085d2a..c31c83e 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts
@@ -7,8 +7,7 @@ export default createRule('no-inspect', {
 		docs: {
 			description: 'Warns against the use of `$inspect` directive',
 			category: 'Best Practices',
-			// TODO: Enable recommended in major version
-			recommended: false,
+			recommended: true,
 			default: 'warn'
 		},
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
index 84394c7..094090c 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts
@@ -33,7 +33,7 @@ export default createRule('no-not-function-handler', {
 		messages: {
 			unexpected: 'Unexpected {{phrase}} in event handler.'
 		},
-		type: 'problem' // "problem", or "layout",
+		type: 'problem'
 	},
 	create(context) {
 		/** Find data expression */
diff --git a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
index 473afc9..070a698 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts
@@ -19,7 +19,7 @@ export default createRule('no-object-in-text-mustaches', {
 		messages: {
 			unexpected: 'Unexpected {{phrase}} in text mustache interpolation.'
 		},
-		type: 'problem' // "problem", or "layout",
+		type: 'problem'
 	},
 	create(context) {
 		return {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts b/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
index 14fd963..36c8829 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-raw-special-elements.ts
@@ -9,8 +9,7 @@ export default createRule('no-raw-special-elements', {
 		docs: {
 			description: 'Checks for invalid raw HTML elements',
 			category: 'Possible Errors',
-			// TODO: Switch to recommended in the major version
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
index 0fa6974..43ca14b 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts
@@ -8,7 +8,7 @@ export default createRule('no-reactive-functions', {
 		docs: {
 			description: "it's not necessary to define functions in reactive statements",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		hasSuggestions: true,
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
index 54da572..9931360 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts
@@ -7,7 +7,7 @@ export default createRule('no-reactive-literals', {
 		docs: {
 			description: "don't assign literal values in reactive statements",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		hasSuggestions: true,
 		schema: [],
@@ -15,7 +15,16 @@ export default createRule('no-reactive-literals', {
 			noReactiveLiterals: `Do not assign literal values inside reactive statements unless absolutely necessary.`,
 			fixReactiveLiteral: `Move the literal out of the reactive statement into an assignment`
 		},
-		type: 'suggestion'
+		type: 'suggestion',
+		conditions: [
+			{
+				svelteVersions: ['3/4']
+			},
+			{
+				svelteVersions: ['5'],
+				runes: [false, 'undetermined']
+			}
+		]
 	},
 	create(context) {
 		return {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
index fb357cf..f379317 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts
@@ -9,8 +9,7 @@ export default createRule('no-reactive-reassign', {
 		docs: {
 			description: 'disallow reassigning reactive values',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [
 			{
diff --git a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
index aee2e1f..66ba546 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts
@@ -7,9 +7,7 @@ export default createRule('no-store-async', {
 			description:
 				'disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false,
+			recommended: true,
 			default: 'error'
 		},
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
index de3b67d..38cab21 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts
@@ -6,9 +6,7 @@ export default createRule('no-svelte-internal', {
 		docs: {
 			description: 'svelte/internal will be removed in Svelte 6.',
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
index a9e730b..28d86e8 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-useless-children-snippet.ts
@@ -5,13 +5,18 @@ export default createRule('no-useless-children-snippet', {
 		docs: {
 			description: "disallow explicit children snippet where it's not needed",
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
 			uselessSnippet: 'Found an unnecessary children snippet.'
 		},
-		type: 'suggestion'
+		type: 'suggestion',
+		conditions: [
+			{
+				svelteVersions: ['5']
+			}
+		]
 	},
 	create(context) {
 		return {
diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
index 56c80c3..169cc8e 100644
--- a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
+++ b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts
@@ -20,7 +20,7 @@ export default createRule('no-useless-mustaches', {
 		docs: {
 			description: 'disallow unnecessary mustache interpolations',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		fixable: 'code',
 		schema: [
@@ -81,6 +81,10 @@ export default createRule('no-useless-mustaches', {
 				return;
 			}
 
+			if (expression.type === 'TemplateLiteral' && /[\n\r]/.test(rawValue)) {
+				return;
+			}
+
 			let hasEscape = false;
 			if (rawValue !== strValue) {
 				// check escapes
diff --git a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
index 7303427..1e7916b 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts
@@ -6,7 +6,7 @@ export default createRule('require-each-key', {
 		docs: {
 			description: 'require keyed `{#each}` block',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: { expectedKey: 'Each block should have a key' },
diff --git a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
index 1217a9e..41f2dbf 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts
@@ -9,13 +9,18 @@ export default createRule('require-event-dispatcher-types', {
 		docs: {
 			description: 'require type parameters for `createEventDispatcher`',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
 			missingTypeParameter: `Type parameters missing for the \`createEventDispatcher\` function call.`
 		},
-		type: 'suggestion'
+		type: 'suggestion',
+		conditions: [
+			{
+				svelteVersions: ['3/4']
+			}
+		]
 	},
 	create(context) {
 		let isTs = false;
diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
index 957a497..cfeed35 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts
@@ -10,9 +10,7 @@ export default createRule('require-store-reactive-access', {
 			description:
 				'disallow to use of the store itself as an operand. Need to use $ prefix or get function.',
 			category: 'Possible Errors',
-			// TODO Switch to recommended in the major version.
-			// recommended: true,
-			recommended: false
+			recommended: true
 		},
 		fixable: 'code',
 		schema: [],
diff --git a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
index 3811304..820267e 100644
--- a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
+++ b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts
@@ -6,7 +6,7 @@ export default createRule('require-stores-init', {
 		docs: {
 			description: 'require initial value in store',
 			category: 'Best Practices',
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
index 992cc55..ce68c44 100644
--- a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
+++ b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts
@@ -24,7 +24,7 @@ export default createRule('shorthand-attribute', {
 			expectedShorthand: 'Expected shorthand attribute.',
 			expectedRegular: 'Expected regular attribute syntax.'
 		},
-		type: 'layout' // "problem", or "layout",
+		type: 'layout'
 	},
 	create(context) {
 		const sourceCode = getSourceCode(context);
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
index 178fe3b..097133f 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts
@@ -30,7 +30,7 @@ export default createRule('valid-compile', {
 		docs: {
 			description: 'disallow warnings when compiling.',
 			category: 'Possible Errors',
-			recommended: true
+			recommended: false
 		},
 		schema: [
 			{
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
index 5bcc29d..af2f223 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts
@@ -7,8 +7,7 @@ export default createRule('valid-each-key', {
 		docs: {
 			description: 'enforce keys to use variables defined in the `{#each}` block',
 			category: 'Best Practices',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {
diff --git a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
index 9519414..e846110 100644
--- a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
+++ b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts
@@ -27,8 +27,7 @@ export default createRule('valid-prop-names-in-kit-pages', {
 		docs: {
 			description: 'disallow props other than data or errors in SvelteKit page components.',
 			category: 'SvelteKit',
-			// TODO Switch to recommended in the major version.
-			recommended: false
+			recommended: true
 		},
 		schema: [],
 		messages: {


Test patch:
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte
new file mode 100644
index 0000000..18ac5de
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/valid/valid-test02-input.svelte
@@ -0,0 +1,5 @@
+<HyperMD
+	value={`# Doc
+
+Text goes here`}
+/>
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/_requirements.json
new file mode 100644
index 0000000..b650cc2
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/invalid/_requirements.json
@@ -0,0 +1,3 @@
+{
+	"svelte": "^3.0.0 || ^4.0.0"
+}
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/_requirements.json
new file mode 100644
index 0000000..b650cc2
--- /dev/null
+++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/require-event-dispatcher-types/valid/_requirements.json
@@ -0,0 +1,3 @@
+{
+	"svelte": "^3.0.0 || ^4.0.0"
+}