TinaCMS
Open-source, Git-backed headless CMS with visual editing directly on your site.
Why consider TinaCMS?
TinaCMS is an open-source headless CMS with Git-backed content and a visual, in-context editing experience. Editors see and click elements on the live page to modify content.
Learn TinaCMS by building
Practical setup notes, real use cases, and copy-ready examples in one focused guide.
In this guide10 sections
What is TinaCMS?
TinaCMS is an open-source, Git-backed headless CMS with a distinctive in-context visual editing experience, developed with TypeScript and React. It operates as a developer-friendly, self-hostable alternative to proprietary visual CMS platforms like Contentful and Sanity.
TinaCMS stores all content as Markdown, MDX, and JSON files in your Git repository. Its standout feature is visual editing: editors click directly on live site elements—headlines, body paragraphs, images—to modify them in real time, with changes immediately reflected on the page. All edits are committed as readable Git changes.
Who Is It For?
- Next.js & React Developers: Building content-driven websites where non-technical clients need a visually intuitive way to update content.
- Marketing Teams: Editing website copy, hero banners, and call-to-action sections directly on the live page without navigating a separate CMS dashboard.
- JAMstack Teams: Maintaining Git-based content pipelines with version history, pull request workflows, and CI/CD site deployments.
Key Features
- In-context visual editing: Click any page element to edit it inline with an adjacent editing panel.
- Git-backed content storage: All content lives as Markdown/MDX/JSON files committed to your repository.
- GraphQL content API: Strongly-typed queries for content with auto-generated TypeScript types.
- Block-based page builder: Compose pages from reusable component blocks via a drag-and-drop interface.
- Self-hostable TinaCMS backend or Tina Cloud managed service.
Setting Up TinaCMS in a Next.js Project
# Add TinaCMS to an existing Next.js projectnpx @tinacms/cli@latest initDefine your content schema in tina/config.ts:
import { defineConfig } from "tinacms";export default defineConfig({ build: { outputFolder: "admin", publicFolder: "public", }, schema: { collections: [ { name: "post", label: "Blog Posts", path: "content/posts", format: "mdx", fields: [ { type: "string", name: "title", label: "Title", isTitle: true, required: true }, { type: "datetime", name: "date", label: "Date" }, { type: "rich-text", name: "body", label: "Body", isBody: true }, ], }, ], },});Start the development server with TinaCMS enabled:
npx tinacms dev -c "next dev"Visit http://localhost:3000/admin to open the TinaCMS editing interface.
Practical Use Cases
1. Marketing Page In-Context Editing
A marketing manager visits the company homepage, clicks "Edit with Tina", and directly modifies the hero headline and CTA button text on the live page, seeing the update reflected immediately.
2. MDX Blog with Visual Block Editor
A technical writer builds a tutorial article using TinaCMS's block-based editor, adding code blocks, callout components, and embedded images without touching Markdown syntax.
3. Git-Versioned Content History
An editor accidentally deletes a paragraph; the content change is visible in the Git log, enabling a quick git revert to restore the previous version.
Troubleshooting and Limitations
- Self-Hosting Tina Backend: For production self-hosting without Tina Cloud, deploy the TinaCMS self-hosted backend with a GitHub OAuth app for Git authentication.
- MDX Component Registry: Custom MDX components used in rich-text fields must be registered in TinaCMS's component registry so the visual editor can render and edit them.
Official Resources
- Official Website: https://tina.io
- GitHub Repository: https://github.com/tinacms/tinacms
- Documentation: https://tina.io/docs/
Related tools
More options with a similar category or technology profile.
diskus
Minimal, fast alternative to du -sh written in Rust using multi-threaded directory traversal.
peco
Simplistic interactive filtering tool for Unix pipelines, process lists, and file trees.
Dapr CLI
Command-line tool for managing Dapr distributed application runtime environments and sidecars.
Freeze
Generate beautiful image screenshots and SVGs of code snippets and terminal outputs.