withastro/astro · error · Error
Integration ${integration.name} has an unnamed renderer.
Error message
Integration ${integration.name} has an unnamed renderer. What it means
In the `astro:config:setup` hook, when an integration calls `addRenderer(renderer)`, Astro requires `renderer.name` to be a truthy string. A falsy/empty name is rejected with a plain Error because renderers are keyed and logged by name.
Source
Thrown at packages/astro/src/integrations/hooks.ts:229
* import.meta.env.production ? compress() : null
* ]
* ```
*/
let isLoggerUpdated = false;
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 });View on GitHub (pinned to d081033d5f)
Solutions
- Set a non-empty `name` on the renderer object passed to `addRenderer` (e.g. `'@astrojs/react'`).
- Verify the renderer object shape against `AstroRenderer` (requires `name` and `serverEntrypoint`).
- Update the integration package if using a third-party renderer that omits the name.
Example fix
// before
addRenderer({ serverEntrypoint: '@my/framework/server.js' })
// after
addRenderer({ name: '@my/framework', serverEntrypoint: '@my/framework/server.js' }) Defensive patterns
Strategy: validation
Validate before calling
function assertRendererHasName(renderer) {
if (!renderer || typeof renderer.name !== 'string' || renderer.name === '') {
throw new Error('Renderer must have a non-empty name');
}
} Type guard
function rendererHasName(renderer) {
return !!renderer && typeof renderer.name === 'string' && renderer.name.length > 0;
} Try / catch
null
Prevention
- Always set renderer.name when calling addRenderer.
- Validate the AstroRenderer object before registration.
- Write a smoke test that loads your integration in a fixture project.
When it happens
Trigger: An integration calls `addRenderer({ serverEntrypoint, ... })` without setting `name`, or sets `name: ''` / `name: undefined`.
Common situations: Authoring a framework integration (React, Vue, Solid, etc.) and forgetting the `name` field; refactoring a renderer object and dropping the name property; integrating a community renderer with an incomplete definition.
Related errors
- Renderer ${renderer.name} does not provide a serverEntrypoin
- Integration ${integrationName} is injecting a type that does
- The "${integration.name}" integration is trying to add the "
- The "${integration.name}" integration is trying to add middl
- The adapter ${adapter.name} doesn't provide a feature map. I
AI-assisted analysis of withastro/astro@d081033d5f (2026-08-12).
Data as JSON: /api/errors/de200cb5999f16aa.
Report an issue: GitHub.