Website profiles · Technology insights · Alternatives

tina.io Paid content

Categories: Development

TinaCMS is the successor to Forestry.io, now maintained by SSW. Migrate your Forestry site to Tina with our step-by-step guide and enjoy enhanced visual editing features.

Visit website

Updated: 2026-10-01 14:12 Language: English (default) Access: Normal

Profile views 3 Outbound visits 1
Forestry.io to TinaCMS Migration Guide Full homepage screenshot
Editorial Review

Website Review

What is TinaCMS?

TinaCMS is an open-source, Git-backed headless CMS with a visual editing layer for Markdown. Content lives as files in your repository; editors work in a live preview instead of a separate admin database. It is aimed at developers building React and Next.js sites who want non-technical teammates to edit content without giving up version control.

What it does

  • Visual editing on real pages: Editors click into the rendered page and change text or images in place, rather than filling out detached form fields.
  • Git as the content store: Every save becomes a commit, so history, branching, review and rollback come from your existing workflow.
  • Markdown output: Content stays plain-text and portable, which matters if you later switch frameworks or feed it to other tools.
  • Two starting points: TinaCMS for general websites and blogs, and TinaDocs, a documentation starter built on the same foundation.
  • Quick scaffold: The site shows npx create-tina-app@latest, which sets up a Markdown repository without a long configuration phase.

Who it suits, and the trade-off

You are… TinaCMS fits if… Watch out for…
A developer on React/Next.js You want editing UI without building one You still own schema and build setup
A content editor You prefer editing the page itself You work through a Git-based flow, not a classic CMS login
A docs team You want Markdown docs with visual editing Very large content sets need planning

The core trade-off: you gain developer control and portable content, and in exchange you accept Git as part of the editorial process. Teams without any Git familiarity will feel that more than teams already using pull requests.

Next step

If you have a React or Next.js project, scaffold a small test site with npx create-tina-app@latest, connect a repository, and have one non-developer edit a page. That single exercise tells you quickly whether the Git-based model fits how your team actually works. For a documentation project specifically, evaluate TinaDocs separately, since it trades flexibility for near-zero configuration.

How does TinaCMS integrate with Git and Markdown for content editing?

TinaCMS treats your Git repository as the content store and Markdown files as the content format. Instead of holding content in a separate database that only the CMS can read, it reads and writes .md files in your repo, so the same files power the site build and remain editable in any text editor.

How the pieces fit together

  • Git as the backend: Content changes are committed to the repository. That means version history, branching, pull requests and rollback come from Git rather than a bespoke CMS audit log.
  • Markdown as the storage format: Each page or post is a Markdown file, often with frontmatter for structured fields. TinaCMS's page evidence describes this as keeping content "clean, portable, and AI-friendly."
  • A visual editor on top: Editors work in a visual interface while the underlying output is still Markdown. Developers keep control of the schema and rendering; non-developers get a form-like or inline editing experience.
  • Framework fit: The toolkit is aimed at React and Next.js sites, and the page notes it has been used with Astro and Hugo as well.

What that means in practice

A typical workflow for a small marketing team: a developer defines which fields exist (title, hero image, body), an editor opens the visual editor, changes copy, previews it, and saves. That save becomes a Git commit, which can go through a pull request before it reaches production. If someone edits the Markdown directly in their own editor, the CMS sees the same change on the next pull — there is no sync problem because there is only one copy of the content.

Trade-offs to weigh

Consideration Git + Markdown approach
Portability High — content is plain files you can move or host anywhere
Editorial experience Good for structured pages; large media libraries and complex relationships need more setup
Developer overhead You define schemas and build steps; there is no fully managed backend
Rollback and audit Native via Git history and pull requests
Real-time collaboration Weaker than a database-backed CMS where many editors work simultaneously

A useful next step

Decide based on who edits and how often. If your content is page-oriented, your team is comfortable with a Git-based deploy, and you value portable Markdown, the model fits well. If you need dozens of editors working live in the same document, or heavy digital-asset management, compare it against database-backed options before committing. Start by running the documented npx create-tina-app@latest starter on a throwaway repo to see the Markdown-plus-visual-editor loop end to end.

For related approaches, see Decap CMS and Forestry (now part of Tina), and for the Git-based deployment side, Vercel and Netlify.

Can I use TinaCMS with frameworks like Next.js, React, or Hugo?

Yes. TinaCMS is built for React-based stacks first, and it also works with static site generators like Hugo.

Framework support

