Astro-native CMS
Your content, your code, one app
Define collections in TypeScript. Get a full admin UI, typed API, and optimized delivery, all inside your Astro project.
About usHow it works
Define your collections in code. The generator produces Drizzle tables, TypeScript types, Zod validators, and a typed local API. The admin UI renders from your schema at runtime; add a field and it appears immediately.
Your public pages query content through the typed local API. No HTTP overhead, no serialization, just plain function calls with full type safety.
Common questions
Do I need a separate database server?
No. Development uses SQLite with zero configuration. For Cloudflare deployment, it uses D1. No external databases to manage.
Can I use this with an existing Astro project?
Yes. The CMS lives in src/cms/ and does not interfere with your existing pages, components, or integrations.
How does caching work?
Content pages are server-rendered and cached using Astro's route caching. When content changes, lifecycle hooks invalidate the relevant cache tags automatically.
Is there vendor lock-in?
No. The CMS runtime is editable project code, not an npm dependency. The database layer uses Drizzle ORM which works with any standard database.
What deployment targets are supported?
Node.js with SQLite for simple deployments, and Cloudflare Workers with D1 and R2 for edge deployment. The setup script handles the configuration.