← Knowledge Base
platform

TinaCMS

A Git-backed Headless CMS that brings visual editing to Markdown sites. The perfect companion for Next.js.

4 min read

Introduction

TinaCMS is a unique player in the CMS space. It is not a database-driven CMS. It is a Git-backed CMS that adds a visual editing layer to your code repository.

Originally born as a React-based sidebar editor, it has evolved into a robust content platform with a powerful GraphQL layer. It targets the “Jamstack” developer who loves storing content in Markdown/MDX files but whose marketing team hates editing raw text files in GitHub.

Architecture and Technology

Tina acts as a bridge between your Git Repo and a Visual UI.

The “Content Lake” (Data Layer)

In the early days, Git-based CMSs (like Netlify/Decap CMS) were slow because they queried the GitHub API directly. Tina solved this by introducing the Content API.

  1. Indexing: TinaCloud indexes your Git repository into a database (The “Data Layer”).
  2. GraphQL: It exposes a high-performance GraphQL API to query that content.
  3. Sync: When you push to Git, Tina updates the index. When you save in Tina, it commits to Git.

Visual Editing (Contextual Editing)

Tina wraps your React components to enable specific editable fields.

  • If you have a <h1>{title}</h1>, you wrap it with Tina helpers.
  • In “Edit Mode,” clicking that H1 turns it into a text input.
  • This happens on your production site (or a preview branch), giving a true WYSIWYG experience.

The Configuration (tina/config.ts)

Tina is “Schema-First.” You define your content models in code.

{
  name: "post",
  label: "Blog Posts",
  path: "content/posts",
  fields: [
    {
      type: "string",
      name: "title",
      label: "Title",
      isTitle: true,
      required: true,
    },
    {
      type: "rich-text",
      name: "body",
      label: "Body",
      isBody: true,
    },
  ],
}

This TypeScript configuration serves as the single source of truth. It generates the GraphQL schema and the Admin UI automatically.

Developer Experience (DX)

Tina creates a workflow that developers adore: “Content as Code.”

  • Branching: Since content is just files in Git, you can create a new branch redesign-homepage, rewrite all the content, change the components, and merge it all via a Pull Request. No “Content Freeze” required during migrations.
  • Local Development: You run npx tinacms dev. It spins up a local GraphQL server that reads from your local file system. You can edit content locally, and it saves to your local .md files.

MDX Support

Tina shines with MDX (Markdown + JSX). You can define custom “blocks” (e.g., <CallToAction />) in your markdown. Tina parses these and provides a UI form for the block’s props. This prevents editors from breaking the site layout while giving them power to use complex components.

Typical Use Cases

1. Documentation Sites

Docusaurus or Nextra sites.

  • Why Tina: Docs developers want to write in Markdown in VS Code. But typo fixes can be done by non-technical contributors via the Tina UI without needing to clone the repo.

2. Corporate Marketing Sites

Next.js sites that need high performance.

  • Why Tina: Since the content is compiled to static JSON/HTML at build time (SSG), the production site has 0ms database latency. It is just static files.

3. Monorepos

Large organizations with a Design System package and multiple sites in one repo.

  • Why Tina: Tina loves monorepos. You can scope the CMS modification to a specific sub-folder.

Strengths

  • Git Versioning: You have a mathematically provable history of every change ever made. You can revert to a version from 2 years ago instantly.
  • Developer Freedom: You own the content. It’s just text files. If Tina disappears tomorrow, you still have your website and all your data. No export script needed.
  • Visual Editing: The ability to edit contextually on the page is a massive win for content editors.

Limitations and Trade-offs

  • Build Times: Since content changes are Git commits, every “Publish” triggers a CI/CD build (Vercel/Netlify). For a site with 10 edits an hour, this can clog build queues. (Note: key-value storage adaptors are experimental to solve this, but Git is the default).
  • Media Assets: Storing heavy images in Git can bloat the repo. You usually need to wire up an external media provider (Cloudinary/S3) for a serious site.
  • Dynamic Content: It is not meant for “User Generated Content” like comments or a forum. It is for “Editor Generated Content.”

Verdict

TinaCMS is the standard-bearer for the next generation of Git-based CMSs. It takes the “Static Site Generator” philosophy and makes it accessible to non-technical users. If you are a developer building a Next.js marketing site and you want to keep your content in your repo, Tina is the best tool for the job.

Join us at CMS Conf 2026

Nov 12-14 in Gdynia, Poland

Buy a Ticket