Framework How TinaCMS fits What to expect
Next.js The most natural fit: Tina's visual editing, preview and content queries work inside the React app, with content stored as Markdown in Git Best-documented path; you can add editing to an existing Next.js site rather than rebuilding
React (Vite, Remix, Astro islands) Tina provides the editing UI and content API; you wire it into your components Works well, but you handle more of the integration yourself than in Next.js
Hugo Tina can manage the Markdown files Hugo builds from Practical for content editing; the visual editor experience is less seamless because Hugo isn't React

The key point is that TinaCMS is Git-native and Markdown-based, so the framework mainly affects the editing experience, not whether your content can be managed. A Hugo site can still have its content edited through Tina; you just get less of the live visual preview that React users enjoy.

A concrete scenario

Say you run a Next.js marketing site plus a Hugo documentation site. You could keep both content sets as Markdown in the same or separate repos, let writers edit through Tina's visual editor, and let each framework build as usual. The trade-off is setup effort: the Next.js side is close to plug-and-play, while the Hugo side needs more configuration to map fields and previews.

Next step

If you're on Next.js, start with the quickstart and add Tina to a single content type before migrating everything. If you're on Hugo or another non-React generator, prototype with one section of your docs first to confirm the editing workflow suits your writers.

For background on the React side, see React and Next.js; for the static generator, Hugo.

How does TinaCMS pricing work for different project needs?

TinaCMS mixes an open-source core with paid cloud plans, so the right fit depends on whether you need hosted collaboration or can run the Git-backed editor yourself. The page itself points to a pricing page at TinaCMS rather than listing tiers in the copy, so treat the model below as the general pattern for this kind of Git-based CMS, not a confirmed quote.

What typically drives cost

  • Hosting and collaboration layer. The open-source editor can be self-hosted; paid plans usually cover managed hosting, user seats, and roles/permissions.
  • Number of editors. Solo developers and small teams often stay on free or low-cost tiers; larger content teams pay per additional user.
  • Build type. Static sites (Astro, Hugo, Next.js) need less infrastructure than sites using real-time previews and dynamic content.
  • Support and SLAs. Business or enterprise needs add onboarding, priority support, and compliance.

Practical decision guide

Project need Likely starting point
Personal blog or portfolio Open-source/self-hosted or free tier
Small team, shared edits Entry paid plan with a few seats
Marketing site with many editors Mid-tier plan sized by user count
Enterprise, SSO, compliance Custom/enterprise quote

Next step: open the pricing page, count your monthly editors, and check whether you need managed hosting. If you only need Markdown in Git and one or two editors, the open-source route is usually enough; if non-technical staff must edit and preview live, budget for the hosted tier.

How do I set up TinaCMS with npx create-tina-app for a new site?

Run npx create-tina-app@latest in the directory where you want the project, then follow the prompts. TinaCMS describes this as its getting-started path: the command scaffolds a new site, sets up a Markdown repository, and gives you a working visual editor without a lengthy manual setup. For a new project, that is the fastest route because it wires together the Git-backed content layer, the editing UI, and a starter front end in one pass.

What the scaffold gives you

The generated project is a TinaCMS site with content stored as Markdown in a Git repository. That matters if you care about portability: your content stays readable in any editor and works with static-site or React-based front ends. TinaCMS also markets this as AI- and GEO-friendly because Markdown is the format LLMs handle natively. Treat that as a positioning claim, not a guarantee of search performance.

A practical first-run sequence

  1. Run the create command and pick a starter when prompted.
  2. Install dependencies and start the local dev server.
  3. Open the local Tina admin route to confirm the visual editor loads.
  4. Edit a sample page, save, and check that the change appears in your Git working tree.
  5. Commit the result to verify the Git-backed workflow end to end.

Step 4 is the important one. If edits do not show up as file changes, your content model or Git configuration needs attention before you build anything real.

Choosing between TinaCMS and TinaDocs

The scaffold supports two common starting points, and the choice is mostly about the site you are building.

Starting point Best for Trade-off
TinaCMS visual editor Marketing sites, blogs, React front ends You assemble pages and content models yourself
TinaDocs Documentation sites Less flexible if you need non-docs layouts

If you are launching a product docs site, TinaDocs is the shorter path. If you are building a marketing site or blog with custom React components, start with the general TinaCMS scaffold.

Who this suits

Developers who want visual editing for non-technical collaborators but refuse to give up Git-based content. It is a weaker fit if your team wants a hosted database CMS with no repository involvement, or if nobody on the team is comfortable with a Node-based build.

For framework-specific setup details, the official docs are the right next stop: TinaCMS. If you are weighing the broader category, Next.js documents the React framework TinaCMS commonly pairs with.

What is TinaDocs and how does it differ from TinaCMS?

