COMPARISON

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 FREE

Background

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

Featuremd0 CMSKeystatic
Config requiredNonekeystatic.config.ts
Auto-detection of collectionsYes, from folder structureManual definition required
GitHub modeNativeYes (GitHub mode)
TypeScript requiredNoFor config file
Free tierPublic reposOpen source (self-host)
FrameworkAny static siteNext.js, Astro, Remix
Local mode (no GitHub)GitHub requiredYes, local mode
Cloud hosting for editorscms.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.

A

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.

B

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