Describe the bug
When I have a prerender remote function that is not exported, and then a query remote function calling it, and then using the query function from a page leads to failures:
-
In my main project:
- Server-side rendering (full page load / refresh) of the page fails with a 500 error:
Error: Prerendered response not found
- Client-side navigation to the same page works correctly.
-
In a minimal reproduction on StackBlitz:
- Building/prerendering the application fails with:
Error: Cannot call query 'getSensitiveData' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead
followed by
Error: 500 /
I encountered this while investigating workarounds for #15712 (feature request for guarded/private prerender remote functions). I was trying to avoid creating a public endpoint by not exporting the prerender remote function.
There are no error when running the dev server. Then everything seems to work well.
Reproduction
https://stackblitz.com/edit/sveltejs-kit-template-default-nrsoyrr2?file=src%2Froutes%2Fdata.remote.js
Create a prerender remote function that is not exported and call it from a query:
import { prerender, query } from '$app/server';
export const getSensitiveData = query(async () => {
// TODO: Protect this query
return sensitiveData();
});
// Note: not exported
const sensitiveData = prerender(() => {
return 'my data';
});
Now build the app (in some cases that fails). If not, visit a page that calls getSensitiveData(). If you client-side navigate to it, it works. If you server-side navigate to it it fails.
Logs
My main project:
[500] GET /admin/system-info
Error: Prerendered response not found
at file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:37:25
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:46:42
at async file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:30:18
Minimal reproduction on StackBlitz:
[500] GET /
Error: Cannot call query 'getSensitiveData' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead
at Module.wrapper (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/query.js:213:13)
at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:22:100)
at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3161:58)
at Renderer.child (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:2990:20)
at Renderer.push (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3161:12)
at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:22:17)
at Renderer.child (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:2990:20)
at Renderer.component (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3072:24)
at _page (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:20:14)
at children (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:4036:26)
Error: 500 /
To suppress or handle this error, implement `handleHttpError` in https://svelte.dev/docs/kit/configuration#prerender
at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/config/options.js:244:13)
at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:93:25)
at save (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:482:4)
at visit (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:301:3)
Node.js v22.22.0
System Info
My main project:
System:
OS: Linux 6.6 Ubuntu 24.04.4 LTS 24.04.4 LTS (Noble Numbat)
CPU: (32) x64 AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Memory: 24.20 GB / 46.93 GB
Container: Yes
Shell: 5.2.21 - /bin/bash
Binaries:
Node: 24.14.1 - /usr/bin/node
npm: 11.11.0 - /usr/bin/npm
pnpm: 10.32.1 - /usr/bin/pnpm
Browsers:
Chrome: 147.0.7727.55
npmPackages:
@sveltejs/adapter-node: ^5.5.4 => 5.5.4
@sveltejs/kit: ^2.57.1 => 2.57.1
@sveltejs/vite-plugin-svelte: ^6.2.4 => 6.2.4
svelte: ^5.55.3 => 5.55.3
vite: ^7.3.2 => 7.3.2
Minimal reproduction on StackBlitz:
System:
OS: Linux 5.0 undefined
CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Memory: 0 Bytes / 0 Bytes
Shell: 1.0 - /bin/jsh
Binaries:
Node: 22.22.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 10.8.2 - /usr/local/bin/npm
pnpm: 8.15.6 - /usr/local/bin/pnpm
npmPackages:
@sveltejs/adapter-auto: ^7.0.0 => 7.0.1
@sveltejs/kit: ^2.48.5 => 2.57.1
@sveltejs/vite-plugin-svelte: ^6.2.1 => 6.2.4
svelte: ^5.43.8 => 5.55.3
vite: ^7.2.2 => 7.3.2
Severity
serious, but I can work around it
Additional Information
I guess consistently failing both at build time and in the dev server is a viable way to solve this, it we don't want to support non-exported prerender functions. But I think we should consider whether this could instead be used to solve #15712 (and by extension #11700). If non-exported remote functions are allowed but don't generate endpoints, we can maybe use them to guard prerendered data?
Describe the bug
When I have a
prerenderremote function that is not exported, and then aqueryremote function calling it, and then using thequeryfunction from a page leads to failures:In my main project:
In a minimal reproduction on StackBlitz:
I encountered this while investigating workarounds for #15712 (feature request for guarded/private
prerenderremote functions). I was trying to avoid creating a public endpoint by not exporting theprerenderremote function.There are no error when running the dev server. Then everything seems to work well.
Reproduction
https://stackblitz.com/edit/sveltejs-kit-template-default-nrsoyrr2?file=src%2Froutes%2Fdata.remote.js
Create a
prerenderremote function that is not exported and call it from aquery:Now build the app (in some cases that fails). If not, visit a page that calls
getSensitiveData(). If you client-side navigate to it, it works. If you server-side navigate to it it fails.Logs
My main project: [500] GET /admin/system-info Error: Prerendered response not found at file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:37:25 at process.processTicksAndRejections (node:internal/process/task_queues:104:5) at async file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:46:42 at async file:///workspaces/workspace/apps/app/.svelte-kit/output/server/chunks/prerender.js:30:18 Minimal reproduction on StackBlitz: [500] GET / Error: Cannot call query 'getSensitiveData' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead at Module.wrapper (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/query.js:213:13) at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:22:100) at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3161:58) at Renderer.child (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:2990:20) at Renderer.push (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3161:12) at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:22:17) at Renderer.child (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:2990:20) at Renderer.component (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:3072:24) at _page (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/entries/pages/_page.svelte.js:20:14) at children (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/.svelte-kit/output/server/chunks/root.js:4036:26) Error: 500 / To suppress or handle this error, implement `handleHttpError` in https://svelte.dev/docs/kit/configuration#prerender at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/config/options.js:244:13) at eval (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:93:25) at save (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:482:4) at visit (file:///home/projects/sveltejs-kit-template-default-nrsoyrr2/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:301:3) Node.js v22.22.0System Info
My main project: System: OS: Linux 6.6 Ubuntu 24.04.4 LTS 24.04.4 LTS (Noble Numbat) CPU: (32) x64 AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S Memory: 24.20 GB / 46.93 GB Container: Yes Shell: 5.2.21 - /bin/bash Binaries: Node: 24.14.1 - /usr/bin/node npm: 11.11.0 - /usr/bin/npm pnpm: 10.32.1 - /usr/bin/pnpm Browsers: Chrome: 147.0.7727.55 npmPackages: @sveltejs/adapter-node: ^5.5.4 => 5.5.4 @sveltejs/kit: ^2.57.1 => 2.57.1 @sveltejs/vite-plugin-svelte: ^6.2.4 => 6.2.4 svelte: ^5.55.3 => 5.55.3 vite: ^7.3.2 => 7.3.2 Minimal reproduction on StackBlitz: System: OS: Linux 5.0 undefined CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz Memory: 0 Bytes / 0 Bytes Shell: 1.0 - /bin/jsh Binaries: Node: 22.22.0 - /usr/local/bin/node Yarn: 1.22.19 - /usr/local/bin/yarn npm: 10.8.2 - /usr/local/bin/npm pnpm: 8.15.6 - /usr/local/bin/pnpm npmPackages: @sveltejs/adapter-auto: ^7.0.0 => 7.0.1 @sveltejs/kit: ^2.48.5 => 2.57.1 @sveltejs/vite-plugin-svelte: ^6.2.1 => 6.2.4 svelte: ^5.43.8 => 5.55.3 vite: ^7.2.2 => 7.3.2Severity
serious, but I can work around it
Additional Information
I guess consistently failing both at build time and in the dev server is a viable way to solve this, it we don't want to support non-exported
prerenderfunctions. But I think we should consider whether this could instead be used to solve #15712 (and by extension #11700). If non-exported remote functions are allowed but don't generate endpoints, we can maybe use them to guard prerendered data?