TinaDocs is a documentation starter built on top of TinaCMS: a ready-made setup for creating, editing and publishing docs with little to no configuration. TinaCMS is the underlying open-source, headless CMS with a visual editor and Git version control — the general-purpose tool you can wire into many kinds of sites.

H3 How they differ in practice

TinaCMS TinaDocs
Role The CMS toolkit itself A documentation starter built on TinaCMS
Best for Custom sites where you control structure and components Teams that mainly need a docs site running quickly
Setup effort You integrate it into your framework Described as zero-configuration
Editing model Visual editing of Markdown content stored in Git Same editing approach, aimed at documentation pages

H3 Who each one suits

  • Choose TinaDocs if your goal is a documentation site and you would rather not assemble the structure yourself. It fits product teams, developer-relations writers and open-source maintainers who publish guides, references and release notes.
  • Choose TinaCMS if you are building a broader site — marketing pages, blogs, landing pages — and want visual editing while keeping content as Markdown in your repository. It is aimed at developers working in React and similar front-end stacks.

H3 A concrete scenario

Say a small team maintains both a product site and a docs section. They could use TinaCMS for the product pages and reach for TinaDocs when the docs need their own clean, low-friction publishing flow. Because both keep content as Markdown in Git, the files stay portable and readable by tools and language models — a practical benefit if you care about search optimisation or AI-assisted workflows.

H3 Decision criterion

Ask one question: do you need a documentation site specifically, or a content system for a site you are designing? A docs-first need points to TinaDocs; a general build points to TinaCMS. If you are unsure, try the editor first to see whether the visual Markdown workflow matches how your writers actually work.

Next step: run npx create-tina-app@latest to spin up a project and inspect how content is stored, then compare that structure against your existing repository. For background, see TinaCMS.

Related questions

More questions →
What Is an Open-Source Data Management System Like CKAN?

An open-source data management system (DMS) is software whose source code is publicly available and that provides the core functions of publishing, sharing, and using data. CKAN is a leading example: it is an open-source DMS built to power data hubs and data portals, and it is used by hundreds of portals worldwide. It fits best when you need a catalog-style portal to publish datasets for others to find and reuse — typically government open data or enterprise internal data assets — rather than a general-purpose database or analytics platform.

What "open-source DMS" actually means

A DMS in this sense is not just storage. It is the layer that organizes data into a catalog, describes it with metadata, and gives people a way to discover and access it. The open-source part matters because it changes how you can adopt and extend the system.

Core capabilities of a DMS like CKAN, per the project's own description:

  • Publish — make datasets available through a portal
  • Share — expose data to external or internal audiences
  • Use — let people find, understand, and reuse what is published

CKAN is written in Python and its repository shows roughly 5.1k stars and 2.1k forks, which indicates an active developer community around the codebase.

How CKAN fits as an open-source DMS

CKAN positions itself as "the world's leading open source data management system" and describes its purpose directly: it powers data hubs and data portals and makes it easy to publish, share, and use data. Two things follow from that framing:

  1. It is portal-oriented. The unit of work is the dataset and its metadata, presented through a browsable catalog — not raw tables or dashboards.
  2. It is a platform, not a single site. The same software is deployed across many separate portals, each with its own data and branding.

CKAN has also been added to the Digital Public Goods Registry, recognized as a data management system contributing to 9 of the 17 UN Sustainable Development Goals. That recognition is a signal of institutional trust, not a technical specification, so treat it as context rather than a feature.

Typical use cases

The project splits its audience into two broad groups, and the distinction is useful when deciding whether CKAN matches your situation.

Government open data portals

CKAN is used by national and regional government organizations across the European Union, the Americas, Asia, and Oceania to power official and community data portals. Named adopters include:

Adopter What they publish
Government of Canada Tens of thousands of datasets making governmental data more accessible
Singapore Government Economic, education, environment, finance, and health data
Australian Government Public data from over 800 different organizations

If your goal resembles these — a public catalog of many datasets from many sources — CKAN's design and its existing deployments are strong evidence of fit.

Enterprise internal data assets

CKAN has also been adopted by enterprise organizations in sectors such as resources, energy, pharmaceuticals, and finance to publish and manage internal data assets. Here the same catalog model is applied behind a firewall, for internal discovery rather than public release.

Open-source DMS vs. proprietary alternatives

