md0 VS
KEYSTATIC
CONFIG VS ZERO-CONFIG
Both are git-native CMS tools. Both write markdown files to GitHub. The difference is how you get started: Keystatic requires a TypeScript config file that defines every collection and field. md0 auto-detects your folder structure and you start editing in two minutes.
TRY md0 FREEBackground
What Is Keystatic
Built by Thinkmill
Keystatic is an open-source CMS created by Thinkmill, the Australian software agency known for Keystone.js. It is TypeScript-first and file-based: all your content lives in your repository as markdown or JSON files, committed alongside your code. This is the same philosophy md0 uses, which is why comparing the two tools is a genuine apples-to-apples exercise rather than a category mismatch.
How Keystatic Works
Keystatic requires a keystatic.config.ts file at the root of your project. Inside that file you define your collections, each field type, validation rules, and storage paths. The config uses a type-safe API: collection(), singleton(), and field builders like fields.text(), fields.image(), fields.date(). Once configured, the Keystatic UI mounts as a route inside your Next.js, Astro, or Remix application.
Keystatic Modes
Keystatic ships with three operating modes. Local mode runs entirely on your machine without GitHub access, reading and writing files directly to your local filesystem. GitHub mode reads and writes files through the GitHub API, similar to what md0 does. Keystatic Cloud is a paid hosted layer that manages the GitHub OAuth flow and provides a shared editing URL for non-developers without access to your local environment. Each mode has a different setup process and different hosting requirements.
Actively Maintained
Keystatic is under active development. Thinkmill ships regular updates and the GitHub repository is responsive. This is an important baseline: unlike some git-based CMS tools that have been deprecated or handed to volunteer communities, Keystatic is professionally maintained. The comparison between md0 and Keystatic is a genuine trade-off between two active tools, not a choice between something maintained and something abandoned.
Side by Side
Feature Comparison
| Feature | md0 CMS | Keystatic |
|---|---|---|
| Config required | None | keystatic.config.ts |
| Auto-detection of collections | Yes, from folder structure | Manual definition required |
| GitHub mode | Native | Yes (GitHub mode) |
| TypeScript required | No | For config file |
| Free tier | Public repos | Open source (self-host) |
| Framework | Any static site | Next.js, Astro, Remix |
| Local mode (no GitHub) | GitHub required | Yes, local mode |
| Cloud hosting for editors | cms.md0.io (included) | Keystatic Cloud (paid) |
Where md0 Wins
Why Teams Choose md0 Over Keystatic
1. Zero config to write
Keystatic requires a keystatic.config.ts file before you can open the editor. That file imports field builders, defines collections, sets storage paths, and exports a config object. For a developer comfortable with TypeScript this is a reasonable ask. For a non-developer setting up a content workflow, or a developer who just wants to skip the setup step, it is friction. md0 reads your repository structure and surfaces whatever markdown folders already exist. If you have a content/posts/ folder, md0 shows it as a collection immediately with no file to write.
2. Works with any framework or static site generator
Keystatic mounts its editor as a route inside your application, which means your application must be a supported framework: Next.js, Astro, or Remix. If you run Hugo, Jekyll, Eleventy, Zola, or any other static site generator, Keystatic is not an option. md0 is a separate hosted application that reads your repository through the GitHub API. Your framework is irrelevant. Hugo sites, Jekyll blogs, Eleventy projects, and Next.js apps all connect identically.
3. A shared editing URL without extra cost
When non-developers use Keystatic, they need a URL where the editor is running. In local mode that URL only exists on your machine. In GitHub mode the editor is embedded in your deployed site, so you need your site deployed to access it. Keystatic Cloud adds a dedicated hosted URL, but that is a paid tier. md0 is already hosted at cms.md0.io. Every editor on your team gets the same shared URL, authenticated through GitHub. No separate deployment, no paid cloud tier required for basic shared access.
4. No changes to your repository
Keystatic adds a keystatic.config.ts file and typically requires route configuration inside your framework. For Next.js that means an app/keystatic/ route group. These are not major changes, but they are changes. md0 connects to your existing repository through GitHub OAuth without touching a single file in your codebase. Your site is unchanged. Your colleagues who do not use md0 will not notice it exists.
Honest Assessment
Where Keystatic Has the Edge
1. Type-safe content schemas
Keystatic's TypeScript config approach is genuinely powerful for teams that want type-safe content queries. Because the schema is defined in TypeScript, you get autocomplete and compile-time errors when your frontend queries content that does not match the defined schema. For large teams with complex content models and TypeScript frontends, this is a real advantage. md0 detects fields from existing frontmatter rather than enforcing a typed schema at compile time.
2. Local editing without GitHub
Keystatic's local mode lets you run the editor against your local filesystem with no GitHub account involved. This is useful for developers working offline, or for teams that have not yet moved their repository to GitHub. md0 requires GitHub. If your repository is on a private network, on another Git provider, or if you want to test content editing before committing to a Git hosting provider, Keystatic local mode is the more flexible option.
3. Complex field definitions
Keystatic ships with a rich field library including conditional fields, object nesting, arrays of structured objects, and a custom document editor for rich content with embedded components. If your content model requires deeply nested structures or custom components embedded in prose, Keystatic gives you more tools to define those precisely. md0 covers the most common field types used in marketing and documentation sites, but Keystatic's API surface is broader for complex data models.
The Real Question
Which One Fits Your Project
Both tools are actively maintained. Both commit markdown to GitHub. Neither is clearly better in all situations. The choice comes down to your team's starting point.
Choose md0 if you want to skip the schema step
Your repository already has markdown files in folders. You want to connect a CMS without writing a config file or adding dependencies to your project. Your editors are non-developers who will use a shared URL at cms.md0.io. Your site runs on any framework including Hugo, Jekyll, or Eleventy. You want the CMS separated from your codebase entirely.
Choose Keystatic if you want type-safe content and local editing
Your team writes TypeScript and wants compile-time guarantees that content queries match the schema. You use Next.js, Astro, or Remix. You want to edit content locally against your filesystem without GitHub access. You have complex nested content models that benefit from Keystatic's rich field API. You are comfortable embedding the editor into your application's routing.
SKIP THE CONFIG FILE
Connect your GitHub repo and start editing markdown in under five minutes. No config file. No new dependencies. Free for public repositories.
GET STARTED FREE