- Astro CMS
Add a complete CMS behind your Astro frontend
ApostropheCMS is an open source CMS for Astro with structured content and true in-context editing. Your Astro components still render the site.
- Editing Experience
Edit content directly on the Astro-rendered page
Apostrophe gives editors in-context visual editing directly on the Astro-rendered page. They can update content, add approved widgets, rearrange layouts, and see the result in the context of your frontend — while your Astro components remain responsible for rendering the site.
Editors work with the actual page. Developers control the components and editing options available to them.
- Design System
Keep editors within your design system
Editors can only use the widgets you allow, in the areas you allow, with the fields and options you define. Each widget is rendered by your own Astro component, so editor-created pages still follow your design system.
Use React, Vue, Svelte or Solid inside your Astro components. Apostrophe doesn’t replace them. Some structured fields, like relationships between content, open in a focused editing dialog rather than inline. Editors still see the result on the real page.
- Architecture
Keep Astro in control of the frontend
An ApostropheCMS and Astro implementation combines two connected projects with clearly divided responsibilities. They can live together in a monorepo or be maintained separately, depending on how your team prefers to work.
How Apostrophe and Astro fit together: Apostrophe owns the content model. Astro owns the rendering. The official @apostrophecms/apostrophe-astroApostrophe Astro connects them.
Ready for coding agents. The starter ships with CLAUDE.md and ARCHITECTURE.md, so agents follow your project's conventions from the first prompt. Every content type and widget uses the same structure: schema in backend/modules, Astro components in frontend/src. Agent-written changes land where you expect them and are quick to review.
Model content → map components → render in Astro.
AposArea renders each widget with the component you mapped and makes the area editable in place for logged-in editors. Visitors get plain Astro output. The catch-all Astro route fetches content for URLs managed by Apostrophe, so editors can add pages without developers creating new routes.- Rendering and deployment
Choose the rendering model your project needs
Apostrophe supplies the content and editing layer. Astro's rendering model stays your decision.
Server-rendered:
output: 'server'fetches current content on each request, so published changes appear right away.Static:
output: 'static'fetches content at build time and outputs static files. Published changes appear after the next build.Live editing either way: Editors always work in context on a running Apostrophe + Astro instance, even if your public site ships static. Edit on a server instance, publish a static build.
Choose based on how often content changes, how quickly updates need to go live, and how your team prefers to operate the site.
Open source, deployed your way. The Community Edition is MIT licensed with no user or content limits. It includes the core CMS, in-context editing, localization, media and SEO features. Paid editions add features for larger teams and multisite setups.
Apostrophe is a Node.js application. Self-host it alongside your Astro frontend, either deployed separately or in the same container. Requires Node.js 22.19+.
Is ApostropheCMS right for your Astro project?
There’s no single best CMS for Astro. Start with who edits the content and what they need to build.
Approach | Good fit when | Tradeoff |
|---|---|---|
Astro content collections (Markdown/MDX files) | Developers write and update the content | Every change goes through Git and a deploy; no editing UI |
Git-based CMS | A small team wants a form-based editor over files in the repo | Limited structure, relationships and page building |
API-only headless CMS | Content is shared across many apps and channels | Editors usually work in forms, not on the page; visual editing is often an add-on or paid tier |
ApostropheCMS | Non-developers edit and build pages, and you want structured content behind them | A second application to run, and an area and widget model to learn |
Tradeoffs to know before you try it
-
Areas and widgets take time to learn. Expect a few hours to get comfortable; the demo starter kit is the fastest way to learn them.
-
You run two applications. Apostrophe and Astro share
APOS_EXTERNAL_FRONT_KEY. The CLI sets this up for you. -
Static builds aren’t instant. Use server rendering if published changes must appear immediately.
-
Schemas are JavaScript, not TypeScript types. Your Astro frontend is a standard Astro project with TypeScript configured.
- Customer Story
See Astro and Apostrophe running at enterprise scale
Michelin uses ApostropheCMS and Astro as part of a digital platform supporting more than 350 websites across 36 languages, eight brands, and nine business lines. Astro handles the frontend; Apostrophe provides the shared content, editing and multisite foundation.
Improvement in lead conversion rate
Increase in total lead volume
ApostropheCMS's visual editor continues to provide a user-friendly interface, enabling non-technical teams to manage content effectively without interfering with the headless architecture.
CTO, Consumer Experience Factory at Michelin
Common questions
Run npm create apostrophe@latest and choose ApostropheCMS + Astro. The CLI creates an Apostrophe backend and an Astro frontend connected through the official @apostrophecms/apostrophe-astro integration.
Yes. Install the integration in your Astro project, add a [...slug].astro route, and map your page types and widgets to your existing components. The work depends mostly on how your current content is stored and how many components you want editors to use.
The integration supports Astro 5, 6 and 7, and requires Node.js 22.19 or newer.
Yes. Logged-in editors edit content directly on the Astro-rendered page, inside the areas and widgets developers define. Visitors see plain Astro output.
No. Every page type and widget is rendered by an Astro component you write. Apostrophe provides the content and the editing interface.
Yes. Use them inside your Astro components the way you normally would. Apostrophe doesn’t require a specific UI framework.
Yes. Set output: 'static' and the integration fetches content at build time. Editing happens on a running server instance, and published changes appear on the static site after the next build.
Only where editors work. The public site can be a static build or the same server-rendered app that editors use.
Your Astro frontend is a standard Astro project with TypeScript configured. Apostrophe schemas are defined as JavaScript modules, not TypeScript types.
SQLite by default, with no setup. PostgreSQL and MongoDB are also supported.
Yes. The Community Edition is MIT licensed with no user or content limits, and includes the core CMS, in-context editing, localization, media and SEO features. Paid editions add features for larger teams and multisite setups.
Your Astro frontend does not have to become your CMS
Keep the frontend components you chose Astro for. Add the structured content and editorial experience your project needs as it grows.