The trade-off is not simply cost. It is about who controls the system and how much you can shape it.

  • Control and extensibility — with open source you can inspect, modify, and self-host the software. With proprietary tools you generally accept the vendor's roadmap and hosting model.
  • Cost structure — open-source licensing does not by itself mean zero cost; you still fund hosting, integration, and operations. The CKAN site does not publish pricing, so do not assume any deployment is free.
  • Community vs. vendor support — CKAN offers both community support and commercial support, and its site provides a contact route ("Speak with us") plus named stewards who help organizations implement portals. Proprietary vendors typically bundle support into the license.
  • Ecosystem evidence — a public showcase of government and enterprise portals lets you evaluate real deployments before committing.

Choose open source when you need control, self-hosting, or deep customization. Choose proprietary when you want a single accountable vendor and minimal operational burden, and are willing to accept less flexibility.

How to evaluate whether CKAN fits your project

Work through these before deciding:

  1. Confirm the shape of your need. Are you publishing a catalog of datasets for others to discover? If yes, CKAN's model matches. If you mainly need analytics, streaming, or transactional storage, look elsewhere.
  2. Check features against your requirements. Review the Features and Docs sections on ckan.org for the specific capabilities you need.
  3. Look at comparable deployments. Browse the Showcase for portals similar in scale and sector to yours.
  4. Decide on hosting and operations. Determine whether you will self-host or use commercial support, and budget for that.
  5. Assess community activity. Check the GitHub repository and community channels for current activity, since an active project is easier to depend on.
  6. Talk to the maintainers' stewards. The site's contact form is described as the best way to reach them if you want guidance on implementation.

Common sticking points

  • Assuming "open-source" means "free to run." The software may be freely licensed, but hosting, integration, and support are real costs. The site does not state pricing, so verify directly.
  • Treating CKAN as a database. It is a management and portal layer over data, not a replacement for your storage or processing systems.
  • Skipping the fit check. The government and enterprise examples are useful precisely because they show the intended scale and use pattern — a single small internal dataset may not justify a full portal.

If your project is a data hub or portal where publishing, sharing, and discovery are the point, CKAN is a well-evidenced open-source option. If your needs center on analysis or transactions, it is the wrong tool, and the evaluation steps above will make that clear quickly.

What Are Open-Source UI Element Libraries and How Do They Differ From UI Frameworks?

An open-source UI element library is a collection of individual, ready-made interface pieces—buttons, cards, inputs, toggles, loaders—that you copy into your own project and adapt. A UI framework, by contrast, is a structured system of components, conventions, and often a theming layer that governs how your whole interface is built. The practical difference: an element library gives you a snippet; a framework gives you a way of working. If you need a polished button in ten minutes, reach for the element library. If you're building a 40-screen product with a team, you probably want the framework.

What "open-source UI element library" actually means

The term gets used loosely, so it helps to separate the parts:

  • Open-source: the code is publicly available, and the license tells you what you may do with it—copy, modify, redistribute, or use commercially.
  • UI element: a single, self-contained piece of interface, usually small enough to read in one sitting. A button with hover states, a pricing card, a search field.
  • Library: a browsable, searchable collection of those elements, typically contributed by many different people.

On a site like Uiverse, elements are shared by a community and written in plain CSS or Tailwind. You find one you like, copy the markup and styles, paste them into your project, and adjust colors, spacing, and text to fit. There's no package to install and no build step required—which is exactly the appeal, and also the source of most of the confusion.

Element library vs. UI framework: the core differences

Dimension Open-source UI element library UI framework / design system
Unit of reuse A single snippet you copy A component you import or call
Installation None; paste into your code Package install, config, sometimes a provider
Consistency Depends on you; each element may look different Enforced by shared tokens and APIs
Theming Manual edits per element Central theme/config file
Updates You own the copy; no upstream updates Version bumps bring fixes and changes
Accessibility Varies per contributor; must be checked Usually tested and documented
Best for Prototypes, landing pages, small sites, one-off needs Multi-page apps, teams, long-lived products
Learning curve Low—read the CSS Higher—learn the API and conventions

The table isn't a verdict. It's a map of trade-offs. Element libraries win on speed and freedom; frameworks win on consistency and maintenance.

Licensing and attribution: what to check before you paste

This is where people get into trouble, and it's worth slowing down for.

  1. Find the license. Every element or collection should state one. Common open-source licenses include MIT, Apache-2.0, and BSD. Some projects use copyleft licenses like GPL, which can impose obligations if you redistribute your code.
  2. Understand what the license permits. MIT and Apache-2.0 are permissive: you can typically use the code in commercial and closed-source projects. Copyleft licenses may require you to release derivative source under the same terms.
  3. Check attribution requirements. Permissive licenses usually require you to keep the copyright notice and license text somewhere in your project. That's a real obligation, not a formality.
  4. Look for per-element terms. On community sites, the site's overall terms and the individual contributor's stated wishes may differ. If a contributor asks for credit, honor it.
  5. When in doubt, ask or avoid. If a snippet has no license at all, you don't have clear permission to reuse it. Treat "no license" as "not open source," even if the code is publicly visible.

This article is general information, not legal advice. For commercial products with real exposure, have someone qualified review the licenses you're relying on.

How to use a community element in your project: a practical workflow

Here's a repeatable process that avoids most of the usual mess.

1. Start from a real need, not a browsing session

Decide what you need first—"a compact primary button with a loading state"—then search. Browsing aimlessly produces a pile of pretty snippets that don't fit together.

2. Copy the smallest version that works

Take the markup and the styles. Strip anything you don't need: demo wrappers, extra animations, decorative layers. Less code means fewer surprises.

3. Convert it to your conventions

If your project uses design tokens or CSS variables, replace hard-coded values:

/* Before: hard-coded */
.button { background: #4f46e5; border-radius: 8px; }

/* After: token-based */
.button { background: var(--color-primary); border-radius: var(--radius-md); }

This one step is what keeps a copied element from looking like a foreign object in your UI.

4. Check accessibility before you ship

Community elements vary widely here. Verify at minimum:

  • Keyboard focus is visible and the element is reachable by Tab.
  • Color contrast meets WCAG AA (4.5:1 for normal text).
  • Interactive elements use semantic HTML (<button>, not a clickable <div>).
  • Form inputs have associated labels.
  • Motion respects prefers-reduced-motion.

5. Test in context

Paste it into a real page with real content. Long labels, small screens, and dark mode break more copied elements than anything else.

6. Note where it came from

Keep a short comment or an internal credits file: source, license, date. Future you—and your legal reviewer—will be grateful.

Where element libraries genuinely shine

  • Prototypes and demos: you need something clickable today, not a design system.
  • Landing pages and marketing sites: a handful of distinctive elements, each custom.
  • Filling gaps: your framework lacks one specific component, and you don't want to build it from scratch.
  • Learning: reading well-made CSS is one of the fastest ways to improve.
  • Small projects: a personal site doesn't need a theming architecture.

Where they fall short

  • Consistency at scale: ten elements from ten contributors rarely look like one product.
  • Maintenance: you own every copy. When your design changes, you edit each one.
  • Accessibility debt: you inherit whatever the contributor did or didn't do.
  • No upstream fixes: a bug fixed in the original won't reach your copy.
  • Integration friction: different naming conventions, different units, different assumptions about resets.

When to choose which

Choose an element library when the scope is small, the timeline is short, or you need a few distinctive pieces rather than a whole system.

Choose a framework or design system when multiple people build multiple screens over months, when consistency is a product requirement, or when accessibility and theming need to be guaranteed rather than checked.

A hybrid works well for many teams: adopt a framework for the structural components—forms, navigation, layout—and borrow individual elements for the places where you want personality. Just route every borrowed element through the same token and accessibility checks, so it lands as part of your system rather than beside it.

The short version: open-source UI element libraries are a fast, flexible way to get good-looking interface pieces into a project. They are not a substitute for a design system, and the license and accessibility details are the part worth reading carefully.

What Is Next.js and What Is It Used For?

Next.js is a React framework for building web applications. It adds structure and built-in capabilities on top of plain React — server-side rendering, static site generation, file-based routing, and API routes — so you can ship production sites without assembling a toolchain yourself. It fits projects where SEO, fast initial page loads, and a mix of static and dynamic content matter: marketing sites, blogs, documentation, e-commerce storefronts, and dashboards. If you are building a purely client-side single-page app with no server rendering or routing needs, plain React may be enough.

How Next.js Relates to Plain React

React is a UI library: it gives you components and a rendering model, but leaves routing, data fetching, and build configuration to you. Next.js is a framework built on React that makes those decisions for you.

Concern Plain React Next.js
Routing Add a router (e.g., React Router) yourself File-based routing built in
Rendering Client-side by default Server-side rendering, static generation, and client rendering per page
Data fetching You wire it up Conventions for fetching at build time or per request
Backend endpoints Separate server needed API routes in the same project
Build setup You configure bundling Preconfigured, with sensible defaults

The trade-off: Next.js gives you conventions and less setup, but you adopt its opinions about routing and rendering. Plain React gives you freedom at the cost of assembling more pieces.

Core Features and What They Do

Server-side rendering (SSR)

Pages are rendered on the server per request, so the browser receives ready HTML. Useful for content that changes often or depends on the request — personalized pages, dashboards behind login.

Static site generation (SSG)

Pages are rendered at build time into static HTML. Fast to serve and easy to cache. Good for blogs, docs, and marketing pages whose content changes on a publish cadence rather than per request.

File-based routing

The file structure defines the routes. Adding a file creates a route; nesting folders nests routes. This removes most manual route configuration.

API routes

You can define server endpoints inside the same project, which is handy for form handling, webhooks, or small backend tasks without a separate service.

Common Use Cases

  • Marketing and landing pages — static generation for speed and SEO.
  • Blogs and documentation — content-heavy, mostly static, benefits from fast loads.
  • E-commerce — product pages can be static or incrementally updated, while cart and checkout use server or client rendering.
  • Dashboards and authenticated apps — server-side rendering for per-user data.

Pairing Next.js With a Headless CMS

Next.js handles rendering and routing; it does not manage content authoring. A headless CMS stores content separately and delivers it to your Next.js app via an API or build-time fetch. This separation lets editors work in a visual interface while developers keep control of the front end.

TinaCMS is one option in this space. It is an open-source, headless CMS with built-in Git version control, and it stores content as Markdown in your Git repository. That means content stays in a format that is portable and readable by both humans and tooling. TinaCMS offers a visual editing experience for React sites, and its documentation notes it can be added to React websites for real-time content editing. It also provides TinaDocs, a documentation starter built on top of TinaCMS.

If you want to try the setup path, TinaCMS documents a starting command:

npx create-tina-app@latest my-blog

The expected result is a Markdown-based content repository scaffolded for you, which you then connect to your Next.js front end.

When to Choose Next.js

Choose Next.js when you need:

  • SEO-friendly rendering or fast first loads
  • A mix of static and dynamic pages in one project
  • Routing and API endpoints without extra setup

Consider plain React or another approach when your app is entirely client-side, has no SEO or initial-load concerns, and you prefer to pick each library yourself.

If content editing by non-developers is part of the plan, decide on the CMS separately from the framework choice — Next.js and a headless CMS like TinaCMS are complementary, not alternatives.

What Is React and What Is It Used For?

React is a JavaScript library for building user interfaces out of reusable components. You reach for it when a page needs to change state without a full reload — feeds, dashboards, editors, shopping carts — and you want to describe those changes declaratively instead of hand-editing the DOM. It handles the view layer only; routing, data fetching, and build tooling come from other libraries or a framework like Next.js.

The core ideas

Components

A component is a function that returns markup. You compose small ones into larger ones, which is why React scales from a button to a whole application.

function Greeting({ name }) {
  return <h1>Hello, {name}</h1>;
}

JSX

JSX is the HTML-like syntax inside JavaScript. It compiles to plain function calls, so it is not a template language you have to learn separately — expressions, loops, and conditionals are just JavaScript.

Props and state

  • Props are inputs passed down from a parent. They are read-only inside the component.
  • State is data a component owns and can change. Changing state re-renders that component and its children.
import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>{count}</button>;
}

