Skip to content

Non-exported prerender remote function causes errors #15713

@Stadly

Description

@Stadly

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:

  1. 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.
  2. 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions