TinaCMS
An open-source, Git-backed headless CMS that gives editors a live visual editing UI over Markdown, MDX, JSON, and YAML content while developers keep everything in version control.
TinaCMS is a headless content management system built around the idea that content should live in your Git repository, not a proprietary database. It reads and writes Markdown, MDX, JSON, and YAML files directly, exposes them through a generated GraphQL API, and layers an optional live-preview visual editor on top so non-technical editors can change content without touching code or learning Git.
The project is a pnpm/Turborepo monorepo: the core tinacms package handles the editing UI and client, @tinacms/cli scaffolds schemas and runs the local GraphQL server, @tinacms/graphql and @tinacms/schema-tools generate the content API from your schema definition, and a set of storage adapters (next-tinacms-s3, -azure, -cloudinary, -dos) plug in media handling for different backends. Auth integrations for Clerk and Auth.js, plus a GitHub content-provider package, round out the pieces needed for a production editing workflow.
TinaCMS is fully usable self-hosted and free — the open-core model reserves its hosted collaboration layer, TinaCloud, for teams that want managed content APIs, role-based access, and an editorial workflow without running their own GraphQL server.
What You Get
- A generated GraphQL API over your existing Markdown, MDX, JSON, and YAML content files
- An optional live visual editing UI that writes changes back to your Git repository as commits
- A CLI (
@tinacms/cli) that scaffolds schemas, runs a local dev GraphQL server, and builds the admin UI - Storage adapters for S3, Azure, Cloudinary, and DigitalOcean Spaces, plus Auth.js/Clerk auth integrations
Common Use Cases
- Giving marketing or content teams a visual editor for a Next.js or Astro site’s Markdown content without exposing them to Git
- Migrating off a proprietary headless CMS while keeping content in version control instead of a vendor’s database
- Adding structured, schema-validated content editing to an existing static site generator setup
- Running a fully self-hosted content workflow with no dependency on a hosted CMS API
Under The Hood
Architecture
TinaCMS is organized as a pnpm/Turborepo monorepo where packages/tinacms provides the editing UI and toolkit, packages/@tinacms/cli owns schema scaffolding and the local GraphQL dev server, and packages/@tinacms/graphql + schema-tools handle turning a user-defined schema into a queryable API over the filesystem. Storage and auth are pulled in as separate adapter packages (next-tinacms-s3/azure/cloudinary/dos, tinacms-authjs, tinacms-clerk) rather than baked into the core, so swapping a media backend or auth provider doesn’t touch the editing engine itself. The tinacms-gitprovider-github package isolates the Git-write path, which matters since committing editor changes back to a repo is the core mechanic the rest of the system depends on.
Tech Stack
TypeScript throughout, built with Turborepo and pnpm workspaces, tested with Vitest and Playwright for end-to-end coverage, and distributed as scoped npm packages under tinacms and @tinacms/*. The CLI generates a GraphQL schema and server from user-authored content models, and the framework integrates natively with Next.js (with an Astro adapter package as well) rather than being framework-agnostic from day one.
Code Quality Over 200 test files were found across the packages, with CI running build, test, and lint stages on every push to main — a meaningfully more tested codebase than most self-hosted CMS alternatives its size, consistent with its multi-year, actively maintained history.
What Makes It Unique Most headless CMS products store content in their own database and require an API call to read it back; TinaCMS instead keeps content as plain Markdown/MDX/JSON/YAML files in your Git repo and generates the GraphQL layer on top of that, so the CMS and the git history stay the same source of truth — editors get a visual UI, but every change is still a commit.
Self-Hosting
Licensing Model Apache-2.0 licensed — the core CMS, GraphQL layer, and editing UI are fully open source and self-hostable with no license key.
Self-Hosting Restrictions None for the core editing and content-API functionality. What’s gated is the hosted companion product, TinaCloud — a separate managed service (not required to use TinaCMS itself).
Enterprise Features TinaCloud plans (per tina.io/pricing) add: more editor seats, additional roles, an editorial review workflow, AI-assisted editing features, a management API, SSO, and GitHub Enterprise support at the top Enterprise tier — none of which are required to run TinaCMS self-hosted.
Cloud vs Self-Hosted Self-hosted TinaCMS gives you the full editor and content API; TinaCloud adds a managed backend, multi-user roles, and editorial workflow on top instead of you running your own GraphQL server and auth.
License Key Required No, for self-hosted use. TinaCloud is a separate subscription product.
Related Apps
strapi
CMS
Open-source headless CMS that auto-generates REST and GraphQL APIs from your content models, with a fully customizable admin panel you control.
strapi
OtherGhost
CMS · Blogging
Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.
Ghost
MITPayload CMS
Developer Tools · Blogging · CMS
The open-source, Next.js-native headless CMS that lives inside your /app folder and gives you a full TypeScript backend instantly.