The mental model: UI is a function of state. You update the data, React works out the minimal DOM changes.

What people build with it

Use case Why React fits
Single-page apps Client-side routing swaps views without reloads
Interactive UI (forms, filters, drag-and-drop) State changes map directly to re-renders
Dashboards and data views Components compose into tables, charts, panels
Content-driven sites Pairs with static-site generators and headless CMSs
Cross-platform apps React Native reuses the component model for mobile

How React relates to Next.js and other tools

React is the library; Next.js is a framework built on top of it that adds routing, server rendering, and data fetching. The distinction matters when you pick a starting point:

  • Plain React (via a bundler like Vite) — you assemble routing and rendering yourself. Good for SPAs and learning the fundamentals.
  • Next.js — file-based routing and server-side rendering out of the box. Good for sites where SEO and first-load speed matter.

Both are common in the same stack. For example, a site can be built on Next.js for routing and rendering while a headless CMS handles content editing — TinaCMS, for instance, describes itself as adding real-time visual editing to React websites and stores content as Markdown in a Git repo, which keeps the content portable and readable by other tools.

Starting a React app

The fastest path is a scaffolding tool. With Vite:

npm create vite@latest my-app -- --template react
cd my-app
npm install
npm run dev

Expected result: a dev server starts (Vite prints the local URL, typically http://localhost:5173) and you see the default page. Edit src/App.jsx, save, and the browser updates without a manual refresh.

If you want a content-driven site instead, TinaCMS documents a one-command start:

npx create-tina-app@latest my-blog

That scaffolds a Markdown repository ready for editing. Note that TinaCMS publishes a pricing page, so check current terms there rather than assuming the hosted editing experience is free — the open-source toolkit and any paid tiers are separate questions.

Common sticking points

  • State updates look asynchronous. Reading count right after setCount gives the old value. Use the updater form (setCount(c => c + 1)) when the next value depends on the previous one.
  • Mutating props or state directly. React compares references; mutate an array in place and it may not re-render. Create a new array or object instead.
  • Reaching for global state too early. Most sharing is solved by lifting state to a common parent. Add a state library only when prop drilling becomes the actual problem.
  • Confusing React with the whole app. React renders the view. Persistence, auth, and content live elsewhere — decide those separately.

Choosing whether to use it

Pick React when your interface has meaningful interactive state and you want a component model that a large ecosystem supports. Skip it for mostly static pages where plain HTML and a little JavaScript are simpler, or when a server-rendered framework alone already covers your needs. If you are already on Next.js, you are already using React — the remaining decision is where your content lives, not whether to adopt the library.

What Is TinaCMS and How Does Its Git-Based Visual Editor Work?

TinaCMS is an open-source, Git-native headless CMS that pairs a visual editing interface with Markdown files stored in your own Git repository. It fits teams building React, Next.js, or static sites who want non-developers to edit content visually while developers keep full control of the codebase and version history. If your content already lives (or should live) as Markdown in Git, TinaCMS is designed for that workflow; if you need a database-backed CMS with no Git involvement, it is a different category of tool.

The core idea: Markdown in Git, editing in a visual layer

TinaCMS separates two things that traditional CMSs often merge:

  • Storage and versioning — Content is kept as Markdown files inside your Git repo. Every edit becomes a commit, so you get branching, diffs, rollback, and review through the tools you already use.
  • Editing experience — A visual editor sits on top, letting writers edit and preview content without touching raw Markdown or the repo directly.

Because the source of truth is plain Markdown in Git, your content stays portable. You are not locked into a proprietary database format, and you can move or reuse the files elsewhere.

How the workflow actually runs

  1. Content lives as Markdown in your repo. TinaCMS stores everything as Markdown in Git, so the published content is the same clean, portable format from the moment you write it.
  2. Editors open the visual editor. They edit fields and see a live preview rather than editing files by hand.
  3. Changes commit to Git. Each save is version-controlled, giving you a history of who changed what and when.
  4. Developers keep control. The CMS is headless, so it feeds content into your React/Next.js or static site build rather than dictating your frontend.

This is the "Git-native" part: version control is not an add-on, it is the storage model.

Who it is for

  • Developers who want a CMS that respects their repo, their build pipeline, and their frontend framework — the site describes it as an open-source toolkit for adding real-time visual editing to React websites.
  • Content creators and writers who want to edit and preview visually without learning Git commands.
  • Teams building React, Next.js, or static sites where Markdown is already the content format.

The homepage groups its offering into two starting points: TinaCMS (visual editor for websites) and TinaDocs (a documentation starter built on top of TinaCMS for publishing docs with minimal configuration).

What sets it apart

Differentiator What it means in practice
Git version control Every content change is a commit; you get history, diffs, and rollback natively
Markdown portability Content is plain Markdown, not locked in a proprietary store
Open source You can inspect and extend the toolkit
Headless It feeds your frontend rather than owning it
AI/LLM-friendly Markdown is the format LLMs are trained on, so content stays clean and machine-readable

The AI angle is worth noting: the site argues that because LLMs understand Markdown natively and generative-engine-optimization (GEO) runs on it, storing content as Markdown keeps it "AI-friendly from the moment you publish." If AI readability matters to your content strategy, this is a deliberate design choice rather than an afterthought.

Getting started

The documented quick-start path is scaffolding a new project:

npx create-tina-app@latest

The site's own example shows this creating a Markdown repository and preparing content, with a follow-up note that the output is "GEO ready." A short getting-started video (about 2 minutes, using NPX) is referenced on the homepage for the setup walkthrough.

For pricing details, the site links to its pricing page at tina.io/pricing — check there for current plans, since the homepage itself does not state pricing terms.

When TinaCMS is a good fit — and when it isn't

Choose it if: your content is or can be Markdown, your site is built on React/Next.js or a static generator, you want Git-based version control, and you want writers editing visually without developer hand-holding.

Look elsewhere if: you need a database-backed CMS with no Git dependency, you want a fully hosted editing experience with no repo involvement, or your team has no Git workflow at all.

Website Overview

An established domain and managed infrastructure suggest continuity of operations and may support dependable delivery, although neither guarantees service quality. Several search or sharing settings need attention. Together they may make snippets, preview images or preferred URLs less consistent across platforms.

Domain and Registration

Registered in 2012, this domain has about 13 years of history. That suggests continuity, although ownership and purpose may have changed. Transfer-protection status is present, helping reduce the risk of unauthorized domain transfers. The registrar is NameCheap, Inc., a widely used domain service provider. The domain uses the common .io extension, which is not an independent safety signal.

DNS and Email

Nameservers are provided by Amazon Route 53, indicating managed DNS hosting. MX records point to the Microsoft 365 email service. No CNAME was found; the observed records resolve directly to addresses. SPF and DMARC are configured. DKIM status is unknown. TXT records include verification markers for Google, Microsoft. Such markers may also remain after a service stops being used.

TLS and Certificates

The certificate uses an RSA 2048-bit public key, offering broad client compatibility. The server supplied a complete certificate chain. No organization name is present in the certificate; the available fields are consistent with domain validation. The certificate was issued by Let's Encrypt, commonly associated with automated certificate services. The certificate's total validity is about 89 days, consistent with a short renewal cycle.

HTTP and Browser Security

The response lacks these common security headers: X-Content-Type-Options, Referrer-Policy, Permissions-Policy. CORS permits any origin to read this response. This is common for public resources; sensitive responses need narrower handling. No X-Powered-By header was found, reducing one common source of backend fingerprinting information. No obvious internal addresses or debug information were found in the headers. The Server header contains the custom value Vercel.

Technology Stack Analysis

The public page identifies Next.js, Google Tag Manager, Vercel without precise versions, leaving fewer clues for version-specific scanning.

Search and Social Sharing

The title has 84 characters and may be truncated in search results. The meta description has 186 characters and may be shortened in search results. The Generator tag identifies Next.js, making the publishing system easier to fingerprint. Twitter Card metadata is configured. The observed directives allow indexing and link following.

Hosting and Email

DNSAmazon Route 53
HostingVercel
EmailMicrosoft 365
Location United States flagUnited States 216.150.1.1

User reviews (0)

  • No reviews yet.

Pages, Search and Sharing

Meta descriptionCombine the power of GitHub and Markdown with TinaCMS for seamless content management. Empower developers and creators to edit, preview, and manage static and dynamic sites effortlessly.
Canonical URLhttps://tina.io
LanguageEnglish (default)
Twitter Cardsummary_large_image
All bots 1 allowed · 4 disallowed
  • Allow/
  • Disallow/api/*
  • Disallow/github/*
  • Disallow/rss.xml
  • Disallow/blog/page/*

Registration details RDAP / WHOIS

RegistrarNameCheap, Inc.
Registered2012-11-04
Expires2026-11-04
Domain statusclientTransferProhibited https://icann.org/epp#clientTransferProhibited
Nameserversns-1176.awsdns-19.org、ns-1758.awsdns-27.co.uk、ns-428.awsdns-53.com、ns-709.awsdns-24.net
DNSSECunsigned

DNS records

TypeNameValueTTLPriority
Atina.io216.150.1.1300—
MXtina.iotina-io.mail.protection.outlook.com36000
NStina.ions-1176.awsdns-19.org172800—
NStina.ions-1758.awsdns-27.co.uk172800—
NStina.ions-428.awsdns-53.com172800—
NStina.ions-709.awsdns-24.net172800—
TXTtina.ioMS=ms27137264300—
TXTtina.iogoogle-site-verification=ZInWGOgoXIrry85zwZkhDHO63Ro9U6Y3CwJ8RxA0aFg300—
TXTtina.iov=spf1 include:25605879.spf03.hubspotemail.net include:spf.protection.outlook.com include:spf.mandrillapp.com include:amazonses.com include:servers.mcsv.net ~all300—
DMARC_dmarc.tina.iov=DMARC1; p=reject; pct=100; rua=mailto:[email protected],mailto:[email protected]; ruf=mailto:[email protected];300—

TLS and certificates

AssessmentNormal configuration
Supported protocolsTLSv1.2、TLSv1.3
Negotiated protocolTLSv1.3
Certificate subjecttina.io
IssuerLet's Encrypt
Valid until2026-11-03T06:04 · Remaining when checked: 33 days
Verification detailsCertificate trust: Passed · Hostname match: Passed

HTTP response headers

HeaderValue
content-typetext/html; charset=utf-8
cache-controlpublic, max-age=0, must-revalidate
serverVercel
strict-transport-securitymax-age=63072000
content-security-policyframe-ancestors 'self'
x-frame-optionsSAMEORIGIN
access-control-allow-origin*

Identified technologies

Next.jsGoogle Tag ManagerVercel

Recent Updates

  • HTTP Response Information
  • Website Description
  • Website Name