Keystatic
Founded 2023
Keystatic Verdict
3.5/5Summary
Keystatic is the best Git-based CMS available for Astro and Next.js projects today. It threads the needle between developer control and editor usability better than any competitor in its category. The tradeoff is real though: content lives in your repo, so it inherits every limitation of a Git workflow, and editorial features like approvals, scheduling, and localization are either missing or immature. For small developer-led teams shipping content-light sites, it's a strong fit. For marketing teams that need editorial independence, it's not the right tool.
Best For
Developer-led teams building Astro or Next.js sites where content editors are comfortable working within a Git-adjacent workflow and the volume of content is manageable at file scale.
Watch Out
No native content scheduling, no approval workflows, no localization support, and all content is committed to your Git repo, which limits scale and editorial independence.
What Is Keystatic?
Keystatic is a Git-native content management system built by Thinkmill, the Sydney-based agency behind KeystoneJS. Released in 2023, it takes a fundamentally different approach to content management than API-first platforms like Sanity or Contentful: instead of storing content in a cloud database and serving it via API, Keystatic stores everything as Markdown, YAML, or JSON files directly in your Git repository. The admin UI sits inside your application and reads from and writes to those files. There is no separate CMS server, no third-party database, and no content delivery API to configure or pay for.
The design philosophy is code-first and version-control-native. Content changes are Git commits. Your schema lives in a TypeScript config file that ships with the project. Every field, collection, and singleton is defined in code, which means content models are versioned, reviewable, and consistent across environments. If you already understand your frontend codebase, you understand your content model, because they live in the same repository.
Keystatic ships in two operational modes: local mode, where the admin UI reads and writes directly to disk during development, and GitHub mode, where changes are committed to a GitHub repository via the GitHub API. The latter is production mode for real teams, and Keystatic Cloud provides the OAuth and authentication layer that makes this work without needing to manage GitHub Apps manually. The system is explicitly designed for modern JavaScript frameworks, with first-class support for Astro, Next.js, and Remix.
Key Features
- File-based storage: Content is Markdown, YAML, and JSON in your Git repo, no external database required
- TypeScript config with 30+ field types: Text, slug, date, image, rich text (Markdoc or MDX), arrays, blocks, conditionals, relationships, and more, all fully type-safe
- Collections and singletons: Collections manage repeating entries (blog posts, case studies), singletons manage global content (site settings, homepage hero)
- Local and GitHub modes: Local mode for development, GitHub mode for production team editing with commits made via GitHub API
- Keystatic Cloud: Handles authentication for editors without GitHub accounts, up to 3 users free, Pro plan adds Cloud Images and experimental multi-player editing
- Reader API: Type-safe content querying that integrates cleanly with Astro content collections and Next.js data fetching patterns
- Official Astro and Next.js integrations: First-party integrations with starter templates and documented setup paths
- Zero CMS infrastructure: No CMS servers to deploy, no databases to manage, no separate hosting bill
Pricing
Keystatic itself is MIT-licensed open source and free to self-host. Running it in local mode costs nothing. Running it in GitHub mode requires either manual GitHub OAuth App configuration (free but technical) or Keystatic Cloud.
Keystatic Cloud Free: Unlimited projects and teams, up to 3 users per team, basic GitHub authentication handled for you. This covers most small agency projects and personal sites.
Keystatic Cloud Pro: $10/month per team, plus $5/month per user beyond the first 3. This unlocks two features: Cloud Images (asset upload, optimization, and CDN delivery without storing binaries in Git) and multi-player editing (currently listed as experimental). Pro is the tier you need once a team grows beyond 3 editors or once images at scale become a problem.
Cloud Images on Pro is a genuine value add for content-heavy sites where managing image assets via Git is impractical.
Our Experience
We have used Keystatic on Astro projects and found the developer experience genuinely excellent. The TypeScript config is well-designed, the Reader API is ergonomic, and the Astro integration sets up cleanly. The admin UI is polished relative to what you would expect from a project at this stage. When we evaluate Git-based CMS tools, Keystatic is the one we reach for first in the Astro ecosystem specifically, because the integration is first-party and the schema system is the most expressive available.
The honest limitations show up as soon as you move beyond a small developer-adjacent team. A content team that needs to schedule posts, run approval workflows, manage translations, or publish without any Git awareness will run into walls quickly. There is no scheduling, no workflow engine, no localization layer, and the draft model is a browser localStorage workaround rather than a true staging system. These are not Keystatic-specific failures so much as fundamental characteristics of the Git-based CMS category, but they matter when scoping projects for clients with active editorial teams.
Our typical use case for Keystatic is a marketing site or blog where the client has one to three people editing content, they are comfortable with the concept of changes becoming commits, and the site is built on Astro. In those conditions, Keystatic delivers the full editorial autonomy the client needs without any of the infrastructure overhead of a hosted CMS. When the client profile shifts toward editorial independence, content scheduling, or multi-locale publishing, we move toward Statamic for Laravel-backed projects or Sanity for pure headless work.
When Lucky Media Recommends Keystatic
We reach for Keystatic when:
- The project is built on Astro or Next.js and the team is developer-led
- Content editors are comfortable with a Git-adjacent workflow (or don't need true editorial independence)
- The site is content-light to content-medium: a blog, documentation site, or marketing site with under a few hundred entries
- Infrastructure simplicity matters: no CMS hosting, no additional database, no separate deployment pipeline
- Budget is a real constraint and a $0 CMS with a polished admin UI is a genuine requirement
- The team wants full control over the content schema in TypeScript, with changes tracked in version control
We would suggest alternatives when:
- Editors need to schedule content, run approval workflows, or publish independently without any Git involvement
- The project requires multi-locale content management with translation status tracking
- Asset volume is high and storing images in Git is not an option (unless upgrading to Cloud Pro)
- The client is enterprise-scale with complex permissions, audit trails, or compliance requirements
- Real-time collaboration between simultaneous editors is a core workflow requirement
- The project needs a management API to ingest content programmatically from external systems
faq
How much does Keystatic cost?
Keystatic is open source and free to self-host. Running it in local mode during development costs nothing. For production team use, Keystatic Cloud handles authentication and GitHub access for editors. The Free tier covers up to 3 users per team at no cost. The Pro plan is $10/month per team plus $5/month per user beyond the first 3. Pro unlocks Cloud Images (assets stored on a CDN instead of in Git) and experimental multi-player editing. For most small projects, the free tier is sufficient.
Can non-developers use Keystatic to publish content?
Yes, but with caveats. The admin UI is clean and generally intuitive for basic tasks like writing a post, editing metadata, and uploading images. The challenge is the underlying model: saving content creates a GitHub commit, and editors need a Keystatic Cloud account or GitHub access. There are no approval queues or staging areas separate from the repository. A non-developer editor can publish independently once someone sets up the project, but they need to be comfortable with the concept of their saves being code commits.
How does Keystatic handle images and media?
In local and basic GitHub mode, images are stored directly in your Git repository alongside your code. This works fine for small sites but becomes a problem as your repo grows because binary assets bloat the Git history. The Keystatic Cloud Pro plan ($10/mo per team) adds Cloud Images, which uploads assets to a CDN and keeps them out of your repository. For any site with a meaningful volume of images, Cloud Images or an external asset host (like Cloudinary connected at the framework level) is the recommended approach.
Does Keystatic support content scheduling or draft workflows?
No. There is no native content scheduling, no review-and-approve workflow, and no draft state that exists independently of Git. Unsaved changes are stored in the browser's local storage, but a "draft" in the CMS sense requires either an unpublished Git branch or a manual convention in your content model (a boolean published field filtered at the framework layer). If your team needs editorial workflows with scheduled publication, Keystatic is not the right tool without significant custom work.
How does Keystatic compare to TinaCMS?
Both are Git-based and TypeScript-first. TinaCMS has a longer track record (~9k GitHub stars vs ~2k for Keystatic) and offers visual in-context editing, which Keystatic does not. Keystatic has a substantially cleaner integration with Astro specifically, and its admin UI is more polished for pure content editing tasks. TinaCMS offers branch-based workflows in its paid cloud tier. Keystatic's free tier is more generous. The choice usually comes down to whether visual editing matters for your team (TinaCMS) or whether a clean Astro integration and developer experience is the priority (Keystatic).
How does Keystatic compare to TinaCMS and Decap CMS?
All three are Git-based, but they differ in maturity and focus. TinaCMS (~9k GitHub stars) offers visual in-context editing that Keystatic does not have, and branch-based workflows on its paid cloud tier. Decap CMS (formerly Netlify CMS, ~18k stars) is the most established and integrates with many backends beyond GitHub. Keystatic has the cleanest Astro integration of the three and the most polished content editing UI, but the smallest community. If visual editing is a requirement, TinaCMS has the edge. If you are building with Astro and want a developer-first experience, Keystatic is the strongest option.
Our verdict
| Content Modeling | |
|---|---|
| How flexible is the content modelling system?Can you define complex, nested, and relational content types without workarounds? | ●●●●●4/5 Keystatic's TypeScript-based config gives you 30+ field types including blocks, arrays, conditionals, relationships, and rich text via Markdoc or MDX. Complex nested structures are achievable without workarounds. The main ceiling is that all content must map to files, so deeply relational data (many-to-many, cross-collection references) requires careful design. Within those constraints, the schema system is expressive and fully type-safe. |
| How well does the platform support reusable content blocks?Blocks that map directly to design system components. | ●●●●●3/5 The blocks field type supports design-system-aligned component patterns, and singletons handle global content like nav and footer well. But there's no true content block library or global component reference system. Reuse happens by convention in code, not enforced by the CMS itself. |
| Does the platform enforce content validation rules natively?Required fields, character limits, regex, custom validators. | ●●●●●3/5 Required fields, text length constraints, and regex validation are supported via the TypeScript schema. Custom async validators are not natively available. The validation story is solid for basic to intermediate needs but won't satisfy teams with complex business rules who rely on the CMS to enforce them. |
| Editor Experience | |
| How intuitive is the editing interface for a non-technical editor?Could a new editor publish their first piece of content within one hour, without help? | ●●●●●3/5 The admin UI is clean, opinionated, and generally intuitive. A non-technical editor can navigate collections, create entries, and publish within an hour if someone has configured the project correctly. The friction is the Git model itself: editors need to understand that saving triggers a GitHub commit, and that there's no staging area separate from the repo. |
| Does the platform offer live or visual preview of content?As it will appear on the frontend, without developer configuration. | ●●●●●2/5 No built-in live preview. Keystatic doesn't provide an iframe preview or visual editing experience out of the box. You can wire up draft preview routes in Next.js or Astro yourself, but it requires developer setup and isn't seamless. Compared to TinaCMS or Sanity's presentation layer, this is a meaningful gap for content-heavy sites. |
| How well does the platform handle the full editorial workflow?Drafts, scheduling, approval chains, role-based permissions. | ●●●●●1/5 No approval workflows, no content scheduling, and no draft staging independent of Git branches. Drafts exist only as uncommitted changes in the browser's local storage. If your editorial process requires review-before-publish or scheduled publication, you're implementing it yourself through Git pull request conventions, which is a developer workflow, not an editor one. |
| How effective is the media and asset management?Upload, organisation, image transforms, search at scale. | ●●●●●2/5 Local images are stored directly in the repository, which becomes a problem at scale as repo size grows. Keystatic Cloud's Pro plan adds Cloud Images, which handles upload, optimization, and serving via CDN. This resolves the core problem but puts it behind a paywall. No DAM-level organization, search, or tagging. Adequate for a blog, inadequate for a content-heavy marketing site. |
| Collaboration | |
| Does the platform support real-time collaboration?Simultaneous editing, presence indicators, inline comments. | ●●●●●2/5 Multi-player editing is on the Keystatic Cloud Pro roadmap and listed as experimental as of 2025. In practice, simultaneous editing means Git merge conflicts. There are no presence indicators or inline comments. The collaboration model is pull request-based, which works fine for developer teams but is an obstacle for dedicated content teams. |
| How granular and practical are user roles and permissions?By content type, locale, or specific fields, not just admin/editor. | ●●●●●2/5 Permissions are inherited from GitHub repository access levels (read, write, admin) plus basic Keystatic Cloud user roles. There are no collection-level or field-level permissions, no content ownership model, and no way to restrict a specific editor to a subset of content. Adequate for a 2-3 person team, limiting for anything larger. |
| Localisation | |
| Is multi-locale content management native?Field-level localisation, not page duplication or plugin workarounds. | ●●●●●1/5 Keystatic has no native localization support. Multi-locale content requires manual convention: separate collection paths per locale, file naming schemes, or a custom abstraction layer built on top. There is no locale switcher in the admin UI, no translation status tracking, and no locale-aware field configuration. |
| Can editors manage locale fallback logic natively?e.g. show English if French translation is missing. | ●●●●●1/5 Locale fallback logic does not exist in the CMS. Anything beyond a single-language site requires custom implementation at the framework layer. This is a hard blocker for any project with internationalization requirements. |
| Developer Experience | |
| How well-documented and developer-friendly is the delivery API?REST, GraphQL, typed SDKs, TypeScript support. | ●●●●●4/5 Documentation is well-organized, genuinely developer-friendly, and the Reader API is ergonomic. Full TypeScript support means your editor gets autocompletion for content queries. There's no delivery API in the traditional sense because content is read from the filesystem at build time, not fetched from a remote API. This is a strength for build-time performance and a limitation for real-time use cases. |
| How fast and friction-free is integration with modern frontend frameworks?Next.js, Astro, Nuxt, Remix, official examples or starter kits available. | ●●●●●5/5 First-class Astro and Next.js integration is a genuine differentiator. The Astro integration is official, maintained by the Keystatic team, and the setup takes under 30 minutes. The CLI scaffolds full starter projects. Remix support exists. No Nuxt support. For the specific stack of Astro or Next.js, this is the smoothest integration experience in the Git-based CMS category. |
| Does the platform provide a Management API for programmatic content operations?Bulk import, AI pipelines, scripting. | ●●●●●2/5 There is no management API for programmatic content operations from external systems. Content is authored through the admin UI or directly as files. You cannot push content via API from a pipeline or integrate with a third-party DAM or PIM. The GitHub API is technically available for scripting, but this is not a supported pattern. |
| Does the platform support environment branching or staging environments?For safe content and schema testing before promoting to production. | ●●●●●3/5 Environment branching maps to Git branches. In GitHub mode, you can point Keystatic at a specific branch per environment, which gives you a basic staging setup. There's no first-class environment concept in the admin UI, no environment promotion workflow, and no preview environment linking. It works but requires deliberate branch management conventions. |
| Performance | |
| Does the platform deliver content via a global CDN?And how does this affect real-world API response times for your frontend? | ●●●●●4/5 Content is read from the filesystem at build time, so there are no API calls at runtime and no CDN dependency for content delivery. This is a structural performance advantage for statically generated sites. Cloud Images on the Pro plan adds CDN-served optimized images. The absence of a runtime delivery API means no CDN latency to worry about and no rate limits to design around. |
| How straightforward is hosting and deployment?Does the platform reduce or add infrastructure complexity? | ●●●●●4/5 No separate CMS infrastructure to deploy or maintain. Keystatic runs as part of your Next.js or Astro app. Local mode requires zero configuration. GitHub mode requires setting up a Keystatic Cloud account or configuring a GitHub OAuth app, which is straightforward. No databases, no servers, no CMS-side deployments. This is meaningfully simpler than any hosted headless CMS. |
| Ecosystem & Longevity | |
| How mature and practically useful is the integration ecosystem?Not just quantity, are the integrations your clients actually need available and well-maintained? | ●●●●●2/5 The integration ecosystem is limited but growing. Official support for Astro, Next.js, and Remix exists. No official plugins for analytics, commerce, or third-party integrations. Thinkmill's broader KeystoneJS ecosystem provides some adjacency but Keystatic is a distinct project. Compared to Sanity or Contentful, the plugin and integration surface is minimal. |
| How active and meaningful is platform development?Community health, release cadence, direction of travel. | ●●●●●3/5 Thinkmill is a credible backer with a strong open-source track record (KeystoneJS). The GitHub repository has ~2,000 stars and ~50 contributors as of early 2025, which is smaller than Decap CMS (16k stars) or TinaCMS (9k stars) but with substantially faster growth rate. Release cadence is active and the GitHub Discussions board is responsive. The risk is concentration: Thinkmill is a small agency and if priorities shift, the project could stall. |
Final verdict The verdict score is a weighted average of the criteria above. | 3.5/5 |
