sveltejs/kit · error

Cannot call query.batch '${__.name}' while prerendering, as

Error message

Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead

What it means

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.

Source

Thrown at packages/kit/src/runtime/app/server/remote/query.js:374

							}
						})
					);
				}
			);
		},
		bind(payload, validated_arg) {
			const { event, state } = get_request_store();

			return create_query_resource(__, payload, event, state, () =>
				enqueue(payload, () => validated_arg)
			);
		}
	};

	/** @type {RemoteQueryFunction<Input, Output> & { __: RemoteQueryBatchInternals }} */
	const wrapper = (arg) => {
		if (prerendering) {
			throw new Error(
				`Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead`
			);
		}

		const { event, state } = get_request_store();
		const payload = stringify_remote_arg(arg);

		return create_query_resource(__, payload, event, state, () =>
			// Collect all the calls to the same query in the same macrotask,
			// then execute them as one backend request.
			enqueue(payload, () => validate(arg))
		);
	};

	Object.defineProperty(wrapper, '__', { value: __ });

	return wrapper;
}

View on GitHub (pinned to 03f1687fe6)

Solutions

  1. Wrap the call: prerender(() => myBatchQuery(arg))
  2. Remove prerendering from the route that needs dynamic batched data
  3. Split the route into a prerendered shell with client-fetched dynamic data

Example fix

// before
const data = await getBatch(id);
// after
import { prerender } from '$app/server';
const data = await prerender(() => getBatch(id));
Defensive patterns

Strategy: validation

Validate before calling

import { prerendering } from '$app/environment';
if (prerendering) {
  throw new Error('wrap query.batch in prerender()');
}

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Calling a function created with query.batch(...) directly from code that runs during a prerender build, instead of wrapping it in prerender().

Common situations: Using batched queries in prerendered routes; converting grouped per-item queries to query.batch in an existing prerendered page.

Related errors


AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02). Data as JSON: /api/errors/e7080b5de8e3fced. Report an issue: GitHub.