withastro/astro · warning
More than one JSX renderer is enabled. This will lead to une
Error message
More than one JSX renderer is enabled. This will lead to unexpected behavior unless you set the `include` or `exclude` option. See https://docs.astro.build/en/guides/integrations-guide/solid-js/#combining-multiple-jsx-frameworks for more information.
What it means
The Solid integration performs the same astro:config:done cross-check as React/Preact: it scans config.integrations for known JSX renderers and warns when two or more are enabled while options.include/options.exclude were not passed to solid(). Without disjoint file scopes, Vite's JSX transform is ambiguous and components from one framework get compiled with another's runtime.
Source
Thrown at packages/integrations/solid/src/index.ts:124
});
addRenderer(getContainerRendererImpl());
updateConfig({
vite: getViteConfiguration(options, devtoolsPlugin, solidPackages.ssr.noExternal),
});
if (devtoolsPlugin) {
injectScript('page', 'import "solid-devtools";');
}
},
'astro:config:done': ({ logger, config }) => {
const knownJsxRenderers = ['@astrojs/react', '@astrojs/preact', '@astrojs/solid-js'];
const enabledKnownJsxRenderers = config.integrations.filter((renderer) =>
knownJsxRenderers.includes(renderer.name),
);
if (enabledKnownJsxRenderers.length > 1 && !options.include && !options.exclude) {
logger.warn(
'More than one JSX renderer is enabled. This will lead to unexpected behavior unless you set the `include` or `exclude` option. See https://docs.astro.build/en/guides/integrations-guide/solid-js/#combining-multiple-jsx-frameworks for more information.',
);
}
},
},
};
}
function configEnvironmentPlugin(solidNoExternal: string[]): Plugin {
return {
name: '@astrojs/solid:config-environment',
configEnvironment(environmentName) {
if (environmentName === 'client') {
return {
optimizeDeps: {
include: ['@astrojs/solid-js/client.js'],
exclude: ['@astrojs/solid-js/server.js'],
},View on GitHub (pinned to 52e6c34790)
Solutions
- Give each JSX integration disjoint globs, e.g. solid({ include: ['**/solid/**'] }) and react({ include: ['**/react/**'] }).
- Remove integrations for frameworks the project does not use.
- Restart dev/build to re-run the config hook and verify the warning is gone.
Example fix
// before
export default defineConfig({
integrations: [solid(), react()],
});
// after
export default defineConfig({
integrations: [
solid({ include: ['**/solid/**'], exclude: ['**/react/**'] }),
react({ include: ['**/react/**'], exclude: ['**/solid/**'] }),
],
}); Defensive patterns
Strategy: validation
Validate before calling
const jsxIntegrations = ['@astrojs/react', '@astrojs/preact', '@astrojs/solid-js'];
const enabled = config.integrations.filter((i) => jsxIntegrations.includes(i.name));
if (enabled.length > 1 && !(options.include || options.exclude)) {
throw new Error('Multiple JSX renderers require include/exclude scopes on solid()');
} Prevention
- Scope Solid components to their own glob when any other JSX framework is present.
- Keep per-framework directories so include patterns stay maintainable.
- Remove renderer integrations for frameworks no longer in use.
When it happens
Trigger: astro.config.mjs registers solid() alongside react() and/or preact(), and the solid() call passes no include/exclude option. enabledKnownJsxRenderers.length > 1 triggers the warning at config completion.
Common situations: Mixing a Solid component library into a React Astro site during incremental migration; templates that install multiple framework integrations for demos; forgetting that solid-js components need their own glob when React is also present.
Related errors
- More than one JSX renderer is enabled. This will lead to une
- More than one JSX renderer is enabled. This will lead to une
- More than one JSX renderer is enabled. This will lead to une
- Apps must be an object with an id, a name and an entrypoint.
- Auto-generating collections for folders in "src/content/" t
AI-assisted analysis of withastro/astro@52e6c34790 (2026-08-18).
Data as JSON: /api/errors/0a7b861516874eea.
Report an issue: GitHub.