Frontmatter

Frontmatter Solo

Turn an Astro frontend into Twig or PHP templates.

Solo reads a Solo-compatible constrained Astro project and generates a documented render pack. Twig and PHP are output adapters. Symfony and WordPress are integration use cases.

CLI + Desktop app (macOS 12+ · Apple Silicon) · Twig + PHP output · $49 one-time

You finished the Astro project.

The backend developer is waiting.

Now someone has to explain every component, every prop, every field name.

Solo makes the handoff explicit.

Input — Astro component
<!-- Astro component — literal props only -->
<Hero headline="Hello Solo" />
Output — Twig partial
{# Generated by FM Solo — partials/hero.html.twig #}
<section class="hero">
  <h1>{{ fm.props.headline }}</h1>
</section>
Or — PHP partial
<?php // Generated by FM Solo — partials/hero.php ?>
<section class="hero">
  <h1><?= htmlspecialchars($fm['props']['headline']) ?></h1>
</section>

Your frontend

Keep building in Astro

No migration. Solo reads your constrained Astro project and extracts the render structure at build time.

Output format

Twig or plain PHP

One flag: --adapter twig or --adapter php. Same structure, different syntax.

Architecture

Build-time only

Solo runs once at build time. The output is static files. No runtime. No API. No coupling.

Handoff

Explicit by design

Every prop becomes a documented variable. INTEGRATION.md tells the backend developer exactly what to connect.

What you get

output/
├─ pages/
│  └─ index.html.twig
├─ layouts/
│  └─ base.html.twig
├─ partials/
│  ├─ hero.html.twig
│  └─ section.html.twig
├─ manifest.json
├─ INTEGRATION.md
├─ frontmatter.build.json
└─ preview-php/           ← optional

Integrate into your backend. The structure and variable contract are already defined.

Frontmatter Solo is not a CMS.

It is a build-time extraction tool. It transforms a constrained Astro project into an explicit rendering specification — a stable, documented contract between your frontend and any backend.

Twig and PHP are output adapters. Symfony and WordPress are integration use cases built on those adapters. Same intermediate representation, different syntax. You choose at build time.

What this is not

  • a CMS or runtime
  • a universal Astro adapter
  • a backend data layer
  • a plugin system
  • a managed service

Solo works with constrained Astro projects. Run npx @withfrontmatter/solo-check first to check compatibility for free.

Frequently asked questions

What kind of Astro project does Solo accept?

Solo requires a constrained Astro project: one layout per page, literal props only (string, number, boolean, or null), global CSS or SCSS compiled globally, and static images from public/. It does not support client:* islands, Markdown pages, nested layouts, scoped CSS, or the Astro image pipeline.

What does the data contract look like?

Solo uses a fixed namespace: fm.site, fm.page, fm.data, and fm.props. Pages and layouts read fm.site, fm.page, and fm.data. Partials read fm.props. In PHP the same keys are accessed as $fm['props'].

What is not generated by Solo?

Solo does not generate backend logic, data fetching, CMS wiring, routing, authentication, or form processing. It generates templates and a variable contract. Backend integration remains your responsibility.

Can I use dynamic props like headline={page.title}?

No. Solo v1 requires literal props only: string, number, boolean, or null. Expressions like headline={page.title} will fail validation with error E201. This is a deliberate constraint.

Does it work with my existing Astro project?

Only if your project follows the Solo contract.

Run npx @withfrontmatter/solo-check --root . first to check compatibility for free.

Solo will report unsupported patterns with actionable error codes (E201, E203, E230, etc.).

What is the Starter for?

The public starter project is a reference Astro project built to the Solo contract. It is also included in the Solo CLI package download. Starting from it guarantees a clean render pack on the first run.

Free · Open source

Check compatibility before you buy.

solo-check is a free CLI validator. It scans your Astro project against the Solo contract and tells you exactly what is and isn't compatible before you purchase anything. Use --help-ai if you want the packaged AI workflow.

npx @withfrontmatter/solo-check

✓ Command copied

Example output

✓ src/pages/index.astro — OK
✓ src/layouts/Base.astro — OK
E201 src/pages/contact.astro:13 Non-literal props used in component Hero.
  Fix: Use only string, number, boolean, or null props in Solo v1.

──────────────────────────────────────────
1 error · 0 warnings

Tip: use the AI workflow to fix these errors automatically.
     npx @withfrontmatter/solo-check --help-ai
──────────────────────────────────────────

Exit 0 means your project is ready for Solo. Use npx @withfrontmatter/solo-check --help-ai if you want the packaged AI fixing workflow. View on GitHub ↗

Prefer a UI?

Frontmatter Solo also ships as a macOS desktop app. Same Solo runtime, local UI, same Twig and PHP output.

Frontmatter Solo macOS app interface
Desktop app: macOS 12+ on Apple Silicon.

$49

One-time purchase. No subscription.

  • CLI — macOS, Linux, Windows (Node)
  • Desktop app — macOS 12+ · Apple Silicon
  • Twig output
  • Plain PHP output
  • Starter reference project included
  • INTEGRATION.md auto-generated
Buy Frontmatter Solo

Provided as-is. Requires a Solo-compatible Astro project. No guarantee of compatibility with all project configurations. Support is best-effort.