Validate an Astro project against the Frontmatter Solo contract.
@withfrontmatter/solo-check is a free validation CLI.
It tells you whether an Astro project is compatible with Frontmatter Solo before build time and before purchase.
It does not:
- generate templates
- build output
- emit files
- produce Twig or PHP
It only validates.
Frontmatter Solo works with a constrained subset of Astro. Not every Astro project is compatible as-is.
solo-check gives you that answer upfront, with stable error codes and concrete fix suggestions.
npx @withfrontmatter/solo-checkOr install it:
npm install -g @withfrontmatter/solo-check
frontmatter-check --root .frontmatter-check [options]Options:
--root <path>Astro project root, defaults to the current directory--stricttreat warnings as blocking errors--jsonoutput machine-readable diagnostics--quietkeep only the final summary--help-aiprint the AI workflow guide and exit0-h, --helpshow CLI help
Valid project:
✓ src/pages/index.astro — OK
✓ src/layouts/Base.astro — OK
✓ src/pages/contact.astro — OK
──────────────────────────────────────────
0 errors · 0 warnings
──────────────────────────────────────────
Invalid project:
E201 src/pages/index.astro:13 Non-literal props used in component Hero.
Fix: Use only string, number, boolean, or null props in Solo v1.
E230 src/components/Hero.astro:6 Component-scoped CSS is not supported.
Fix: Move CSS to a global stylesheet or mark it explicitly global.
──────────────────────────────────────────
2 errors · 0 warnings
Tip: use the AI workflow to fix these errors automatically.
npx @withfrontmatter/solo-check --help-ai
──────────────────────────────────────────
0valid project1validation errors2CLI usage error3unexpected internal error
Frontmatter Solo enforces a constrained Astro contract:
- exactly one layout per page, with no nested layouts
- literal scalar props only:
string,number,boolean,null - no dynamic expressions in props such as
headline={page.title} - no runtime Astro features such as
client:* - no
import.meta.glob - global CSS only, no scoped Astro component
<style>blocks - deterministic, backend-friendly components
- static images from
public/
Full contract:
frontmatter.tech/docs/contract
If frontmatter-check exits 0, the project should also pass:
frontmatter solo:validateThe contract is intended to match Solo exactly:
- same validation rules
- same diagnostic codes
- same strict-mode behavior
If solo-check and frontmatter solo:validate disagree on the same project, that is a bug.
This package also includes an AI workflow for fixing incompatible Astro code and converting generated markup into Solo-compatible Astro.
See:
README_AI.mdfm-skill.mdprompts/fix-project.mdprompts/figma-to-astro.mdprompts/audit.md
Quick entrypoint:
npx @withfrontmatter/solo-check --help-aiRecommended reference starter:
github.com/withfrontmatter/fm-solo-starter
npm install
npm run buildsrc/cli.tsCLI entrypointsrc/commands/validate.tsvalidation commandsrc/utils/diagnostics.tsSolo-style diagnostic formattingfm-skill.mdstrict AI compatibility skillREADME_AI.mdAI workflow guideprompts/AI promptsdist/compiled package output
Layout stays in code. Content becomes data.
MIT