withastro/astro · error · Error
Renderer ${renderer.name} does not provide a serverEntrypoin
Error message
Renderer ${renderer.name} does not provide a serverEntrypoint. What it means
After confirming `renderer.name` is set, `addRenderer` requires `renderer.serverEntrypoint` to be truthy. Without it Astro cannot render the framework on the server, so it throws a plain Error naming the offending renderer.
Source
Thrown at packages/astro/src/integrations/hooks.ts:235
const { integrationLogger } = await runHookInternal({
integration,
hookName: 'astro:config:setup',
logger,
params: () => {
const hooks: Omit<HookParameters<'astro:config:setup'>, 'logger'> = {
config: updatedConfig,
command,
isRestart,
addRenderer(renderer: AstroRenderer) {
if (!renderer.name) {
throw new Error(
`Integration ${colors.bold(integration.name)} has an unnamed renderer.`,
);
}
if (!renderer.serverEntrypoint) {
throw new Error(
`Renderer ${colors.bold(renderer.name)} does not provide a serverEntrypoint.`,
);
}
if (renderer.name === 'astro:jsx') {
astroJSXRenderer = renderer;
} else {
updatedSettings.renderers.push(renderer);
}
},
injectScript: (stage, content) => {
updatedSettings.scripts.push({ stage, content });
},
updateConfig: (newConfig) => {
// Logger destination is updated later because it's async
if (newConfig.logger?.entrypoint) {
isLoggerUpdated = true;
}View on GitHub (pinned to d081033d5f)
Solutions
- Set `serverEntrypoint` to the module specifier of your framework's server renderer (e.g. `'@astrojs/react/server.js'`).
- Confirm the entrypoint module exists and exports the expected server render function.
- Validate the full `AstroRenderer` object before calling `addRenderer`.
Example fix
// before
addRenderer({ name: '@my/framework' })
// after
addRenderer({
name: '@my/framework',
serverEntrypoint: '@my/framework/server.js',
}) Defensive patterns
Strategy: validation
Validate before calling
function assertRendererHasEntrypoint(renderer) {
if (!renderer || !renderer.serverEntrypoint) {
throw new Error(`Renderer ${renderer?.name} needs serverEntrypoint`);
}
} Type guard
function rendererHasEntrypoint(renderer) {
return !!renderer && !!renderer.serverEntrypoint;
} Try / catch
null
Prevention
- Always set serverEntrypoint on renderer objects.
- Confirm the entrypoint module resolves and exports the server render function.
- Validate the full AstroRenderer shape before addRenderer.
When it happens
Trigger: An integration calls `addRenderer({ name: 'foo' })` (or with `serverEntrypoint: undefined`/empty), omitting the server entrypoint module specifier.
Common situations: Authoring a renderer and forgetting the `serverEntrypoint` field; pointing it at a path that resolved to undefined due to a typo or conditional that returned nothing; using a renderer version whose entrypoint export moved.
Related errors
- Integration ${integration.name} has an unnamed renderer.
- The adapter ${adapter.name} doesn't provide a feature map. I
- Configured image service is not a local service
- MissingGetFontFileRequestUrl
- [preview] No adapter found.
AI-assisted analysis of withastro/astro@d081033d5f (2026-08-12).
Data as JSON: /api/errors/955db5ab9b46f136.
Report an issue: GitHub.