diff --git a/.changeset/tasty-houses-behave.md b/.changeset/tasty-houses-behave.md
new file mode 100644
index 000000000..e3a2d861f
--- /dev/null
+++ b/.changeset/tasty-houses-behave.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-svelte": minor
+---
+
+Added the experimental-require-strict-events rule
diff --git a/README.md b/README.md
index 534bc6460..fa50c9e85 100644
--- a/README.md
+++ b/README.md
@@ -373,6 +373,14 @@ These rules extend the rules provided by ESLint itself, or other plugins to work
| [svelte/no-inner-declarations](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-inner-declarations/) | disallow variable or `function` declarations in nested blocks | :star: |
| [svelte/no-trailing-spaces](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-trailing-spaces/) | disallow trailing whitespace at the end of lines | :wrench: |
+## Experimental
+
+:warning: These rules are considered experimental and may change or be removed in the future:
+
+| Rule ID | Description | |
+|:--------|:------------|:---|
+| [svelte/experimental-require-strict-events](https://ota-meshi.github.io/eslint-plugin-svelte/rules/experimental-require-strict-events/) | require the strictEvents attribute on
+
+
+
+
+
+```
+
+
+
+## :wrench: Options
+
+Nothing.
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/experimental-require-strict-events.ts)
+- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/experimental-require-strict-events.ts)
diff --git a/src/rules/experimental-require-strict-events.ts b/src/rules/experimental-require-strict-events.ts
new file mode 100644
index 000000000..0451f8cb0
--- /dev/null
+++ b/src/rules/experimental-require-strict-events.ts
@@ -0,0 +1,46 @@
+import type { AST } from "svelte-eslint-parser"
+
+import { createRule } from "../utils"
+import { findAttribute, getLangValue } from "../utils/ast-utils"
+
+export default createRule("experimental-require-strict-events", {
+ meta: {
+ docs: {
+ description: "require the strictEvents attribute on
diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte
new file mode 100644
index 000000000..73e589e44
--- /dev/null
+++ b/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte
@@ -0,0 +1,3 @@
+
diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte
new file mode 100644
index 000000000..e96af6ef1
--- /dev/null
+++ b/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte
@@ -0,0 +1,2 @@
+
diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte
new file mode 100644
index 000000000..49f5fcd1f
--- /dev/null
+++ b/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte
@@ -0,0 +1,2 @@
+
diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte
new file mode 100644
index 000000000..5e40c34ee
--- /dev/null
+++ b/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/tests/src/rules/experimental-require-strict-events.ts b/tests/src/rules/experimental-require-strict-events.ts
new file mode 100644
index 000000000..8abea2528
--- /dev/null
+++ b/tests/src/rules/experimental-require-strict-events.ts
@@ -0,0 +1,16 @@
+import { RuleTester } from "eslint"
+import rule from "../../../src/rules/experimental-require-strict-events"
+import { loadTestCases } from "../../utils/utils"
+
+const tester = new RuleTester({
+ parserOptions: {
+ ecmaVersion: 2020,
+ sourceType: "module",
+ },
+})
+
+tester.run(
+ "experimental-require-strict-events",
+ rule as any,
+ loadTestCases("experimental-require-strict-events"),
+)
diff --git a/tools/render-rules.ts b/tools/render-rules.ts
index 939351642..454c2406b 100644
--- a/tools/render-rules.ts
+++ b/tools/render-rules.ts
@@ -7,6 +7,7 @@ const categories = [
"Best Practices",
"Stylistic Issues",
"Extension Rules",
+ "Experimental",
"System",
] as const
@@ -21,6 +22,8 @@ const descriptions: Record<(typeof categories)[number], string> = {
"These rules relate to style guidelines, and are therefore quite subjective:",
"Extension Rules":
"These rules extend the rules provided by ESLint itself, or other plugins to work well in Svelte:",
+ Experimental:
+ ":warning: These rules are considered experimental and may change or be removed in the future:",
System: "These rules relate to this plugin works:",
}