Error codes
Every diagnostic Solo and solo-check can emit — with examples and fix suggestions.
Errors
Errors always block the build. Exit code 1.
frontmatter solo:validate and solo-check also print a final tip pointing to --help-ai so you can use the packaged AI workflow to fix the project faster.
E201 — Non-literal props
Props passed to a component are not literal values.
// ✕ Triggers E201
<Hero headline={page.title} />
<CTA title={site.cta.title} />
<Hero headline={"Hello " + name} /> // ✓ Accepted <Hero headline="Hello Solo" /> <CTA title="Contact" />
Fix: Use only string, number, boolean, or null props in Solo v1.
E203 — Runtime Astro feature
A client:* directive or island runtime feature is used.
// ✕ Triggers E203 <FancyWidget client:load /> <Counter client:visible />
Fix: Remove client:* directives. Keep rendering build-time only.
E210 — Nested layouts
A layout composes another layout.
Fix: Keep layout usage to a single root layout per page. Layouts must not import other layouts.
E230 — Scoped CSS not supported
A component uses a <style> block (Astro scoped CSS).
// ✕ Triggers E230
<style>
.hero { background: red; }
</style> Fix: Move CSS to a global stylesheet imported in the layout.
E240 — Markdown pages unsupported
A .md file exists in src/pages/.
Fix: Use .astro pages only in Solo v1.
E250 — import.meta.glob out of scope
import.meta.glob() is used in a page or layout.
// ✕ Triggers E250
const posts = import.meta.glob('./posts/*.md'); Fix: Replace with an explicit build-time dataset or simplify the pattern.
E251 — Astro.url.pathname out of scope
Runtime URL state is used via Astro.url.pathname.
// ✕ Triggers E251 const isHome = Astro.url.pathname === '/';
Fix: Pass route-derived values explicitly as props instead of using Astro runtime URL state.
E252 — Arbitrary frontmatter computation out of scope
Arbitrary JS computation in page or layout frontmatter — sorting, filtering, Object.values, new Date, helper functions, content assembly.
// ✕ Triggers E252 const sorted = items.sort((a, b) => a.date - b.date); const now = new Date().toISOString();
Fix: Move computation into explicit source data or simplify the pattern.
E271 — Component not yet supported in Solo
A component is recognized but not yet in the Solo v1 support matrix.
Examples: Header with complex props, Gallery, FmImage.
Fix: Simplify the component to a supported pattern, or replace it with a plain Astro component that uses only literal props.
Warnings
Warnings do not block the build by default. They become errors in --strict mode.
W410 — React component skipped
A React component is present and will be replaced by a placeholder in the output.
W411 — Vue component skipped
A Vue component is present and will be replaced by a placeholder.
W412 — Svelte component skipped
A Svelte component is present and will be replaced by a placeholder.
<div data-fm-skipped="react" ...> in the output and an entry in manifest.json. Your backend developer can handle these explicitly.