{"record":{"id":"e7080b5de8e3fced","repo":"sveltejs/kit","slug":"cannot-call-query-batch-name-while-prerend","errorCode":null,"errorMessage":"Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead","messagePattern":"Cannot call query\\.batch '(.+?)' while prerendering, as prerendered pages need static data\\. Use 'prerender' from \\$app/server instead","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/kit/src/runtime/app/server/remote/query.js","lineNumber":374,"sourceCode":"\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tbind(payload, validated_arg) {\n\t\t\tconst { event, state } = get_request_store();\n\n\t\t\treturn create_query_resource(__, payload, event, state, () =>\n\t\t\t\tenqueue(payload, () => validated_arg)\n\t\t\t);\n\t\t}\n\t};\n\n\t/** @type {RemoteQueryFunction<Input, Output> & { __: RemoteQueryBatchInternals }} */\n\tconst wrapper = (arg) => {\n\t\tif (prerendering) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead`\n\t\t\t);\n\t\t}\n\n\t\tconst { event, state } = get_request_store();\n\t\tconst payload = stringify_remote_arg(arg);\n\n\t\treturn create_query_resource(__, payload, event, state, () =>\n\t\t\t// Collect all the calls to the same query in the same macrotask,\n\t\t\t// then execute them as one backend request.\n\t\t\tenqueue(payload, () => validate(arg))\n\t\t);\n\t};\n\n\tObject.defineProperty(wrapper, '__', { value: __ });\n\n\treturn wrapper;\n}","sourceCodeStart":356,"sourceCodeEnd":392,"githubUrl":"https://github.com/sveltejs/kit/blob/03f1687fe612ce3d2d9131139b5b188d9cf90c64/packages/kit/src/runtime/app/server/remote/query.js#L356-L392","documentation":"Runtime guard when invoking a query.batch function: the process is currently prerendering, and batched queries are stateful/streaming primitives whose data cannot be embedded into a static prerendered page. The message redirects users to the prerender utility from $app/server, which is designed to fetch data at build time.","triggerScenarios":"Calling a function created with query.batch(...) directly from code that runs during a prerender build, instead of wrapping it in prerender().","commonSituations":"Using batched queries in prerendered routes; converting grouped per-item queries to query.batch in an existing prerendered page.","solutions":["Wrap the call: prerender(() => myBatchQuery(arg))","Remove prerendering from the route that needs dynamic batched data","Split the route into a prerendered shell with client-fetched dynamic data"],"exampleFix":"// before\nconst data = await getBatch(id);\n// after\nimport { prerender } from '$app/server';\nconst data = await prerender(() => getBatch(id));","handlingStrategy":"validation","validationCode":"import { prerendering } from '$app/environment';\nif (prerendering) {\n  throw new Error('wrap query.batch in prerender()');\n}","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Wrap batched query calls with prerender() in prerendered routes","Review route prerender settings when introducing query.batch","Run prerender builds in CI to catch direct calls early"],"tags":["prerendering","query-batch","ssg","remote-functions"],"backgroundTag":"prerender-forbidden-api-call","analyzedSha":"03f1687fe612ce3d2d9131139b5b188d9cf90c64","analyzedAt":"2026-09-02T02:01:50.504Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}