diff --git a/.changeset/brave-baboons-teach.md b/.changeset/brave-baboons-teach.md
new file mode 100644
index 0000000000..ca76101843
--- /dev/null
+++ b/.changeset/brave-baboons-teach.md
@@ -0,0 +1,5 @@
+---
+'svelte': minor
+---
+
+feat: async fragments
diff --git a/packages/svelte/tests/runtime-runes/samples/async-const/_config.js b/packages/svelte/tests/runtime-runes/samples/async-const/_config.js
new file mode 100644
index 0000000000..9319bafeb0
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-const/_config.js
@@ -0,0 +1,16 @@
+import { test } from '../../test';
+
+export default test({
+ html: `
Loading...
`,
+
+ async test({ assert, target }) {
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ assert.htmlEqual(
+ target.innerHTML,
+ `
+ Hello, world!
+
+ `
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/async-const/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-const/main.svelte
new file mode 100644
index 0000000000..bbcf82739f
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-const/main.svelte
@@ -0,0 +1,23 @@
+
+
+ {#snippet pending()}
+ Loading...
+ {/snippet}
+ {#snippet greet()}
+ {@const greeting = await wait(`Hello, ${name}!`, 50)}
+ {greeting}
+
+ {/snippet}
+ {@render greet()}
+
\ No newline at end of file