diff --git a/packages/svelte/src/compiler/phases/3-transform/utils.js b/packages/svelte/src/compiler/phases/3-transform/utils.js
index c7fce61ff9..11c7bcf615 100644
--- a/packages/svelte/src/compiler/phases/3-transform/utils.js
+++ b/packages/svelte/src/compiler/phases/3-transform/utils.js
@@ -12,6 +12,7 @@ import { extract_identifiers } from '../../utils/ast.js';
import check_graph_for_cycles from '../2-analyze/utils/check_graph_for_cycles.js';
import is_reference from 'is-reference';
import { set_scope } from '../scope.js';
+import { custom_renderer } from '../../state.js';
/**
* Match Svelte 4 behaviour by sorting ConstTag nodes in topological order
@@ -290,7 +291,8 @@ export function clean_nodes(
!first.metadata.dynamic &&
!first.attributes.some(
(attribute) => attribute.type === 'Attribute' && attribute.name.startsWith('--')
- ))),
+ ))) &&
+ custom_renderer == undefined,
/** if a component/snippet/each block starts with text, we need to add an anchor comment so that its text node doesn't get fused with its surroundings */
is_text_first:
(parent.type === 'Fragment' ||
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte
new file mode 100644
index 0000000000..28b982ee94
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte
@@ -0,0 +1,5 @@
+
+
+{@render children?.()}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js
new file mode 100644
index 0000000000..135918fc82
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js
@@ -0,0 +1,13 @@
+import { test } from '../../test';
+
+export default test({
+ compileOptions: {
+ experimental: {
+ // The actual renderer module is irrelevant for this snapshot — we only
+ // care that the server output is a no-op while the client output still
+ // imports/uses the custom renderer. Using a fixed path keeps the
+ // snapshot stable across machines.
+ customRenderer: 'my-custom-renderer'
+ }
+ }
+});
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js
new file mode 100644
index 0000000000..5571be6d8d
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js
@@ -0,0 +1,13 @@
+import $renderer from 'my-custom-renderer';
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
+
+export default function Component($$anchor, $$props) {
+ var $$pop_renderer = $.push_renderer($renderer);
+ var fragment = $.comment();
+ var node = $.first_child(fragment);
+
+ $.snippet(node, () => $.validate_snippet_renderer($renderer, $$props.children) ?? $.noop);
+ $.append($$anchor, fragment);
+ $$pop_renderer();
+}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js
new file mode 100644
index 0000000000..ff224836bc
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js
@@ -0,0 +1,15 @@
+import $renderer from 'my-custom-renderer';
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
+import Component from "./Component.svelte";
+
+export default function Main($$anchor) {
+ var $$pop_renderer = $.push_renderer($renderer);
+ var fragment = $.comment();
+ var node = $.first_child(fragment);
+
+ Component(node, {});
+ $.append($$anchor, fragment);
+ $$pop_renderer();
+}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js
new file mode 100644
index 0000000000..e280e2d21d
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js
@@ -0,0 +1 @@
+export default function Component() {}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js
new file mode 100644
index 0000000000..2b19de8d86
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js
@@ -0,0 +1 @@
+export default function Main() {}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte
new file mode 100644
index 0000000000..ccf0870c03
--- /dev/null
+++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file