The best CMSs for Astro 2026, tried and verified.

Choosing a CMS for your Astro project means going through dozens of products and reading their docs. We did that, wrote down what we found, and put it all in one place.

The best CMSs for Astro 2026, tried and verified.
We're committed to keeping this comparison fresh and accurate
The data on this page is automatically gathered and verified from each product's official documentation, website, and public repositories.

While we use AI for the bulk of the work, we still manually verify the data to ensure accuracy and completeness, as well as test many of the products ourselves. Each data point also mentions its source, and includes links to the relevant documentation that the answer is drawn from.

The data is refreshed, and new products are added roughly every few months. If you find something missing or inaccurate, please report your findings to support@zerocms.io so they can be fixed.

12 products 8 we ran ourselves Last verified 1 Sep – 17 Sep 2026

What are you building?
Who is the team?
Budget
Shape
AI

All 12 products shown

Products:

Nothing on the roster answers all of that.

The combination you asked for does not exist in this category yet. Drop a filter to see what comes closest.

8 areas / 66 ranked aspects ZeroCMS We ran it · 1 Sep CloudCannon We ran it · 4 Sep Decap CMS We ran it · 3 Sep EmDash We ran it · 3 Sep Keystatic We ran it · 17 Sep Pages CMS We ran it · 3 Sep Payload CMS We ran it · 3 Sep Sanity Read, not run · 3 Sep Storyblok Read, not run · 3 Sep Strapi Read, not run · 3 Sep Sveltia CMS Read, not run · 3 Sep TinaCMS We ran it · 3 Sep
Screenshots No screenshots yet No screenshots yet No screenshots yet No screenshots yet

By area 66 ranked aspects

Each cell is the share of the area's ranked aspects on which the product has the best answer. An aspect not yet tested counts as not best.

How well each product matches the filters you switched on: every answer scored, then averaged. A product stays in the table at 50%.

  1. Does not apply
    all 12
    • ZeroCMS
      No filters are on, so there is nothing to grade. Does not apply
    • CloudCannon
      No filters are on, so there is nothing to grade. Does not apply
    • Decap CMS
      No filters are on, so there is nothing to grade. Does not apply
    • EmDash
      No filters are on, so there is nothing to grade. Does not apply
    • Keystatic
      No filters are on, so there is nothing to grade. Does not apply
    • Pages CMS
      No filters are on, so there is nothing to grade. Does not apply
    • Payload CMS
      No filters are on, so there is nothing to grade. Does not apply
    • Sanity
      No filters are on, so there is nothing to grade. Does not apply
    • Storyblok
      No filters are on, so there is nothing to grade. Does not apply
    • Strapi
      No filters are on, so there is nothing to grade. Does not apply
    • Sveltia CMS
      No filters are on, so there is nothing to grade. Does not apply
    • TinaCMS
      No filters are on, so there is nothing to grade. Does not apply

One neutral sentence, written the same way for every product on this page.

  1. AI-native, Git-based CMS driven by your own Astro schemas.
    1 product
    • ZeroCMS
      By design
  2. Git-based CMS that serves its editor from your own repository.
    1 product
    • TinaCMS
      By design
  3. Git-based CMS with a visual editor over your built site.
    1 product
    • CloudCannon
      By design
  4. Headless CMS delivered as a SaaS, edited through a block-based visual editor over its content API.
    1 product
    • Storyblok
      By design
  5. Headless CMS whose admin panel runs inside a Next.js app.
    1 product
    • Payload CMS
      By design
  6. Headless CMS whose open-source, code-configured Studio edits content held in a hosted cloud store and delivered through APIs.
    1 product
    • Sanity
      By design
  7. Open-core headless CMS that runs as its own Node application.
    1 product
    • Strapi
      By design
  8. Open-source, Astro-only CMS from Cloudflare that stores content in a database and ships an MCP server for AI agents.
    1 product
    • EmDash
      By design
  9. Open-source, Git-based CMS for Astro, Next.js and Remix, configured in your repository and editing Markdown, YAML and JSON files.
    1 product
    • Keystatic
      By design
  10. Open-source, Git-based CMS that edits a GitHub repository's files through a hosted or self-hosted admin app.
    1 product
    • Pages CMS
      By design
  11. Open-source, Git-based CMS that edits a static site through a self-hosted admin panel.
    1 product
    • Decap CMS
      By design
  12. Open-source, Git-based CMS that edits repository files through a self-hosted admin panel — a modern Svelte rewrite of Netlify/Decap CMS.
    1 product
    • Sveltia CMS
      By design

Main categories where the product fits.

  1. Git-based CMS
    Git-based CMS
    Content is stored as files in your git repository and published through git commits.
    3 products
    • Decap CMS
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
  2. Headless CMS
    Headless CMS
    Content lives in the vendor's store and is fetched over an API.
    3 products
    • Payload CMS
      By design
    • Storyblok
      By design
    • Strapi
      By design
  3. Git-based CMSPage builder
    Git-based CMS
    Content is stored as files in your git repository and published through git commits.
    Page builder
    Pages are assembled from blocks on a canvas.
    2 products
    • CloudCannon
      By design
    • TinaCMS
      By design
  4. Coupled CMSAstro-specificAI CMS
    Coupled CMS
    The CMS runs inside your site's own app and reads content from a database you host.
    Astro-specific
    Built specifically for Astro, using core Astro functionality.
    AI CMS
    Builds artificial intelligence directly into its core architecture to automate the creation, organization, optimization, and delivery of content.
    1 product
    • EmDash
      By design
  5. Git-based CMSAI CMSAstro-specific
    Git-based CMS
    Content is stored as files in your git repository and published through git commits.
    AI CMS
    Builds artificial intelligence directly into its core architecture to automate the creation, organization, optimization, and delivery of content.
    Astro-specific
    Built specifically for Astro, using core Astro functionality.
    1 product
    • ZeroCMS
      By design
  6. Headless CMSAI CMS
    Headless CMS
    Content lives in the vendor's store and is fetched over an API.
    AI CMS
    Builds artificial intelligence directly into its core architecture to automate the creation, organization, optimization, and delivery of content.
    1 product
    • Sanity
      By design
  7. Git-based CMSHeadless CMS
    Git-based CMS
    Content is stored as files in your git repository and published through git commits.
    Headless CMS
    Content lives in the vendor's store and is fetched over an API.
    1 product
    • Sveltia CMS
      By design

Your repository, or the vendor's store.

  1. Git-based

    Content is stored as files in your git repository and published through git commits.

    7 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Decap CMS
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Sveltia CMS
      By design
    • TinaCMS
      By design
  2. Headless

    Content lives in the vendor's store and is fetched over an API.

    4 products
    • Payload CMS
      By design
    • Sanity
      By design
    • Storyblok
      By design
    • Strapi
      By design
  3. Coupled

    The CMS runs inside your site's own app and reads content from a database you host.

    1 product
    • EmDash
      By design

Who runs the product, and how it's deployed. Some products are available as both SaaS and self-hosted.

  1. SaaSSelf-hosted
    SaaS
    The product runs in the cloud and is maintained and updated by the vendor.
    Self-hosted
    You run the product on your own infrastructure and are responsible for maintenance and updates.
    6 products
    • Decap CMS
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Payload CMS
      By design
    • Strapi
      By design
    • TinaCMS
      By design
  2. SaaS
    SaaS
    The product runs in the cloud and is maintained and updated by the vendor.
    4 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Sanity
      By design
    • Storyblok
      By design
  3. Self-hosted
    Self-hosted
    You run the product on your own infrastructure and are responsible for maintenance and updates.
    2 products
    • EmDash
      By design
    • Sveltia CMS
      By design

Frameworks that the product targets and supports.

  1. Any
    Any
    Supports any framework calling the API.
    4 products
    • Decap CMS
      By design
    • Pages CMS
      By design
    • Strapi
      By design
    • Sveltia CMS
      By design
  2. Astro
    2 products
    • ZeroCMS
      By design
    • EmDash
      By design
  3. AnyNext.js
    Any
    Supports any framework calling the API.
    1 product
    • Payload CMS
      By design
  4. AstroNext.jsNuxtSvelteKitHugoJekyllEleventyGatsbyOthers
    1 product
    • CloudCannon
      By design
  5. AstroNext.jsSvelteKitHugoJekyllEleventyGatsbyRemixOthers
    1 product
    • TinaCMS
      By design
  6. AstroNext.jsNuxtOthers
    1 product
    • Storyblok
      By design
  7. AstroNext.jsNuxtSvelteKitRemixOthers
    1 product
    • Sanity
      By design
  8. AstroNext.jsRemix
    1 product
    • Keystatic
      By design

The year the product was first released.

  1. 2017
    2 products
    • Sanity
      Vendor claim Checked
      1 quote from 1 source

      Source ↗ sanity.io/…/sanity-studio-v3-simplified-yet-powerful-customization

      Sanity Studio since it was launched out of beta in 2017

    • Storyblok
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/about

      When we started Storyblok in 2017, we had a clear vision

      In 2017, he and Dominik joined forces to launch Storyblok.

  2. 2013
    1 product
    • CloudCannon
      Vendor claim Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/blog/powerful-templates

      Powerful Templates Mike Neumegen 21 Aug 2013

      You guys asked for it, and here it is. We're so excited to announce the brand new templating feature in CloudCannon.

      Source ↗ cloudcannon.com/ai-info

      Company name: CloudCannon Founded: 2013 Founders: Mike Neumegen and George Phillips

  3. 2015
    1 product
    • Strapi
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ handbook.strapi.io/strapi-story

      October 2015 - Publication on GitHub

      Source ↗ raw.githubusercontent.com/…/LICENSE

      Copyright (c) 2015-present Strapi Solutions SAS

  4. 2019
    1 product
    • TinaCMS
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ tina.io/blog/announcing-tinacms

      By Scott Gallant October 16, 2019

      Today, we’re excited to announce TinaCMS : an open-source site editing toolkit for React-based sites (Gatsby and Next.js).

  5. 2021
    1 product
    • Payload CMS
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/…/introducing-payload-2021s-node-react-headless-cms-for-javascript-developers

      Blog / January 13, 2021 Introducing Payload - 2021's Node + React Headless CMS for JavaScript Developers

      After two years of development and thousands of commits, I am extremely excited to announce that Payload CMS is now available to the public.

  6. 2022
    1 product
    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/successor-to-netlify-cms

      Sveltia CMS was born in November 2022, when the progress of Netlify CMS was stalled for more than six months.

  7. 2023
    1 product
    • Keystatic
      Vendor claim Checked
      1 quote from 1 source

      Source ↗ thinkmill.com.au/blog/keystatic-is-now-in-early-access

      Feb 23rd, 2023 Keystatic is now in early access

  8. 2026
    1 product
    • EmDash
      The first public release was announced 28 April 2026. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ emdashcms.com/blog

      April 28, 2026 EmDash is live A quick look at what EmDash is, what shipped in the first public release

  9. Not checked

    We did not settle this. It is not a claim that the product lacks it.

    3 products
    • ZeroCMS
      No launch date is published. The changelog's earliest entry is 14 December 2025, which is a floor rather than a release date. Not checked Undated
    • Decap CMS
      Not checked Undated
    • Pages CMS
      No launch date is published. The GitHub repository was created in December 2023 and the project launched in early 2024; the LICENSE now reads a 2025 copyright. Not checked Undated

How the product is released and updated.

  1. Versioned

    Each release is versioned, allowing you to upgrade on your own schedule.

    8 products
    • Decap CMS
      By design
    • EmDash
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Payload CMS
      By design
    • Strapi
      By design
    • Sveltia CMS
      By design
    • TinaCMS
      By design
  2. Continuous

    New versions are released continuously as they are developed.

    4 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Sanity
      By design
    • Storyblok
      By design

Is the product actively developed and supported.

  1. Active

    No end-of-life notice has been published.

    all 12
    • ZeroCMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/changelog

      Stay up to date with the latest features, improvements, and fixes.

      The demos work in a time-limited private sandbox with a few constraints. To publish or to try with your own repository, sign up for our 14-day free trial!

      Source ↗ zerocms.io/pricing

      Early adopters keep −50% forever while the subscription stays active

    • CloudCannon
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/pricing

      $49 / month (USD) Paid annually For small teams who want to use our core features.

      For teams with more advanced editing workflows.

      Source ↗ cloudcannon.com/documentation/changelog

      This release added Sync Errors and suggested resolution steps to the Site Dashboard

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/about

      Core maintenance and long-term product direction are led by independent Decap maintainers, with community contributors helping improve the CMS

    • EmDash
      Self-described as beta preview, under active development. Vendor claim Checked
      1 quote from 1 source

      Source ↗ github.com/emdash-cms/emdash

      EmDash is in beta preview. We welcome contributions, feedback, plugins, themes, and ideas.

    • Keystatic
      Self-described as experimental. Vendor claim Checked
      1 quote from 1 source

      Source ↗ raw.githubusercontent.com/…/README.md

      We're working on it! Things are experimental at the moment.

    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      File storage Soon Connect with AWS S3, Cloudflare R2, and more.

    • Payload CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ payloadcms.com/posts/releases

      Aug 7, 2026 Payload Team New in Payload: Security Dependency Bumps and Fixes

      Jul 31, 2026 Payload Team New in Payload: Large Azure Uploads and Broad Stability Fixes

      Source ↗ github.com/payloadcms/payload/releases

      Release list v3.88.0 v3.87.1 v3.87.0 v3.86.0 v3.85.2 v3.85.1 v3.85.0 v3.84.1 v3.84.0 v3.83.0 Previous Next

    • Sanity
      Vendor claim Checked
      2 quotes from 2 sources

      Source ↗ github.com/sanity-io/sanity

      Sanity Studio – Rapidly configure content workspaces powered by structured content

      Source ↗ sanity.io

      The Content Operating System for the AI era

    • Storyblok
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/changelog

      September 1, 2026 Multi-Space Content Distribution new capabilities August 27, 2026 Improved Asset Permissions for Custom Roles

      August 18, 2026 Environments August 18, 2026 Multi-Space Content Distribution August 5, 2026 OAuth 2.0 Scoped Grants

    • Strapi
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.strapi.io/release-notes

      Reminder: Version numbers on this page are for the Strapi Docs package. The latest Strapi CMS version is 5.52.3 .

      New versions (minor or patch) are generally released weekly, on Wednesdays.

    • Sveltia CMS
      In beta, ahead of a stable 1.0 release. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/start

      Sveltia CMS is still in beta. Although it’s already being used in production by many users, there might still be breaking changes before the stable 1.0 release.

      Source ↗ sveltiacms.app/en/docs/successor-to-netlify-cms

      Actively maintained and outperforming neglected Decap CMS in every aspect

    • TinaCMS
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ tina.io/whats-new/tinacms

      Version 3.12.1 Released on 8/24/2026 Patch Changes

      Version 3.12.0 Released on 8/17/2026 Minor Changes

      Version 3.11.0 Released on 7/16/2026 Minor Changes

      Source ↗ tina.io/pricing

      TinaCMS is actively developed by SSW , Australia

How your Astro site loads content from the product.

  1. Content collections

    Your site uses Astro's built-in content collections and loaders to load content from files.

    6 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ cloudcannon.com/…/what-is-the-cloudcannon-configuration-file

      This key determines the Source Folder for your website's files relative to the root of your Git repository.

      Source ↗ cloudcannon.com/…/configure-your-collections

      The collections.[*].path key tells CloudCannon where to find the files for your Collection.

      CloudCannon will commit your Collection configuration to your Git repository.

      Source ↗ cloudcannon.com/…/configure-your-commit-messages

      the Review changes modal will prompt you to add a commit message every time you save your changes

      Source ↗ cloudcannon.com/…/using-components

      The front matter data is always assumed to come from the Astro.props.frontmatter variable. This means Bookshop will automatically work for Markdown pages using layouts.

    • Decap CMS
      Decap commits files to the repository. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/intro

      Content is stored in your Git repository alongside your code

      At its core, Decap CMS is an open-source React app that acts as a wrapper for the Git workflow

    • Keystatic
      The Astro guide reads content through astro:content; an in-process Reader API is offered as an alternative but the guide steers away from it. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/installation-astro

      Keystatic provides its own Reader API to pull data from the file system into your frontend. This guide leverages Astro's built-in content collections instead.

      import { getCollection } from 'astro:content'

    • Pages CMS
      Pages CMS commits files to the repository and ships no content API, SDK or loader; the Astro build reads the files itself. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs

      It edits files in your repository directly.

      Source ↗ pagescms.org

      Manage content and media right in your GitHub repository. No database, no API, no extra backend.

    • Sveltia CMS
      Sveltia stores static content files and ships no content API, SDK or loader; the Astro build reads the files itself. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/data-output

      Content in Sveltia CMS is stored in static files, which can be in various formats such as Markdown, YAML, TOML, or JSON.

      Source ↗ sveltiacms.app/en/docs/architecture

      Sveltia CMS focuses solely on content management without building your site

  2. Content Layer loader

    Your site uses a custom content loader that fetches content from the product to Astro's content collections.

    1 product
    • EmDash
      Content reaches Astro through a Live Content Collections loader and is queried with getEmDashCollection / getEmDashEntry. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ docs.emdashcms.com/coming-from/astro

      The following file registers EmDash as a live content source

      Source ↗ docs.emdashcms.com/concepts/architecture

      EmDash serves content through Astro's Live Collections at runtime, so changes an editor makes are visible immediately.

      Source ↗ docs.emdashcms.com/guides/querying-content

      import { getEmDashCollection, getEmDashEntry } from "emdash"

  3. Vendor SDK

    Your site calls a vendor SDK from code at build or request time to fetch content.

    3 products
    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/…/displaying-content-in-an-astro-front-end

      import { sanityClient } from "sanity:client";

      const posts = await sanityClient.fetch<SanityDocument[]>(POSTS_QUERY);

    • Storyblok
      An official Astro Content Layer loader is also available, so stories can arrive as a content collection. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/guides/astro

      const storyblokApi = useStoryblokApi ();

      Source ↗ astro.build/blog/storyblok-loader

      import { storyblokLoader } from "@storyblok/astro" ;

    • TinaCMS
      The content sits in your repository as Markdown, but the site reads it through a generated GraphQL client. Vendor documentation Checked
      10 quotes from 3 sources

      Source ↗ github.com/…/data.ts

      Loaders call the generated Tina client and pipe the result through

      import { requestWithMetadata } from '@tinacms/astro/data';

      import client from '../../tina/__generated__/client';

      requestWithMetadata(client.queries.page({ relativePath: `${slug}.mdx` }), { priority: 'primary' });

      Source ↗ tina.io/docs/features/data-fetching

      To interface with the API, you can use Tina's type-safe client for data-fetching, or manually write custom GraphQL queries and hit the API yourself.

      Tina client provides a type-safe query builder, that is auto-generated based on your site's schema

      With Tina, your content is stored in Git along with your codebase.

      Tina provides a Content API in front of your repo-based content, so that you can interact with your files as if they're in a database.

      Tina provides a GraphQL API for querying your git-based content.

      Source ↗ tina.io/docs

      The content is in the form of Markdown, MDX, and JSON files stored with the power of Git.

  4. REST API fetch

    Your site makes plain HTTP calls to a REST or GraphQL endpoint and then wires the responses into Astro content.

    2 products
    • Payload CMS
      Payload's Local API can query the database directly from Node instead, without a network call. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ payloadcms.com/docs/rest-api/overview

      A fully functional REST API is automatically generated from your Collection and Global configs.

      Source ↗ payloadcms.com/docs/graphql/overview

      You can use any GraphQL client with Payload's GraphQL endpoint.

      Source ↗ payloadcms.com/docs/local-api/overview

      The Payload Local API gives you the ability to execute the same operations that are available through REST and GraphQL within Node, directly on your server.

      you don't need to deal with server latency or network speed whatsoever and can interact directly with your database.

    • Strapi
      Strapi's Astro documentation leads with plain HTTP calls, and offers its own client library or a community content loader as the alternatives. Vendor claim Checked
      6 quotes from 1 source

      Source ↗ community.strapi.io/integrations/astro

      There are several ways to load data from Strapi in your Astro application. Let's explore three common approaches: Using Fetch Directly - The simplest approach using the native Fetch API Using the Strapi Client SDK - A typed client for interacting with Strapi APIs Using the Strapi Loader - An Astro content loader for Strapi collections

      The simplest way to load data from Strapi is using the native fetch API directly in your Astro components.

      The Strapi Client SDK provides a typed client for interacting with Strapi APIs with better developer experience and type safety. First, install the package: npm install @strapi/client

      npm install strapi-community-astro-loader@3.0.0-rc.0

      Strapi Community Astro Loader Community-driven Astro loader for Strapi with automatic type inference

      Which Method Should You Choose? Method Best For Fetch Directly Simple projects, quick prototypes, or when you need full control Strapi Client SDK Projects needing type safety and a cleaner API for complex queries Strapi Loader Content-heavy sites leveraging Astro's Content Layer for caching and type generation

For products that use Astro's content collections, the file formats they support.

  1. MarkdownMDXJSONYAMLTOML
    2 products
    • CloudCannon
      Astro page files are editable too, through the source editor directly and the visual editor once Editable Regions are configured. Vendor documentation Checked
      9 quotes from 5 sources

      Source ↗ cloudcannon.com/documentation/user-glossary

      Markdown is a lightweight markup language with plain text formatting syntax designed to be converted to HTML. CloudCannon supports the Markdown format for markup files and combination files with front matter.

      MDX is a format that combines Markdown with JSX, allowing you to write JSX components directly in Markdown files. CloudCannon supports the MDX format for markup files and combination files with front matter.

      JSON is a lightweight data interchange format that is easy for humans to read and write. CloudCannon supports the JSON format for configuration and data files.

      YAML is a human-readable data serialization standard commonly used for configuration files. CloudCannon supports the YAML format for configuration and data files.

      TOML is a configuration file format that's easy to read and write. CloudCannon supports the TOML format for configuration and data files.

      Source ↗ cloudcannon.com/…/what-are-rich-text-editors

      CloudCannon's rich text editors support Markdown, HTML, and MDX formats.

      Source ↗ cloudcannon.com/…/what-is-the-source-editor

      The Source Editor is an in-browser code editor that is great for making minor changes to the source code of your files. This editing interface is useful for all text-based files.

      Source ↗ cloudcannon.com/…/configure-image-editable-regions

      We recommend configuring Source Editable Regions for standalone HTML-like files (i.e., files that contain HTML structure and templating, like .astro or .liquid

      Source ↗ cloudcannon.com/…/configure-source-editable-regions

      Source Editable Regions are one type of Editable Region you can add to your layout and HTML-like files to enable visual editing.

    • TinaCMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ tina.io/docs/reference/collections

      format "md" | "markdown" | "mdx" | "json" | "toml" | "yaml" The extension and format of content files. Default is "md" .

      Source ↗ tina.io/docs/contextual-editing/astro

      If your collections use MDX bodies, add @astrojs/mdx .

  2. MarkdownJSONYAMLTOML
    3 products
    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/configuration-options

      accepts the following values: yml, yaml, toml, json, md, markdown, html

    • Pages CMS
      Markdown is edited as frontmatter; JSON, YAML and TOML data files are edited too. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/content

      File format. Values include yaml-frontmatter, json-frontmatter, toml-frontmatter, yaml, json, toml, datagrid, code, raw.

      Source ↗ pagescms.org/docs/configuration/fields/rich-text

      format Values: markdown, html.

    • Sveltia CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/data-output

      supports the following data output formats for content files out of the box: Markdown with YAML, TOML or JSON front matter

      YAML TOML JSON Raw text files, such as plain text, JSON, XML, or CSV files

  3. JSONYAMLMarkdocMDX
    1 product
    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/format-options

      Keystatic is capable to store your data in multiple formats: YAML, JSON, Markdoc and MDX.

  4. MarkdownMDXJSONYAML
    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/visual-content-editor

      Which file types does the visual editor support?

      Markdown, MDX, JSON, and YAML.

      Source ↗ zerocms.io/features/zero-integration

      Zero reads your existing Astro content collections and components directly from GitHub. No sync, no migration, no vendor-specific config files.

  5. Does not apply
    5 products
    • EmDash
      The content is not files in your repository, so there are no collection formats to open. Does not apply
    • Payload CMS
      The content is not files in your repository, so there are no collection formats to open. Does not apply
    • Sanity
      The content is not files in your repository, so there are no collection formats to open. Does not apply
    • Storyblok
      The content is not files in your repository, so there are no collection formats to open. Does not apply
    • Strapi
      The content is not files in your repository, so there are no collection formats to open. Does not apply

The major Astro versions supported by the product.

  1. Any version
    5 products
    • Decap CMS
      Decap has no Astro-specific code and states no Astro version, regardless of the framework. Vendor claim Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      Platform agnostic: Works with most static site generators.

    • Pages CMS
      Pages CMS has no Astro-specific code and states no Astro version; Astro is named once, in a list of compatible generators. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ github.com/hunvreus/pagescms

      It is especially well suited for static sites and content-driven apps built with tools like Jekyll, Hugo, Next.js, Astro, VuePress, and similar stacks.

    • Payload CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ payloadcms.com/docs/rest-api/overview

      The REST API is a fully functional HTTP client that allows you to interact with your Documents in a RESTful manner. It supports all CRUD operations and is equipped with automatic pagination, depth, and sorting.

      Source ↗ payloadcms.com/docs/live-preview/client

      Frameworks Live Preview will work with any front-end framework that supports the native window.postMessage API. By default, Payload officially supports the most popular frameworks, including: React Vue If your framework is not listed, you can still integrate with Live Preview using the underlying tooling that Payload provides.

    • Strapi
      Strapi's own surface is the REST API and an official client SDK; the Astro starter, loader and blocks renderer its page links are community-built, and its listings give no Astro range. Vendor documentation Checked
      7 quotes from 3 sources

      Source ↗ docs.strapi.io/cms/api/rest

      The REST API allows accessing the content-types through API endpoints. Strapi automatically creates API endpoints when a content-type is created. API parameters can be used when querying API endpoints to refine the results.

      Source ↗ docs.strapi.io/cms/api/client

      The Strapi Client library simplifies interactions with your Strapi back end, providing a way to fetch, create, update, and delete content.

      Source ↗ community.strapi.io/integrations/astro

      Using Fetch Directly - The simplest approach using the native Fetch API

      Using the Strapi Client SDK - A typed client for interacting with Strapi APIs

      Community Examples The Strapi community has built some great tools and starters for Astro integration

      Astro Strapi Starter A full-featured starter template for building Astro sites with Strapi Astro Strapi Loader Content loader for integrating Strapi with Astro's Content Layer Astro Strapi Blocks Renderer for Strapi's block content in Astro components

      Other Resources Resource Description Strapi Community Astro Loader Community-driven Astro loader for Strapi with automatic type inference Strapi Client SDK Official client for interacting with Strapi APIs

    • Sveltia CMS
      Sveltia is framework-agnostic and names no Astro version; it edits repository files regardless of the framework. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ github.com/sveltia/sveltia-cms

      Sveltia CMS is framework-agnostic and can also be used for vanilla JavaScript sites.

      Source ↗ sveltiacms.app/en/docs/architecture

      Sveltia CMS focuses solely on content management without building your site

  2. Astro 5–7
    3 products
    • CloudCannon
      The editable-regions integration requires Astro 5+; on Astro 4 it is skipped. Static output only — server and hybrid Astro sites are not covered. Vendor documentation Checked
      5 quotes from 5 sources

      Source ↗ raw.githubusercontent.com/…/visual-editing.md

      The integration requires Astro 5+. For Astro 4, skip the integration

      Source ↗ raw.githubusercontent.com/…/cc-friendly-conventions.md

      Use Astro 5+. The CloudCannon editable regions integration (`@cloudcannon/editable-regions`) requires Astro 5+, and `content.config.ts` with the `glob()` loader is the expected content collection format.

      Source ↗ raw.githubusercontent.com/…/package.json

      "astro": "^6.0.2", "astro-seo": "^0.8.0",

      Source ↗ raw.githubusercontent.com/…/package.json

      "astro": "7.2.2", "happy-dom": "20.11.2",

      Source ↗ raw.githubusercontent.com/…/overview.md

      Server-rendered Astro sites (`output: "server"` or `output: "hybrid"`) are not covered -- CloudCannon requires static output.

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ registry.npmjs.org/@keystatic/astro/latest

      "peerDependencies":{"astro":"5 || 6 || 7"

    • TinaCMS
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ raw.githubusercontent.com/…/package.json

      "peerDependencies": { "astro": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "devDependencies": {

      "@types/node": "^22.13.1", "astro": "^7.1.1", "typescript": "^5.7.3"

      Source ↗ tina.io/docs/frameworks/astro

      when you create a new entry, its page appears in the running dev site without a restart. This needs Astro 6 or newer . On Astro 5 a newly created entry can 404 until you restart

      the integration prints a reminder in your terminal when it detects Astro 5.

  3. Astro 2–7
    1 product
    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ raw.githubusercontent.com/…/package.json

      "astro": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"

  4. Astro 3–7
    1 product
    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ raw.githubusercontent.com/…/package.json

      "astro": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"

  5. Astro 4–7
    1 product
    • ZeroCMS
      Tested Checked
  6. Astro 6
    1 product
    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/existing-project

      Astro 6 or later — upgrade first if you're on an older major

Whether the product supports editing Astro Starlight sites.

  1. Fully

    The docs are editable, Starlight's own components are fully supported, and the preview renders the Starlight site.

    5 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Tested Checked
    • EmDash
      Tested Checked
    • Payload CMS
      Tested Checked
    • TinaCMS
      Tested Checked
  2. Partly

    Docs are editable, but something is missing or doesn't fully work.

    3 products
    • Decap CMS
      The docs collection is editable, but there is no preview, and Starlight components can only be typed into a raw MDX code editor rather than inserted with their props as fields. Tested Checked
    • Keystatic
      The docs collection is editable and Starlight components insert with their props as fields, but no preview renders the Starlight site. Tested Checked
    • Pages CMS
      The docs collection is editable only as raw MDX in a code editor, where Starlight components are typed by hand with their imports; no component insertion with props as fields and no preview. Tested Checked
  3. Not tested

    We did not run this. It is not a claim that the product lacks it.

    4 products
    • Sanity
      Sanity publishes no Starlight integration, starter or guide, so there was nothing to grade it against. Not tested Undated
    • Storyblok
      Storyblok publishes no Starlight guide, starter or example, so there was nothing to grade it against. Not tested Undated
    • Strapi
      Strapi publishes no Starlight guide, starter or example, so there was nothing to grade it against. Not tested Undated
    • Sveltia CMS
      Sveltia documents no Astro or Starlight integration; it discovers content by config-declared folder paths and renders no preview of the built site. Not tested Undated

What does adopting this product force you to change about your Astro build?

  1. Nothing

    Your build stays untouched.

    9 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      A config using CloudCannon's editable-regions integration has no `adapter` or `output` key; static output is required if CloudCannon builds and hosts, and SSR sites use Headless Mode elsewhere. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ raw.githubusercontent.com/…/astro.config.mjs

      export default defineConfig({ site: "https://tiny-jackal.cloudvent.net/", integrations: [react(), editableRegions(), mdx()], vite: { plugins: [tailwindcss()], }, });

      Source ↗ raw.githubusercontent.com/…/cc-friendly-conventions.md

      Use `output: "static"` (Astro's default). CloudCannon requires static output — `server` and `hybrid` modes are not supported.

      Source ↗ cloudcannon.com/…/what-is-headless-mode

      Building your Site in CloudCannon is optional. If you do not want to build your Site, you can enable Headless Mode.

      Headless Mode is useful if you want to host a website with server-side rendering (SSR), or a fully hosted API, using a third-party service while still using CloudCannon as your primary CMS.

    • Decap CMS
      Decap is a separate static admin app; it adds nothing to the Astro build and demands no adapter. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/install-decap-cms

      A static admin folder contains all Decap CMS files, stored at the root of your published site.

    • Pages CMS
      Pages CMS is a separate editing app and demands nothing of the Astro build. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org/docs

      It only provides the editing layer on top of your existing Git-based project.

      Pages CMS does not replace your site generator, deployment platform, or repository workflow.

    • Payload CMS
      No adapter and output stays static; a custom loader fetches content from Payload at build time, so the CMS must be reachable during the build and a publish needs a rebuild to go live. Tested Checked
    • Sanity
      Only the visual-editing live preview needs an Astro SSR adapter. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/astro/configure-sanity-astro

      set to false for static builds, true for server-rendered pages

      Source ↗ sanity.io/docs/visual-editing/astro-visual-editing

      visual editing requires server-side rendering because draft mode depends on per-request cookie checking

    • Storyblok
      Only the opt-in real-time live preview needs an Astro SSR adapter. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ github.com/storyblok/storyblok-astro

      To utilize the Astro Storyblok Live feature, Astro must be configured to run in SSR mode.

      Source ↗ storyblok.com/docs/guides/astro/visual-preview

      Deploy in client-side or server-side rendering mode to reflect content updates dynamically upon saving content.

    • Strapi
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ community.strapi.io/integrations/astro

      import { defineConfig } from 'astro/config' ; │ │ import tailwindcss from '@tailwindcss/vite' ; │ │ // https://astro.build/config │ │ export default defineConfig ( { │ │ vite: { │ │ plugins: [ tailwindcss ( ) ] │ │ } │ │ } ) ;

      The simplest way to load data from Strapi is using the native fetch API directly in your Astro components.

      Which Method Should You Choose? Method Best For Fetch Directly Simple projects, quick prototypes, or when you need full control Strapi Client SDK Projects needing type safety and a cleaner API for complex queries Strapi Loader Content-heavy sites leveraging Astro's Content Layer for caching and type generation

      Source ↗ docs.strapi.io/cms/api/rest

      The REST API allows accessing the content-types through API endpoints. Strapi automatically creates API endpoints when a content-type is created. API parameters can be used when querying API endpoints to refine the results.

    • Sveltia CMS
      Sveltia is a separate static admin bundle that adds nothing to the Astro build and demands no adapter. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/start

      It’s a unique approach that allows you to quickly set up the CMS without installing any dependencies or build tools.

      Source ↗ sveltiacms.app/en/docs/architecture

      Sveltia CMS focuses solely on content management without building your site

  2. Adapter required

    An adapter has to be installed before its own surfaces work.

    3 products
    • EmDash
      An SSR adapter is required — @astrojs/node or @astrojs/cloudflare; on Cloudflare it must be Workers, not Pages. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/existing-project

      your project needs output: "server" and an adapter (Node, Cloudflare, …)

      Use Cloudflare Workers, not Pages.

    • Keystatic
      A Node-capable Astro adapter is required to deploy. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/installation-astro

      Because Keystatic needs to run serverside code and use Node.js APIs, you will need to add an Astro adapter to deploy your project.

    • TinaCMS
      The adapter is required either way, because the per-island refresh route runs at request time. `output` can stay static, but only if every editable region is wrapped in a TinaIsland. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      Set adapter in astro.config.mjs to @astrojs/node, @astrojs/vercel, @astrojs/netlify, or @astrojs/cloudflare.

      On boot the bridge fetches each island's /tina-island/[name] endpoint (still prerender = false, so the adapter renders it on demand) to pick up the page's form payloads, after which editing works exactly as in an SSR project.

      output: 'server' is the simplest choice; output: 'static' also works as long as you wrap editable regions in <TinaIsland />.

      output: 'static' is supported. The middleware described above only runs on on-demand-rendered routes, so on a prerendered page it never injects anything

      Wrap every editable region in <TinaIsland> with a registered island — that's both how the bridge re-renders regions and how the bootstrap gets onto the page.

The rendering modes the product works with.

  1. StaticServer-rendered
    11 products
    • ZeroCMS
      By design
    • Decap CMS
      By design
    • EmDash
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Payload CMS
      By design
    • Sanity
      By design
    • Storyblok
      By design
    • Strapi
      By design
    • Sveltia CMS
      By design
    • TinaCMS
      By design
  2. Static
    1 product
    • CloudCannon
      By design

Output modes supported by the preview.

  1. StaticServer-rendered
    3 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/live-preview

      Static & SSR Supported modes

      The preview runs on Astro's actual dev server with HMR

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/guides/astro/visual-preview

      Deploy in client-side or server-side rendering mode to reflect content updates dynamically upon saving content.

    • TinaCMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      You need an SSR adapter. The per-island refresh endpoint ( /tina-island/[name] ) runs at request time on every keystroke. Set adapter in astro.config.mjs to @astrojs/node , @astrojs/vercel , @astrojs/netlify , or @astrojs/cloudflare .

      output: 'server' is the simplest choice; output: 'static' also works as long as you wrap editable regions in

      Static-site editing output: 'static' is supported. The middleware described above only runs on on-demand-rendered routes, so on a prerendered page it never injects anything

      after which editing works exactly as in an SSR project. Requirements for static editing: Wrap every editable region in

  2. Server-rendered
    2 products
    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/coming-from/astro

      EmDash sites run in SSR mode by default, so content is served at runtime and changes appear immediately.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/visual-editing/astro-visual-editing

      visual editing requires server-side rendering because draft mode depends on per-request cookie checking

  3. Static
    1 product
    • CloudCannon
      Server-rendered sites can be hosted elsewhere in Headless Mode, which turns off CloudCannon's builds and hosting, and with them the Visual Editor and preview screenshots. Vendor documentation Checked
      6 quotes from 4 sources

      Source ↗ cloudcannon.com/…/what-is-visual-editing

      In CloudCannon, you can use the Visual Editor to visually edit any file that outputs to an HTML webpage at build time

      Upload your output files to CloudCannon to generate previews in the Visual Editor, Testing Domain, and Collection Browser screenshots, and deliver them to your live Custom Domain (if you are hosting with CloudCannon).

      Source ↗ cloudcannon.com/…/configure-your-initial-site-settings

      Value must be either: hosted - enables builds, visual editing, the Testing and Custom Domains, and page previews in the collection browser. headless - disables builds for dynamic and externally-hosted Sites.

      Source ↗ cloudcannon.com/…/what-is-headless-mode

      Headless Mode may not be right for you if: You want to use the Visual Editor to edit your content in CloudCannon. You want to see preview screenshots of your Site on file cards in the Collection browsers.

      Headless Mode disables building and hosting for your Site on CloudCannon.

      Source ↗ cloudcannon.com/…/unified-configuration-migration-guide

      Headless Mode is ideal for Sites built and hosted externally or dynamic Sites that rely on server-side rendering.

  4. None
    6 products
    • Decap CMS
      The preview pane is Decap's own render, so it renders neither the static nor the SSR output of the real Astro site. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/architecture

      The preview component is responsible for displaying the value with the appropriate styling.

    • Keystatic
      Tested Checked
    • Pages CMS
      Pages CMS renders no preview of the built site; the only "preview" is a button that dispatches a GitHub Actions workflow. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/content

      actions Adds collection or file action buttons (e.g. [{ name: preview, label: Preview, workflow: pages-cms-file-action.yml }]).

      Source ↗ pagescms.org/docs/configuration/actions

      Actions allow you to add custom buttons that trigger GitHub Actions.

    • Payload CMS
      The preview renders in your own front end, so which modes it covers is your code's answer rather than Payload's. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ payloadcms.com/docs/live-preview/overview

      Live Preview works by rendering an iframe on the page that loads your front-end application. The Admin Panel communicates with your app through window.postMessage events. These events are emitted every time a change is made to the Document. Your app then listens for these events and re-renders itself with the data it receives.

      url String, or function that returns a string, pointing to your front-end application. This value is used as the iframe src .

      Source ↗ payloadcms.com/docs/live-preview/client

      Frameworks Live Preview will work with any front-end framework that supports the native window.postMessage API. By default, Payload officially supports the most popular frameworks, including: React Vue If your framework is not listed, you can still integrate with Live Preview using the underlying tooling that Payload provides.

      If your front-end application is built with React or Vue , use the useLivePreview hooks that Payload provides. In the future, all other major frameworks like Svelte will be officially supported.

    • Strapi
      The preview renders in your own front end, so which modes it covers is your code's answer rather than Strapi's. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/preview

      With the Preview feature, you can preview your front end application directly from Strapi's admin panel. This is helpful to see how updates to your content in the Edit View of the Content Manager will affect the final result.

      A front-end application for your Strapi project should be already created and set up.

      The strategy for the front end application to query draft or published content is framework-specific. At least 3 strategies exist:

      Setting up the front-end preview route is highly dependent on the framework used for your front-end application. For instance, Next.js draft mode and Nuxt preview mode provide additional documentation on how to implement the front-end part in their respective documentations.

    • Sveltia CMS
      The preview pane is not the built Astro site, so it renders neither the static nor the SSR output. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      we don’t plan to support live site previews that fetch data from the actual website. If you need this feature, consider using a framework-specific CMS solution.

What adopting the product adds to your repository.

  1. Nothing
    1 product
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 2 sources

      Source ↗ zerocms.io/features/zero-integration

      Codebase stays clean, because you don't add anything to your repo — not a config file, not a package, not an API key.

      Source ↗ zerocms.io/features/mcp-server

      No. ZeroCMS is a Git-based CMS for Astro. The MCP server reads and writes content through your repository. There's no package to add, no config file to maintain, and no code changes required in your Astro site.

  2. Config fileSchema definition
    Config file
    A config file owned by the CMS.
    Schema definition
    Your content model, declared a second time.
    1 product
    • Pages CMS
      A single .pages.yml is the config file and declares the content model's fields; nothing else is added. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ pagescms.org/docs

      Add a .pages.yml file to the repository.

      It only provides the editing layer on top of your existing Git-based project.

      Source ↗ pagescms.org/docs/configuration

      .pages.yml is the single source of truth for Pages CMS configuration.

      Source ↗ pagescms.org/docs/configuration/content

      fields Field definitions shown in the editor (e.g. [{name: title, type: string}]).

  3. Integration codeCredentials
    Integration code
    Fetching and rendering code you write and maintain.
    Credentials
    An API key or token the repo and deploy carry.
    1 product
    • Strapi
      Strapi is a separate application, so none of its own files — the model, the admin panel, its configuration — land in the site's repository. Vendor documentation Checked
      13 quotes from 4 sources

      Source ↗ community.strapi.io/integrations/astro

      Data Loading In Astro with Strapi There are several ways to load data from Strapi in your Astro application.

      Using Fetch Directly - The simplest approach using the native Fetch API Using the Strapi Client SDK - A typed client for interacting with Strapi APIs Using the Strapi Loader - An Astro content loader for Strapi collections

      The simplest way to load data from Strapi is using the native fetch API directly in your Astro components.

      Create a types file to define the structure of your Strapi API response: src/types/strapi.ts

      Tip: For production, store your Strapi URL in environment variables: .env STRAPI_URL = http://localhost:1337 Then use it in your components:

      Nice, now that we have our Strapi 5 server setup, we can start to setup our Astro.js application.

      Source ↗ strapi.io/…/lightning-fast-building-with-strapi-and-astro

      Create a .env file in the root directory: # Strapi Configuration STRAPI_URL = http://localhost:1337 STRAPI_TOKEN = your_strapi_api_token_here

      These environment variables allow the loader to authenticate and query your Strapi instance securely.

      Source ↗ docs.strapi.io/cms/project-structure

      ├──── config # API configurations │ ├ admin.ts │ ├ api.ts

      │ ├──── admin # admin customization files

      │ │ │ ├ lifecycles.ts │ │ │ └ schema.json

      │ ├──── components │ │ └──── (category-name) │ │ ├ (componentA).json

      Source ↗ docs.strapi.io/cms/installation/cli

      In the terminal, ensure you are in the folder that hosts the Strapi project you created. Run the git init command to initialize git for this folder.

  4. Config fileAdmin routeSchema definition
    Config file
    A config file owned by the CMS.
    Admin route
    An editor served by your own site.
    Schema definition
    Your content model, declared a second time.
    2 products
    • Decap CMS
      A static /admin folder holds a config.yml that declares the collections; installing as an npm module instead adds a dependency. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ decapcms.org/docs/install-decap-cms

      A static admin folder contains all Decap CMS files, stored at the root of your published site.

      The second file, admin/config.yml, is the heart of your Decap CMS installation

      You can also use Decap CMS as an npm module

      Source ↗ decapcms.org/docs/configure-decap-cms

      Collections define the structure for the different content types on your static site.

    • Sveltia CMS
      A static folder holds an index.html loading the CMS from a CDN and a config.yml that declares the collections; installing via npm instead adds a dependency. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/start

      under the folder, create an `index.html` file and a `config.yml` file

      You can install Sveltia CMS using a package manager like npm, pnpm, or yarn, instead of using the CDN version

      Source ↗ sveltiacms.app/en/docs/architecture

      This configuration file defines your backend, media folders, and content collections.

  5. Config fileSchema definitionDependencyBuild config
    Config file
    A config file owned by the CMS.
    Schema definition
    Your content model, declared a second time.
    Dependency
    A package in package.json.
    Build config
    An integration or plugin in your Astro config.
    1 product
    • CloudCannon
      A config file in the repo root, one or more schema/template files per collection, and a Bookshop spec file beside each component; Bookshop also adds an npm package and an entry in the Astro config. Vendor documentation Checked
      9 quotes from 5 sources

      Source ↗ cloudcannon.com/…/what-is-the-cloudcannon-configuration-file

      CloudCannon supports the following configuration file types: cloudcannon.config.json cloudcannon.config.yaml cloudcannon.config.yml (recommended)

      By default, CloudCannon assumes your Configuration File is in the root folder of your Git repository

      Source ↗ cloudcannon.com/…/what-is-a-schema

      A schema is a predefined template that determines what should populate a collection file. You can configure several schemas for each collection

      Source ↗ cloudcannon.com/…/create-a-schema

      Create a schema file with the same file extension as your collection files. Add front matter and Markdown content to create a template.

      Source ↗ cloudcannon.com/…/getting-set-up

      Building a site with Bookshop requires a specific directory structure that lives alongside your website, and an Astro integration to discover and use components.

      The easiest way to get started is to create a bookshop folder containing a bookshop.config.cjs in your site src folder alongside the existing Astro components directory.

      To connect Bookshop and Astro, install the @bookshop/astro-bookshop integration from npm

      Within your Astro config, import this integration and add it to your Astro config.

      Source ↗ cloudcannon.com/…/using-structures

      The Bookshop specification file for a component is created next to that component and has the same name.

  6. DependencyBuild configCredentialsIntegration code
    Dependency
    A package in package.json.
    Build config
    An integration or plugin in your Astro config.
    Credentials
    An API key or token the repo and deploy carry.
    Integration code
    Fetching and rendering code you write and maintain.
    1 product
    • Storyblok
      Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ storyblok.com/docs/guides/astro

      npm install @storyblok/astro

      Next, in the astro.config.mjs file, initialize the Storyblok module:

      In the root of the project, create a .env file to store the Storyblok access token.

      components: { page: " storyblok/Page " , grid: " storyblok/Grid " , feature: " storyblok/Feature " , teaser: " storyblok/Teaser " , }

      const storyblokApi = useStoryblokApi (); const { data } = await storyblokApi . get ( " cdn/stories/home " , { version: " draft " , } );

  7. DependencyBuild configIntegration codeAdmin routeGenerated code
    Dependency
    A package in package.json.
    Build config
    An integration or plugin in your Astro config.
    Integration code
    Fetching and rendering code you write and maintain.
    Admin route
    An editor served by your own site.
    Generated code
    Generated types or a client, committed to the repo.
    1 product
    • EmDash
      The content model lives in the database, surfacing in the repo only as generated types. Vendor documentation Checked
      6 quotes from 4 sources

      Source ↗ docs.emdashcms.com/existing-project

      npm install emdash @astrojs/react react react-dom

      Source ↗ docs.emdashcms.com/coming-from/astro

      output: "server", // Required for EmDash

      Full WYSIWYG editing interface at /_emdash/admin

      Source ↗ docs.emdashcms.com/getting-started

      import { emdashLoader } from "emdash/runtime"

      This creates .emdash/types.ts with interfaces for all your collections.

      Source ↗ github.com/emdash-cms/emdash

      Content types are defined in the database, not in code.

  8. DependencyConfig fileBuild configSchema definitionCredentials
    Dependency
    A package in package.json.
    Config file
    A config file owned by the CMS.
    Build config
    An integration or plugin in your Astro config.
    Schema definition
    Your content model, declared a second time.
    Credentials
    An API key or token the repo and deploy carry.
    1 product
    • Keystatic
      keystatic.config.ts holds both the config and the content-model schema; credentials are written into an .env file. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ keystatic.com/docs/installation-astro

      npm install @keystatic/core @keystatic/astro

      integrations: [react(), markdoc(), keystatic()],

      Create a file called keystatic.config.ts in the root of the project

      schema: { title: fields . slug ({ name: { label: 'Title' } }), content: fields . markdoc

      Source ↗ keystatic.com/docs/github-mode

      some environment variables were generated in a .env file on your project

  9. DependencyConfig fileBuild configAdmin routeSchema definitionIntegration codeCredentials
    Dependency
    A package in package.json.
    Config file
    A config file owned by the CMS.
    Build config
    An integration or plugin in your Astro config.
    Admin route
    An editor served by your own site.
    Schema definition
    Your content model, declared a second time.
    Integration code
    Fetching and rendering code you write and maintain.
    Credentials
    An API key or token the repo and deploy carry.
    1 product
    • Sanity
      Vendor documentation Checked
      5 quotes from 5 sources

      Source ↗ raw.githubusercontent.com/…/README.md

      npm install @astrojs/react @sanity/astro @sanity/client sanity

      Source ↗ sanity.io/content-lake

      schemas living in your Sanity Studio configuration, not as database constraints.

      Source ↗ sanity.io/docs/astro/embedding-studio-in-astro

      add studioBasePath to your integration config

      Source ↗ sanity.io/docs/astro/configure-sanity-astro

      Never hardcode tokens; use environment variables.

      Source ↗ sanity.io/…/displaying-content-in-an-astro-front-end

      import { sanityClient } from "sanity:client";

  10. DependencyConfig fileBuild configSchema definitionIntegration codeGenerated codeCredentials
    Dependency
    A package in package.json.
    Config file
    A config file owned by the CMS.
    Build config
    An integration or plugin in your Astro config.
    Schema definition
    Your content model, declared a second time.
    Integration code
    Fetching and rendering code you write and maintain.
    Generated code
    Generated types or a client, committed to the repo.
    Credentials
    An API key or token the repo and deploy carry.
    1 product
    • Payload CMS
      An admin app is committed as a separate Next.js workspace package the Astro site depends on, rather than a route the Astro build serves. Vendor documentation Checked
      14 quotes from 10 sources

      Source ↗ raw.githubusercontent.com/…/package.json

      "dependencies": { "@astrojs/node": "^9.0.0", "astro": "^5.1.1", "payload": "3.11.0", "payload-app": "workspace:*" }

      Source ↗ raw.githubusercontent.com/…/payload.config.ts

      collections: [ Users, Media, { slug: 'posts', fields: [ { name: 'title', label: 'Title', type: 'text', required: true, }, ], }, ], editor: lexicalEditor(), secret: process.env.PAYLOAD_SECRET || '',

      typescript: { outputFile: path.resolve(dirname, 'payload-types.ts'), },

      Source ↗ raw.githubusercontent.com/…/page.tsx

      /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import type { Metadata } from 'next'

      import config from '@payload-config' import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap'

      Source ↗ raw.githubusercontent.com/…/astro.config.mjs

      import { defineConfig } from 'astro/config' import node from '@astrojs/node' import { loadEnv } from 'payload/node' loadEnv() export default defineConfig({ output: 'server', adapter: node({ mode: 'standalone', }), })

      Source ↗ raw.githubusercontent.com/…/index.astro

      import { getPayload } from 'payload' import { config } from 'payload-app' import Welcome from '../components/Welcome.astro' import Layout from '../layouts/Layout.astro' const payload = await getPayload({ config }) const posts = await payload.find({ collection: 'posts', sort: 'createdAt' })

      Source ↗ raw.githubusercontent.com/…/.env.example

      DATABASE_URL=mongodb://127.0.0.1/payload-template-blank-3-0 PAYLOAD_SECRET=YOUR_SECRET_HERE

      Source ↗ raw.githubusercontent.com/…/pnpm-workspace.yaml

      packages: - 'payload' - 'website'

      Source ↗ raw.githubusercontent.com/…/package.json

      "name": "astro-payload-monorepo", "version": "1.0.0", "description": "", "keywords": [], "license": "ISC", "author": "", "main": "index.js", "scripts": { "dev:payload": "cd payload && pnpm dev", "dev:website": "cd website && pnpm dev",

      Source ↗ raw.githubusercontent.com/…/package.json

      "name": "payload-app", "version": "1.0.0", "description": "A blank template to get started with Payload 3.0",

      "@payloadcms/next": "3.11.0", "@payloadcms/richtext-lexical": "3.11.0", "cross-env": "^7.0.3", "graphql": "^16.8.1", "next": "15.4.11", "payload": "3.11.0", "react": "19.2.1",

      "dev": "next dev --turbo", "devsafe": "rm -rf .next && next dev",

      Source ↗ payloadcms.com/docs/admin/overview

      The Admin Panel is written in TypeScript and built with React using the Next.js App Router

  11. DependencyConfig fileBuild configAdmin routeSchema definitionIntegration codeGenerated codeCredentials
    Dependency
    A package in package.json.
    Config file
    A config file owned by the CMS.
    Build config
    An integration or plugin in your Astro config.
    Admin route
    An editor served by your own site.
    Schema definition
    Your content model, declared a second time.
    Integration code
    Fetching and rendering code you write and maintain.
    Generated code
    Generated types or a client, committed to the repo.
    Credentials
    An API key or token the repo and deploy carry.
    1 product
    • TinaCMS
      The model, a committed schema lock file and the code marking each editable section live in the repository; the client and admin bundle are built. Vendor documentation Checked
      12 quotes from 4 sources

      Source ↗ tina.io/docs/frameworks/astro

      init installs @tinacms/astro + an SSR adapter, wraps your dev / build scripts, and adds new files: a ready-to-edit demo at /tinacms-demo , your tina/ config, and one sample collection.

      pnpm add @tinacms/astro tinacms pnpm add -D @tinacms/cli pnpm add @astrojs/node

      Add the Tina integration and an SSR adapter to astro.config.mjs . If you already have an integrations array or an adapter, keep them and just append tina() .

      tina/config.ts : your collections (schema); generates the typed client. src/lib/tina/data.ts : per-collection fetchers, each piped through requestWithMetadata() . src/lib/tina/islands.ts : the registry of editable regions.

      src/pages/tina-island/[name].ts : the on-demand endpoint the bridge refetches, via experimental_createIslandRoute(islands) .

      Open http://localhost:4321/admin/index.html , pick a post, and edit. Visual editing is already wired, nothing else to do.

      Source ↗ tina.io/docs/tina-folder/overview

      The tina-lock.json must be checked into source control and pushed to your repo . It contains a compiled schema used to resolve content documents.

      Generated Files During the build process, Tina generates a number of files in __generated__/ .

      You should ignore this directory from your git repository.

      Source ↗ tina.io/…/cloudflare-workers

      Grab both credentials from your TinaCloud project . PUBLIC_TINA_CLIENT_ID is your client ID.

      TINA_TOKEN is a content token. SITE_URL is your production URL

      Source ↗ tina.io/docs/reference/config

      The Tina admin is a statically built SPA . Environment variables are embedded into the admin

What you have to run yourself when self-hosting.

  1. Nothing
    3 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      6 quotes from 3 sources

      Source ↗ cloudcannon.com/…/what-is-a-site-build

      CloudCannon uses a CI/CD (Continuous Integration/Continuous Delivery) system. Every time you trigger a build of your Site, CloudCannon will: Download your files onto our server.

      CloudCannon runs your build commands using bash in an isolated environment powered by Ubuntu

      Upload your output files to CloudCannon to generate previews (i.e., the test domain, visual editor, and in-app screenshots) and deliver them to your live domain

      Source ↗ cloudcannon.com/…/configure-your-first-build

      Building on CloudCannon is optional; however, it is required for web hosting and visual editing.

      After a successful first build, CloudCannon will build your Site every time it syncs an update from your repository, or when you choose to trigger a build

      Source ↗ cloudcannon.com/…/authenticate-your-git-provider

      For CloudCannon to sync your files from a Git repository, you must give it permission to access your Git provider.

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/deployment

      Since the Studio consists of static HTML, CSS, and JavaScript files and communicates with Sanity through our HTTP API, it can be hosted anywhere.

      The `sanity deploy` command works by building the source files in your Studio project into static files, which are then uploaded and served from your chosen `sanity.studio` domain.

  2. OAuth gateway
    OAuth gateway
    A service that exchanges a Git host login for a token.
    2 products
    • Decap CMS
      Self-hosting with a direct GitHub backend needs an OAuth server; Netlify hosts one, or you run your own. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/github-backend

      Because GitHub requires a server for authentication, Netlify facilitates basic GitHub authentication.

      Source ↗ decapcms.org/docs/external-oauth-clients

      would like to facilitate your own OAuth authentication rather than use

    • Sveltia CMS
      OAuth sign-in needs an OAuth client server the customer deploys (Sveltia's Authenticator, a Netlify/Decap client, or Netlify). Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/backends/github

      the authorization code flow requires you to set up an OAuth app on GitHub and deploy an OAuth client server to handle the authentication process

      There are multiple options for the OAuth client, including our own Sveltia CMS Authenticator, third-party OAuth clients made for Netlify/Decap CMS, or using Netlify as an OAuth provider.

      We provide our own OAuth client called Sveltia CMS Authenticator that you can deploy on Cloudflare Workers.

  3. App server
    App server
    The product's own server process.
    1 product
    • Keystatic
      Keystatic's API routes run inside the customer's own Astro app, which must run Node.js. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/installation-astro

      Because Keystatic needs to run serverside code and use Node.js APIs, you will need to add an Astro adapter to deploy your project.

      Source ↗ keystatic.com/docs/github-mode

      Make sure the host can run Node.js for Keystatic's API routes.

  4. App serverDatabase
    App server
    The product's own server process.
    Database
    A database and its backups.
    3 products
    • Payload CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/docs/getting-started/installation

      Payload requires the following software: Any JavaScript package manager (pnpm, npm, or yarn 2+ - pnpm is preferred, yarn 1.x is not supported) Node.js version 20.9.0+

      15.4.11 - 15.4.x 16.2.6 + Any compatible database (MongoDB, Postgres or SQLite) Important: Before proceeding any further, please ensure that you have the above requirements met.

      By default, the Next.js dev script is pnpm dev (or npm run dev if using npm). After it starts, you can go to http://localhost:3000/admin to create your first Payload user!

    • Strapi
      Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/deployment

      Your Strapi applications can be deployed on traditional hosting servers or your preferred hosting provider.

      Configuring a Strapi application for production takes 2 steps: setting the configuration through environment variables, then building the admin panel and launching the server.

      Hardware specifications for your server (CPU, RAM, storage): Hardware Recommended Minimum CPU 2+ cores 1 core Memory 4GB+ 2GB Disk 32GB+ 8GB

      A supported database version: Database Recommended Minimum MySQL 8.4 8.0 MariaDB 11.4 10.3 PostgreSQL 17.0 14.0 SQLite 3 3

      Strapi does not require a specific continuous integration tool. Any pipeline that can install dependencies, build the admin panel, and run the server works.

      Source ↗ docs.strapi.io/cms/features/preview

      Setting up the front-end preview route is highly dependent on the framework used for your front-end application.

    • TinaCMS
      Self-hosting replaces TinaCloud with a backend, a database and an auth provider you run, and gives up repo-based media, search and runtime branch switching. Vendor documentation Checked
      10 quotes from 3 sources

      Source ↗ tina.io/docs/self-hosted/overview

      we provide a self-hosting option . This allows you to run your own TinaCMS Backend, with the flexibility to provide your own database, authentication, and Git integration, independent of TinaCloud.

      When you opt to self-host TinaCMS's backend, you'll be configuring a single API function to act as the backend service. This function will expose a GraphQL endpoint for your content and handle all aspects of authentication and authorization.

      The backend setup consists of three main, configurable modules: Auth Provider Handles authentication and authorization for CMS operations. A default Auth.js implementation backed by a user collection in your database is provided. Database Adapter Handles indexing and interaction with the database (e.g. MongoDB, Postgres, etc.) Git Provider Handles saving content to Git

      The TinaCMS backend is designed to be compatible with any Node.js serverless environment, such as Vercel or Netlify.

      Source ↗ tina.io/…/overview

      We currently have database adapters for the following database implementations: Vercel KV MongoDB

      Source ↗ tina.io/docs/faq

      A database is essential when using markdown with TinaCMS because the Data Layer, which serves Markdown and JSON files, relies on a database to perform various content management functions.

      When comparing TinaCloud with self-hosting Tina, there are specific features unique to TinaCloud. These include:

      Git backed media feature. This integrates media into the Tina Media Manager and commits it directly to the Git repository. However, this functionality is not present in self-hosted Tina.

      2. Dynamic Branch Switching at Runtime TinaCloud allows for changing the content branch at runtime, a feature managed through URL modification. However, in self-hosted Tina, changing branches is restricted to the build phase only.

      3. Search The self-hosted backend does not currently have endpoints to support search functionality.

  5. App serverDatabaseBuild pipeline
    App server
    The product's own server process.
    Database
    A database and its backups.
    Build pipeline
    A CI job or deploy hook beyond the site's own.
    1 product
    • EmDash
      You run the Astro SSR process, provision the database yourself, and run the build and migrations to deploy. Vendor documentation Checked
      4 quotes from 4 sources

      Source ↗ docs.emdashcms.com/existing-project

      your project needs output: "server" and an adapter (Node, Cloudflare, …)

      Source ↗ docs.emdashcms.com/deployment/database

      You must provision the D1 database separately

      Source ↗ docs.emdashcms.com/deployment/nodejs

      Keep at least one Node.js process running continuously in production.

      Source ↗ docs.emdashcms.com/deployment/cloudflare

      pnpm build pnpm exec emdash migrate --status --json

  6. OAuth gatewayApp serverDatabase
    OAuth gateway
    A service that exchanges a Git host login for a token.
    App server
    The product's own server process.
    Database
    A database and its backups.
    1 product
    • Pages CMS
      Self-hosting runs a Node app server, a PostgreSQL database and a GitHub App for auth. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/guides/installing/self-host

      Create a PostgreSQL database

      Create the GitHub App Use the helper:

      Build and run npm run build npm run start

  7. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Storyblok
      Not tested Undated

Where the content model is defined.

  1. Your Zod schemas

    Read from your Astro collection schemas.

    1 product
    • ZeroCMS
      Tested Checked
  2. CMS config file

    Defined again in a CMS config in your repository.

    9 products
    • CloudCannon
      Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/…/configuration-file

      cloudcannon.config.js and should be placed in the root directory of your repository.

      This key defines your Collections.

      Source ↗ cloudcannon.com/…/create-your-cloudcannon-configuration-file

      All Collections are defined under the collections_config key in your CloudCannon Configuration File

      CloudCannon will create the /cloudcannon.config.yml file in the root of your repository.

      Source ↗ cloudcannon.com/…/create-a-schema

      Within the collections_config key, find the key for the collection where you want to reference this schema.

    • Decap CMS
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ decapcms.org/docs/install-decap-cms

      The second file, admin/config.yml, is the heart of your Decap CMS installation

      Source ↗ decapcms.org/docs/configure-decap-cms

      Collections define the structure for the different content types on your static site.

      Source ↗ decapcms.org/docs/configuration-options

      The fields option maps editor UI widgets to field-value pairs in the saved file.

    • Keystatic
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/collections

      Collections are defined within the collections key of the Keystatic config.

      Source ↗ keystatic.com/docs/installation-astro

      import { config, fields, collection } from '@keystatic/core'

    • Pages CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/content

      content defines what editors can edit.

      Source ↗ pagescms.org/docs/configuration

      .pages.yml is the single source of truth for Pages CMS configuration.

    • Payload CMS
      Declared once, but a separate front end is told to get it by copying the generated types across. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ payloadcms.com/docs/configuration/collections

      To define a Collection Config, use the collections property in your Payload Config.

      Source ↗ payloadcms.com/docs/configuration/overview

      The Payload Config is a payload.config.ts file typically located in the root of your project

      use Collections or Globals to define the schema of your data through Fields

      Source ↗ payloadcms.com/docs/typescript/generating-types

      Run the following command in a Payload project to generate types based on your Payload Config

      It is common for users to want to use this in their frontend code, we recommend generating them with Payload and then copying the file over to your frontend codebase. This is the simplest way to get your types into your frontend codebase.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/content-lake

      Content Lake stores any valid JSON document, with schemas living in your Sanity Studio configuration, not as database constraints.

    • Strapi
      The builder runs only against a development instance, so the model cannot be changed on a live project. Vendor documentation Checked
      7 quotes from 4 sources

      Source ↗ docs.strapi.io/cms/deployment

      Content-types created in one environment travel with your code, not with your data. Content-types cannot be created or updated in production

      Another possible workflow is to first create the content structure locally, push your project to a git-based repository, deploy the changes to production, and only then add content to the production instance.

      Source ↗ docs.strapi.io/cms/faq

      Strapi stores model configuration files (what defines the model schema) in files such as

      This could potentially cause downtime of your production service and likewise these changes should be tracked in some kind of source control.

      At this time and in the future there is no plan to allow model creating or updating while in a production environment, and there is currently no plans to move model settings into the database.

      Source ↗ docs.strapi.io/cms/backend-customization/models

      The user interface takes over a lot of validation tasks and showcases all the options available to create the content's content structure. The generated model mappings can then be reviewed at the code level using this documentation.

      Source ↗ docs.strapi.io/cms/quick-start

      First we will build a content structure for your content. This can only be done while in development mode, which is the default mode for projects that are created locally.

    • Sveltia CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/start

      You need to define at least one collection in the configuration file to manage your content.

      Source ↗ sveltiacms.app/en/docs/architecture

      This configuration file defines your backend, media folders, and content collections.

    • TinaCMS
      Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ tina.io/docs/reference/schema

      The Schema is located in tina/config.{ts,tsx,js,jsx} and it is used to define the shape of the content.

      Source ↗ tina.io/docs/reference/config

      REQUIRED schema Schema Defines your content model .

      Source ↗ tina.io/docs/content-model-intro

      Specifically, the schema property in your TinaCMS Config file determines data mapping between your content store and the editor.

      Tina uses a "content-modeling as code" approach. The schema is version-controlled

  3. CMS dashboard

    Defined in the vendor's UI, outside your repository.

    2 products
    • EmDash
      The model is authored in the admin or the CLI, and can be exported as a JSON seed for version control. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/concepts/content-model

      You create and edit collections and fields visually in the admin panel under Content Types, or with the CLI.

      Source ↗ docs.emdashcms.com/concepts/architecture

      Export the model as a JSON seed file for version control

    • Storyblok
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ github.com/storyblok/storyblok-astro

      Link your Astro components to their equivalents created in Storyblok with the following steps.

      Source ↗ storyblok.com/docs/concepts/blocks

      To create a new block, open the Block Library , select + New Block , and choose the type.

How the editor learns about your components.

  1. Your own components

    The editor reads the components in your repository.

    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/zero-integration

      Zero reads your existing Astro content collections and components directly from GitHub. No sync, no migration, no vendor-specific config files.

      Codebase stays clean, because you don't add anything to your repo — not a config file, not a package, not an API key.

      Source ↗ zerocms.io/features/visual-content-editor

      Zero reads your .astro components and surfaces them in the slash menu.

  2. Declared in config

    Each component registered in a CMS config in your repository.

    5 products
    • CloudCannon
      A component nobody registered appears in the editor as a block that cannot be edited. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ cloudcannon.com/…/snippets-using-mdx-components

      To enable editing and provide the custom component in the toolbar, your custom component must be configured using the _snippets object in your CloudCannon global config file.

      After importing the mdx Snippets configurations, any custom components in your content will be displayed in the Content Editor as an Unknown Component . This allows an editor to move and delete a Component, but prevents editing of its arguments or content:

      Source ↗ cloudcannon.com/…/using-structures

      To start with CloudCannon Structures, we first need to add Bookshop specification files for our components.

      The Bookshop specification file for a component is created next to that component and has the same name.

      The structures key tells CloudCannon where this component can be added. In this example, we are adding this component to the set of content_blocks structures.

      The npx @bookshop/generate command that we set up when configuring live editing will automatically create Structures from your Bookshop components and make them available to CloudCannon.

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/custom-widgets

      registerEditorComponent: adds a block component to the Markdown editor.

    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/content-components

      You can define content components by passing a components object to the Markdoc or MDX field

      import { block } from '@keystatic/core/content-components'

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/api/editor-components

      To register a custom editor component, use the `registerEditorComponent` method on the `CMS` object

    • TinaCMS
      A component in the body needs a template describing its fields and a renderer registered under a matching name, or it shows as a placeholder. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      To render a custom component inside a rich-text body (for example, a YouTubeEmbed ), author two files: a schema Template describing the editor UI, and an Astro renderer named the same as the template.

      Register the template on the rich-text field

      The two name strings must match.

      are how the renderer dispatches mdxJsxFlowElement nodes from the rich-text AST. A mismatch renders the embed as a visible placeholder so you spot missing registrations during development.

  3. Mapped in code

    Blocks defined in the CMS, each mapped to a component in your code.

    5 products
    • EmDash
      Custom block types require a native plugin loaded from npm at build time. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.emdashcms.com/…/portable-text-components

      To render block types on the public site, export Astro components from a componentsEntry

      The export name is required to be blockComponents

      have to be loaded at build time from npm. That's the part that requires a native plugin

    • Payload CMS
      Blocks are defined in the Payload config, and rendering each one is a converter the Astro site has to write. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/rich-text/blocks

      The BlocksFeature allows you to embed Payload's Blocks Field directly inside your Lexical rich text editor. This provides a powerful way to create structured, reusable content components within your rich text content.

      To add blocks to your Lexical editor, include the BlocksFeature in your editor configuration:

      When rendering rich text content on the frontend, blocks need to be handled by your converter configuration.

      Each converter allows you to define custom renderers for your block types, giving you full control over how block content appears on your frontend.

    • Sanity
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/astro/images-and-portable-text-astro

      import { PortableText } from 'astro-portabletext'

      Source ↗ sanity.io/…/portable-text-editor-configuration

      Portable Text allows custom content objects in the root array, enabling editing and rendering environments to mix rich text with custom content types.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/guides/astro

      components: { page: " storyblok/Page " , grid: " storyblok/Grid " , feature: " storyblok/Feature " , teaser: " storyblok/Teaser " , }

      The StoryblokComponent dynamically renders content type and nestable blocks.

    • Strapi
      The renderer Strapi ships officially is a React one, covering its rich-text blocks; an Astro site defines its own renderers for those blocks. Vendor documentation Checked
      10 quotes from 3 sources

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      From the Content-type Builder, accessible via the main navigation of the admin panel, users can create and edit their content types.

      Components: content structure that can be used in multiple collection types and single types.

      Components are a combination of several fields. Components allow to create reusable sets of fields, that can be quickly added to content-types, dynamic zones but also nested into other components.

      Dynamic zones are a combination of components that can be added to content-types.

      React renderer If using the Blocks editor, we recommend that you also use the Strapi Blocks React Renderer to easily render the content in a React frontend.

      Source ↗ strapi.io/…/lightning-fast-building-with-strapi-and-astro

      In React-based frameworks like Next.js , developers typically build a custom renderer that maps each block to a React component.

      Alternatively, they can use the official Strapi Blocks React Renderer , which abstracts this mapping logic and provides default components for common block types.

      While this approach works well in React ecosystems, Astro is framework-agnostic by design.

      Instead of wiring up block-to-component mappings manually, developers can define renderers once and use them declaratively in .astro files, without relying on a specific UI framework or runtime.

      Source ↗ github.com/strapi/blocks-react-renderer

      Blocks are full-width elements, usually at the root of the content. The available options are: paragraph heading (receives level and plainText ) list (receives format ) quote code (receives plainText ) image (receives image ) link (receives url )

  4. No components

    Nothing can be placed in the body.

    1 product
    • Pages CMS
      Tested Checked

How the editor learns where your assets live.

  1. Found in the project

    The editor locates your asset folders itself.

    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/features/media-library

      Different collections store media in different places. Zero reads your site structure and routes each upload to the correct folder automatically.

      Zero learns where each collection stores its media and automatically places new uploads there. If images or videos are later moved around, Zero learns that too.

      Connect your repo and get a media library that uploads, searches, and places files exactly where your site expects them — no config required.

  2. Declared in config

    Upload and public paths are set in a CMS config.

    9 products
    • CloudCannon
      Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ cloudcannon.com/…/adjusting-the-uploads-path

      Upload paths control the location that new asset files are uploaded to. You can configure your upload paths using these options:

      This key defines the paths for the default location of newly uploaded site files.

      This key defines the path for the location of statically copied assets.

      Uploads paths are configured alongside other paths in a number of places: Globally in the CloudCannon Configuration file

      Source ↗ cloudcannon.com/…/what-is-the-cloudcannon-configuration-file

      By default, CloudCannon assumes your Configuration File is in the root folder of your Git repository, however you can define a custom Configuration File path if your file is within a nested folder.

      source : / paths : uploads : public/uploads static : public collections_config : pages : path : pages

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/configuration-options

      The media_folder option specifies the folder path where uploaded files should be saved, relative to the base of the repo.

    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/concepts/architecture

      You pass a database and a storage backend to the integration.

      Storage: the local filesystem, Cloudflare R2, or any S3-compatible storage for media.

    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/fields/image

      directory: 'public/images/avatars',

      The publicPath option lets you control how the path to the image (as you'd use in the front end) is constructed.

    • Pages CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/configuration/media

      media defines file storage

      input * Repository path where files are stored (e.g. src/media).

      output * Public path written into content (e.g. /media).

    • Payload CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/docs/upload/overview

      Every Payload Collection can opt-in to supporting Uploads by specifying the upload property on the Collection

      staticDir The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. Defaults to your collection slug

    • Strapi
      Declared in the Strapi application's own configuration, in config/plugins. Vendor documentation Checked
      7 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/media-library

      The Media Library is powered in the backend server by the Upload package, which can be configured and extended through providers.

      Amazon S3 Official provider for file uploads to Amazon S3. Cloudinary Official provider for media management with Cloudinary.

      Local Default provider for storing files locally on the server.

      When using the default upload provider, the following specific configuration options can be declared in an upload.config object within the config/plugins file

      These sizes can be overridden in /config/plugins

      Source ↗ docs.strapi.io/cms/project-structure

      ├──── config # API configurations │ ├ admin.ts │ ├ api.ts

      ├──── public # files accessible to the outside world │ ├──── uploads │ └ robots.txt

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/media

      Relevant configuration options can be set in the `media_folder`, `public_folder`, and `media_libraries` options

    • TinaCMS
      Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ tina.io/docs/reference/media/overview

      All of the media configuration is done in the defineConfig function under config.media .

      Note: Only Repo-based Media or an External Media Provider can be configured, but not both

      Source ↗ tina.io/docs/reference/media/repo-based

      To configure repo-based media in your project, add the following to your schema definition in tina/config.{ts,js} :

      Set publicFolder to the path to your site's "public" folder. This path is relative to your project's root.

      Media Storage Path The path to your media folder, relative to the publicFolder value.

  3. The vendor's

    Assets live with the vendor, so there is nothing to configure.

    2 products
    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/assets

      All assets in Sanity are served through a global content delivery network (CDN).

      Uploaded through Sanity Studio or the Assets API.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/assets

      Storyblok includes a native digital asset manager (DAM) for asset management and delivery.

      Storyblok delivers all assets via AWS CloudFront CDN .

The kinds of editing interface the product offers.

  1. Schema formsRich textMarkdown source
    Schema forms
    A form generated from the content model.
    Rich text
    A formatted-text editor.
    Markdown source
    The raw Markdown.
    3 products
    • Decap CMS
      Fields are generated from the config's widgets, and the markdown widget toggles between a rich-text and a raw markdown mode. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ decapcms.org/docs/widgets/markdown

      Possible modes are raw and rich_text. A toggle button appears in the toolbar when more than one mode is available.

      The markdown widget provides a full-fledged text editor

      Source ↗ decapcms.org/docs/configuration-options

      The fields option maps editor UI widgets to field-value pairs in the saved file.

    • EmDash
      Tested Checked
    • Sveltia CMS
      Fields are generated from the schema, and the rich-text field has a raw Markdown mode. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/fields

      Sveltia CMS includes the following field types out of the box: Boolean : A toggle switch for true/false values.

      Source ↗ sveltiacms.app/en/docs/fields/richtext

      The RichText field type provides a rich text editor that supports Markdown content.

      The `raw` mode allows users to edit the raw Markdown text.

  2. Visual blocksRich textMarkdown sourceSchema forms
    Visual blocks
    Building a page from blocks on a canvas.
    Rich text
    A formatted-text editor.
    Markdown source
    The raw Markdown.
    Schema forms
    A form generated from the content model.
    2 products
    • Strapi
      Vendor documentation Checked
      7 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/content-manager

      In Strapi, writing content consists in filling up fields, which are meant to contain specific content (e.g. text, numbers, media, etc.). These fields were configured for the collection or single type beforehand, through the Content-type Builder .

      Rich text (Markdown) Write your textual content in the editor, in Markdown.

      A Preview mode/Markdown mode button to switch between modes is also available.

      Rich text (Blocks) Write and manage your content in the editor, which automatically renders live all additions/updates.

      Click on the Add a component to [dynamic zone name] button. Choose a component available for the dynamic zone. Fill in the fields of the component.

      Dynamic zones' components can also be reordered or deleted directly in the edit view, using buttons displayed in the top

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      Configuring content-types fields Text Rich Text (Blocks) Number Date Password Media Relation Boolean JSON Email Password Enumeration UID Rich Text (Markdown) Components Dynamic zones Custom fields

    • TinaCMS
      Clicking the page selects the matching field, but the typing happens in the sidebar rather than on the page. Vendor documentation Checked
      8 quotes from 4 sources

      Source ↗ tina.io/docs/tinacms-lingo

      TinaCMS Editor The left-hand pane where content is edited using structured fields and inputs.

      Clicking any outlined element will automatically focus its corresponding field in the sidebar for immediate editing.

      Source ↗ tina.io/docs/reference/fields

      Fields define the content structure, and the form fields that appear in the editor for a particular collection . These are categorised as Field Types – which determine what data is stored and which input component appears in the editor.

      Options for field types include: string number datetime boolean image reference object rich-text (markdown)

      Source ↗ tina.io/docs/reference/types/rich-text

      The rich-text field stores markdown content with a WYSIWYG interface, supporting features like text formatting, links, media and custom elements (if used with mdx).

      you can do so by switching to Raw Markdown mode and editing the alignment syntax in the table header separator row.

      Source ↗ tina.io/docs/editing/blocks

      Tina supports block-based editing, so that your editors can build out full pages using your pre-defined blocks (i.e. page sections ).

      This visual block selector allows editors to select blocks from a set images instead of text.

  3. Schema formsRich textVisual blocks
    Schema forms
    A form generated from the content model.
    Rich text
    A formatted-text editor.
    Visual blocks
    Building a page from blocks on a canvas.
    2 products
    • Keystatic
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ keystatic.com/docs/fields/image

      In the Admin UI it renders an image picker component

      Source ↗ keystatic.com/docs/fields/document

      The document field is a highly customisable rich text editor.

      Source ↗ keystatic.com/docs/fields/blocks

      The blocks field is similar to the array field in that you can create "Add one more" scenarios, but with the difference that it lets you define a separate field schema for each instance.

    • Payload CMS
      Vendor documentation Checked
      11 quotes from 6 sources

      Source ↗ payloadcms.com/docs/fields/blocks

      This makes Blocks perfect for building dynamic, editor-friendly experiences, such as: A page builder with blocks like Quote , CallToAction , Slider , or Gallery .

      Used in the block selection drawer when editors add blocks to a blocks field.

      Source ↗ payloadcms.com/…/how-to-build-flexible-layouts-with-payload-blocks

      So now if you navigate to the Collection in the admin panel, we can see the option to add a block. When this is clicked, a drawer opens up with a Content with Media block option.

      By default, this is true, so you'll have the ability to click and drag and sort any of your blocks

      Blocks are an incredibly powerful and flexible tool that allows you to create customizable layouts using Blocks that you define.

      Source ↗ payloadcms.com/docs/live-preview/overview

      With Live Preview you can render your front-end application directly within the Admin Panel

      Source ↗ payloadcms.com/docs/rich-text/overview

      With healthy defaults out of the box, but also with the flexibility to customize every detail: from the “/” menu and toolbars (whether inline or fixed) to inserting any component or subfield you can imagine.

      This documentation is about our new editor, based on Lexical (Meta's rich text editor).

      Source ↗ payloadcms.com/docs/fields/overview

      Payload provides a wide variety of built-in Field Types, each with its own unique properties and behaviors that determine which values it can accept, how it is presented in the API, and how it will be rendered in the Admin Panel

      To configure fields, use the fields property in your Collection or Global config

      Source ↗ payloadcms.com/docs/admin/overview

      Payload dynamically generates a beautiful, fully type-safe Admin Panel to manage your users and data.

  4. Schema formsRich textMarkdown sourceRaw code
    Schema forms
    A form generated from the content model.
    Rich text
    A formatted-text editor.
    Markdown source
    The raw Markdown.
    Raw code
    The underlying file, edited as code.
    1 product
    • Pages CMS
      Fields are generated; the rich-text body toggles to a Markdown source view, and files without fields fall back to a raw editor. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/content/editors

      Use `fields` when the file or collection should be modeled as structured content.

      If `fields` is omitted or empty, Pages CMS falls back to a raw file editor.

      Use `format: code` when you want a code-oriented editor for a single file.

      Source ↗ pagescms.org/docs/configuration/fields/rich-text

      WYSIWYG editor for formatted content.

      format Values: markdown, html.

      Show or hide the `Editor` / `Source` mode switch. Defaults to `true`.

  5. On-page inlineVisual blocksRich textSchema formsRaw code
    On-page inline
    Editing text directly on the rendered page.
    Visual blocks
    Building a page from blocks on a canvas.
    Rich text
    A formatted-text editor.
    Schema forms
    A form generated from the content model.
    Raw code
    The underlying file, edited as code.
    1 product
    • CloudCannon
      Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ cloudcannon.com/…/using-cloudcannons-editing-interfaces

      These allow you to switch between CloudCannon's four Editing Interfaces : the Visual Editor , Content Editor , Data Editor , and Source Editor . You'll see between two and four options depending on your file type and Site configuration.

      The Visual Editor is the most intuitive way to edit your website. It allows you to edit your content directly on an interactive preview of your webpage.

      For text content, you can type directly on the page to edit the text. If it is rich text (as opposed to plain text), CloudCannon will also give you a formatting toolbar with options like bold, italic, headings, and lists.

      The Content Editor is a rich text editor that's perfect for editing content-heavy files like blog posts, articles, or documentation.

      Each piece of file information has an Input field in your sidebar. To edit this information, use the fields, buttons, and sliders in each Input.

      The Source Editor is an in-browser code editor that's great for making minor changes to the source code of your files. It displays the raw content of text-based files with automatic syntax highlighting based on the file extension.

      Source ↗ cloudcannon.com/…/what-is-an-array-input

      Array inputs appear as a series of cards in the Data Editor or sidebar of the Visual or Content Editor.

      Depending on how your developer has configured the Array input, clicking the + Add button will either clone the last entry in the Array, allow you to choose from predefined Structures , or add an entry that matches the Entry Input Type.

      Source ↗ cloudcannon.com/…/configuring-live-editing

      Also in the Visual Editor, you will notice CloudCannon's Data Bindings have been added around your components, allowing you to click directly on the page and open an editing panel.

  6. Rich textSchema formsRaw code
    Rich text
    A formatted-text editor.
    Schema forms
    A form generated from the content model.
    Raw code
    The underlying file, edited as code.
    1 product
  7. Not tested

    We did not run this. It is not a claim that the product lacks it.

    2 products
    • Sanity
      Not tested Undated
    • Storyblok
      Not tested Undated

Whether components can be placed inside body content.

  1. Fully

    Inserted from a palette with its props as fields, and nothing left to hand-edit.

    10 products
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/features/visual-content-editor

      Drop custom Astro components into your content from a searchable palette. ZeroCMS handles the import and props. Your team just picks the block they need.

      Zero reads your .astro components and surfaces them in the slash menu. Pick one, fill in the props through a form, and it's inserted. Import statements are written automatically — no editor ever has to know what an import path looks like.

      Yes. The visual editor supports nesting components inside other components, and every level stays fully editable through the same visual interface.

    • CloudCannon
      Vendor documentation Checked
      6 quotes from 1 source

      Source ↗ cloudcannon.com/…/snippets-using-mdx-components

      CloudCannon supports embedding rich Snippets in Markdown content when using the CloudCannon Content Editor. Once configured, Snippets in your content will be presented as blocks in rich text views, with the ability to add them as Snippets via the toolbar:

      To enable editing and provide the custom component in the toolbar, your custom component must be configured using the _snippets object in your CloudCannon global config file.

      In this example, we configure the inputs for the keys that this snippet will generate. With that in place, we can now add and edit our tint component anywhere on our site.

      _inputs — Object # Input configurations for the keys contained in this component.

      content_key — string # The key to use in the data panel for editing the inner contents of the component.

      default — any # The default value that should be used for this argument when creating a new snippet in the CloudCannon editor.

    • Decap CMS
      Blocks are Decap editor components declared in code; their props are entered as fields and serialized to Markdown. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/custom-widgets

      registerEditorComponent: adds a block component to the Markdown editor.

      id, label, fields, patterns, fromBlock, toBlock, toPreview

    • EmDash
      Tested Checked
    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/fields/document

      The document field can register custom component blocks, which you can use to render custom UI components with props within your document field.

      Each component block has its own fields schema, and can be configured with a custom preview component.

    • Payload CMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/rich-text/blocks

      The BlocksFeature allows you to embed Payload's Blocks Field directly inside your Lexical rich text editor. This provides a powerful way to create structured, reusable content components within your rich text content.

      Blocks within Lexical support the same features as standard Payload blocks—including all field types, hooks, validation, access control, and conditional logic. The only difference is that the data is stored within the rich text JSON structure rather than as separate fields.

      The BlockCollapsible component automatically renders an edit button that opens a drawer with the block's fields.

      Inline blocks can be inserted within text , appearing alongside other content in the same paragraph. They're useful for elements that need to flow with text.

    • Sanity
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sanity.io/…/portable-text-editor-configuration

      Portable Text allows custom content objects in the root array, enabling editing and rendering environments to mix rich text with custom content types.

      This configuration adds an insert menu with

      Selecting an image inserts the block with a preview in the Portable Text Editor.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/concepts/fields

      Allow only specific components to be inserted (boolean): restrict blocks allowed in rich text composing (enabling this option will reveal a menu to select blocks)

      Source ↗ storyblok.com/docs/manuals/visual-editor

      The input fields support many types of content, but there's one type of field that is more capable than others: the blocks field.

    • Sveltia CMS
      Editor components are inserted from the toolbar's Insert menu with their props entered as fields. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/fields/richtext

      Editor components are custom blocks that can be inserted into the content. Sveltia CMS includes built-in components and also allows for custom components.

      Source ↗ sveltiacms.app/en/docs/api/editor-components

      By default, registered components appear under the Insert button on the editor toolbar

      `fields` (array of field definitions): An array defining the fields to be displayed in the component.

    • TinaCMS
      Vendor documentation Checked
      8 quotes from 3 sources

      Source ↗ tina.io/docs/contextual-editing/astro

      Custom MDX embeds To render a custom component inside a rich-text body

      author two files: a schema Template describing the editor UI, and an Astro renderer named the same as the template.

      and the components-map key YouTubeEmbed are how the renderer dispatches mdxJsxFlowElement nodes from the rich-text AST.

      A mismatch renders the embed as a visible placeholder so you spot missing registrations during development.

      Supported override keys: p , h1 – h6 , ul , ol , li , blockquote , lic , a , img , code_block , hr , break .

      Coarse-grained markers (the whole body ) are usually right; clicking any rich-text node inside focuses the editor on that field.

      Source ↗ tina.io/docs/reference/types/rich-text

      Custom components can be embedded in rich-text blocks.

      Source ↗ tina.io/docs/tinacms-lingo

      Rich Text Embed Within rich-text fields , we have the option to embed custom components as a template.

  2. Partly

    It can be inserted, but something is still hand-work — raw props, or an import line to write. The note says which.

    1 product
    • Strapi
      Custom block types can be registered into the Blocks rich-text editor's toolbar; other components attach through dynamic zones rather than inline in a prose body. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ docs.strapi.io/…/content-manager-apis

      Use this API to register custom block types in the Blocks rich text field. Custom blocks appear in the toolbar dropdown alongside built-in ones.

      The editor initializes its Slate instance during register, so blocks must be available at that point.

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      The Rich Text (Blocks) field displays an editor with live rendering and various options to manage rich text.

      Components allow to create reusable sets of fields, that can be quickly added to content-types, dynamic zones but also nested into other components.

  3. No

    Prose only.

    1 product
    • Pages CMS
      The rich-text body inserts images only. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/configuration/fields/rich-text

      media Media source for inserted images (e.g. content_images). Set to false to disable media.

When, if at all, are values that break the schema caught?

  1. Before save

    Caught while editing.

    7 products
    • ZeroCMS
      Tested and documented Checked
      4 quotes from 4 sources

      Source ↗ zerocms.io/features/zero-integration

      Schema-aware Fields, types, and validation Zero reads your Zod schema and builds a structured editor that matches exactly — required fields, enums, references to other collections, all of it. No manual configuration.

      Source ↗ zerocms.io/…/content-collections-deep-dive

      Enums become dropdowns, lengths become character counters, and invalid content is flagged as the editor types, long before a build has the chance to fail.

      Source ↗ zerocms.io/features/visual-content-editor

      Auto-generated from your Astro schema Supports frontmatter, YAML, and JSON files Date pickers, tag inputs, dropdowns, toggles Validation errors shown inline before publish

      Source ↗ zerocms.io

      No matter how complex your schema, all structures and content types are supported. Your team edits visually while the structure stays rock-solid underneath.

    • CloudCannon
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-are-inputs

      By configuring input validation, CloudCannon will prevent you from saving an input with an invalid value.

      For some inputs, you may want to ensure that content creators have entered a value before they save their changes, or that a value meets a list of prerequisite criteria.

      Source ↗ cloudcannon.com/…/what-is-an-array-input

      CloudCannon will show a red * next to the name of your Array inputs if a value is required.

    • Keystatic
      Tested Checked
    • Pages CMS
      Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ pagescms.org/docs/configuration/content/fields

      required Marks the field as required.

      pattern Regex validation for supported field types.

      Source ↗ pagescms.org/docs/configuration/fields/number

      min Minimum value (e.g. 0). max Maximum value (e.g. 100).

      Source ↗ pagescms.org/docs/development/fields

      `generateZodSchema(fields)` walks the configured field tree.

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/fields/overview

      Within the Admin Panel, validations are executed on every change to the field, so they should be as lightweight as possible and only run when necessary.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/fields

      Required (boolean): Disable saving when the field is empty

      Regex validation (string): disable saving unless input matches a regex pattern (for example, an email address)

    • Sveltia CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/fields

      All visible fields support various validation options to ensure data integrity.

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      Shows any field validation errors in the content. When you click on an error, the corresponding field in the editor will be highlighted.

  2. At publish

    Caught at publish or at build, not while editing.

    5 products
    • Decap CMS
      Required and a regex pattern with a message are enforced. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/widgets

      required: specify as false to make a field optional; defaults to true

      pattern: add field validation by specifying a list with a regex pattern and an error message

    • EmDash
      The options rule is enforced server-side on save; live in-editor validation is not documented, and json fields are unchecked. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ docs.emdashcms.com/reference/rest-api

      VALIDATION_ERROR 400 Invalid input data

      Source ↗ docs.emdashcms.com/reference/field-types

      options — Array of allowed values (required)

      JSON fields have no validation.

    • Sanity
      Validation is enforced as a publish-time gate that blocks publishing, not as you type. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/validation

      Sanity Studio allows you to specify validation rules on your document types and fields.

      values that do not pass the validation rules are considered errors - these will block the draft from being published until they have been resolved.

    • Strapi
      Required and length rules are enforced at publish: the entry cannot be published and a red warning names the offending field. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      Drafts can be modified and saved at will, using the Save button in the Entry box on the right side of the interface, until they are ready to be published.

      Ready to publish: the entry can be published "[field name] is required", "[field name] is too short" or "[field name] is too long": the entry cannot be published because of the issue stated in the red warning message.

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      Required field Tick to prevent creating or saving an entry if the field is not filled in. Unique field Tick to prevent another field to be identical to this one. Maximum length Tick to define a maximum number of characters allowed. Minimum length Tick to define a minimum number of characters allowed.

    • TinaCMS
      A missing required value blocks save; required and fixed options are declarative, and custom rules are a validation function you write — not on reference, object or rich-text fields. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ tina.io/docs/reference/fields

      Tina allows client-side validation using a validation function,

      Restrict allowed values to the given options.

      If true , disables save while this field has no value.

      This function returns a string error message if the value is invalid or null if the field is valid .

      Not compatible with reference, object and rich-text field types

How a field pointing at another entry is edited.

  1. A picker

    A picker over the target collection.

    all 12
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/zero-integration

      Each content type gets a form built from its schema — text fields, dates, image pickers, reference selectors. Editors never touch raw Markdown.

      Schema-aware Fields, types, and validation Zero reads your Zod schema and builds a structured editor that matches exactly — required fields, enums, references to other collections, all of it. No manual configuration.

      Source ↗ zerocms.io/features/visual-content-editor

      ZeroCMS has built-in editors for text, numbers, toggles, dates, date-times, lists, objects, dropdowns, tags, image fields, and relation fields. Complex schemas and deeply nested custom objects are supported.

    • CloudCannon
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ cloudcannon.com/…/populate-a-select-input

      Using a Collection to populate your value options is useful when you want to reference pages or other content files created by team members (e.g., blogs, staff pages, or products).

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/widgets

      The relation widget allows you to reference items from another collection. It provides a search input with a list of entries.

    • EmDash
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/concepts/admin-panel

      media picker reference Entry picker Rich text fields

      Source ↗ docs.emdashcms.com/reference/field-types

      collection — Target collection slug (required)

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/fields/relationship

      The relationship field is a reference to the slug of a specific collection entry. It renders a combobox in the Admin UI.

    • Pages CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/configuration/fields/reference

      `reference` is collection-backed. It searches another configured collection and saves the selected entry value.

      collection Target collection name (e.g. authors).

      Comma-separated fields used for lookup (e.g. name,email).

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/fields/relationship

      sortOptions Define a default sorting order for the options within a Relationship field's dropdown. More details placeholder Define a custom text or function to replace the generic default placeholder appearance Set to drawer or select to change the behavior of the field. Defaults to select .

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/studio/reference-type

      In a reference field you can search for, browse and select references to other documents, or create new documents of the appropriate type in a new pane

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/fields

      Links to stories in the same space.

      Path to folder of stories (string): restrict the stories available for selection to a specific folder

    • Strapi
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/content-manager

      Relation Choose an entry from the drop-down list. See relational fields for more information.

      Also, instead of choosing an entry by scrolling the list, you can click any relational field drop-down list and type to search a specific entry.

      Relation-type fields added to a content-type allow establishing a relation with another collection type. These fields are called "relational fields".

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/fields/relation

      Radio buttons (single select) or checkboxes (multi select) for choosing related entries from another collection. If there are many entries, a dropdown with search functionality will be used instead.

    • TinaCMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ tina.io/docs/reference/types/reference

      field allows a "parent" document to connect to another document in a different collection.

      When editing in Tina, the user will be able to choose a document in the

      If you have a long list of reference items, you can filter them in the schema using the

Whether a field's editing control can be replaced with one you write.

  1. Yes
    10 products
    • Decap CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/custom-widgets

      registerWidget: registers a custom widget.

      React component that renders the control

    • EmDash
      A field's default control can be overridden with a named custom widget. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/plugins/field-kit

      Attach a widget to any `json` field by setting `widget` to `field-kit:<name>`.

    • Keystatic
      Tested Checked
    • Pages CMS
      Arbitrary custom field components are supported, but they compile into the app. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/guides/creating-custom-field

      Create a custom field when the built-in fields are not enough.

      `EditComponent` The editing UI. It receives the current value and calls `onChange` with the next value.

      Custom fields under `fields/custom/<field-type>/index.ts` or `index.tsx` are auto-registered at startup and build time.

    • Payload CMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/fields/overview

      components All Field Components can be swapped out for Custom Components that you define.

      Within the Admin Panel , fields are represented in three distinct places: Field - The actual form field rendered in the Edit View.

      To swap in Field Components with your own, use the admin.components property in your Field Config

      Using a combination of Field Validations and Custom Components , you can override the entirety of how a component functions within the Admin Panel to effectively create your own field type.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/studio/form-components-reference

      The Form Components API lets you override default form widgets with your own custom components.

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/plugins

      Use field plugins to create custom inputs in the Visual Editor.

    • Strapi
      A custom field ships any React component as its input, but cannot be registered against a relation, media, component or dynamic-zone field. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ docs.strapi.io/cms/features/custom-fields

      Relations, media, components, or dynamic zones cannot be used. String icon ( optional ) Icon for the custom field

      app.customFields.register() must pass a components object with an Input React component to use in the Content Manager's edit view.

      Source ↗ docs.strapi.io/cms/plugins-development/admin-panel-api

      Replacing the WYSIWYG The WYSIWYG editor can be replaced by taking advantage of custom fields , for instance using the CKEditor custom field plugin .

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      adding new types of fields to content-types or components. Once installed (see Marketplace documentation), custom fields are listed in the Custom tab when selecting a field for a content-type.

    • Sveltia CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/api/field-types

      A custom field type allows you to create reusable, complex input controls and previews available in the CMS interface.

      `control` (React component, required): A React class component that defines the control (input) part of the field.

    • TinaCMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ tina.io/docs/extending-tina/custom-field-components

      A custom component can be passed and rendered by setting the ui.component property on a field.

      This component completely overrides the original component, providing the user with the ability to fully customize the field.

  2. No
    2 products
    • ZeroCMS
      Every schema field gets a purpose-built built-in control; supplying a custom component for a field is not supported. Tested Source ↗ Checked
    • CloudCannon
      Twelve built-in input types, some with a choice of control (checkbox or switch, text box or range slider). Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ cloudcannon.com/…/what-are-inputs

      CloudCannon supports twelve types of inputs. Boolean — Define a true or false value using a checkbox or a switch. Code — Add a code editor. Color — Add a color using a color picker with spectrum and transparency controls. Date and Time — Define a date and/or time.

      File — Upload a file, such as an image or a document, and store the file path. Number — Add a number using a text box or a range slider. Object — Group inputs under a single Object. Array — Create a list of inputs or input groups. Select and Multiselect — Select one or more options from a predefined list.

      URL — Add a relative or absolute URL.

      Each type of input has additional configuration options.

How structures nested inside an entry are edited.

  1. As structure

    Edited as fields, at any depth.

    11 products
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/visual-content-editor

      Are nested or child components supported? Yes. The visual editor supports nesting components inside other components, and every level stays fully editable through the same visual interface.

      ZeroCMS has built-in editors for text, numbers, toggles, dates, date-times, lists, objects, dropdowns, tags, image fields, and relation fields. Complex schemas and deeply nested custom objects are supported.

      Source ↗ zerocms.io

      No matter how complex your schema, all structures and content types are supported. Your team edits visually while the structure stays rock-solid underneath.

    • CloudCannon
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ cloudcannon.com/…/what-is-an-array-input

      Array inputs can contain nested inputs of any type, including other Arrays and Objects. There is no limit to how many nested layers you can create within an Array.

      When you click on a card in the Array, it will open to show the nested inputs within that Array entry.

    • Decap CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ decapcms.org/docs/widgets

      You can choose any widget as a child of an object widget—even other objects.

      You can choose any widget as a child of a list widget—even other lists.

      a nested list of multiple widget fields to be included in each repeatable iteration

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/fields/object

      used to create complex object schemas that can contain any other fields

    • Pages CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/configuration/fields/block

      Use type: block for page-builder style sections where each item can be a different schema. Each block item is stored as an object containing the selected block type

      Block with a nested object - name : sections type : block list : true blockKey : type blocks : - name : cta fields : - name : button type : object fields : - name : label type : string - name : url type : string

      Block with a nested list - name : sections type : block list : true blockKey : type blocks : - name : faqs fields : - name : items type : object list : true fields : - name : heading type : string - name : text type : rich - text

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/fields/overview

      Here are the available Data Fields: Array - for repeating content, supports nested fields Blocks - for block-based content, supports nested fields Checkbox - saves boolean true / false values Code - renders a code editor interface that saves a string Date - renders a date picker and saves a timestamp

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/object-type

      You use it to define custom types with fields of strings, numbers, and arrays, as well as other object types.

      By default, objects will be collapsible when reaching a depth/nesting level of 3.

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/concepts/blocks

      Nestable blocks are children of other blocks. An example of a nestable block would be text, image, or hero.

    • Strapi
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      Components allow to create reusable sets of fields, that can be quickly added to content-types, dynamic zones but also nested into other components.

      Source ↗ docs.strapi.io/cms/features/content-manager

      Dynamic zones are a combination of components, which themselves are composed of several fields. Writing the content of a dynamic zone requires additional steps in order to access the fields.

      Components are a combination of several fields, which are grouped together in the edit view. Writing their content works exactly like for independent fields, but there are some specificities to components.

    • Sveltia CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/fields

      A list of items, which can be of any field type.

      Source ↗ sveltiacms.app/en/docs/fields/list

      contains a nested List field for multiple images.

      it must be nested within a type Object field, as shown in this example.

    • TinaCMS
      Objects nest: an object's fields may hold another object list, worked through three levels in the docs with the innermost items picked from templates. Vendor documentation Checked
      11 quotes from 3 sources

      Source ↗ tina.io/docs/reference/types/object

      The object field is a dynamic field type that creates a nested page in the CMS with the data it contains. This can be used to create repeated data structures or group related data in the CMS.

      fields Field[] The fields to display in the object. templates Template[] The templates to display in the object. Available when list: true.

      Using fields , the object wraps its inner fields in a sub-window. When using templates , the user can select between associated templates .

      Nested object fields This example uses both templates and fields. The featureItem objects stores an object array { headline, description, buttons } .

      The buttons element of the featureBlock array is also an object list, with 3 options to choose from (Templates).

      export const featuresTemplate : Template = { label : 'Feature Block' , name : 'featureBlock' , fields : [ { name : 'featureItem' , label : 'Feature Items' , type : 'object' , list : true , ui : { itemProps : ( item ) => { return { label : item ?. headline } ; } } } , fields : [ { name : 'headline' , label : 'Headline' , type : 'string' } ,

      { name : 'buttons' , label : 'Buttons' , list : true , type : 'object' , ui : { visualSelector : true , itemProps : ( item ) => { return { label : item ?. label } ; } , } , templates : [ actionsButtonTemplate as Template , codeButtonTemplate as Template , modalButtonTemplate as Template ] , } , ] as TinaField [ ] , } , ] , } ;

      Source ↗ tina.io/docs/editing/blocks

      We are going to use the object type , and provide a list of templates , where each "template" represents a unique block type.

      const featureBlock : Template = { name : 'features' , label : 'Features' , fields : [ { type : 'object' , label : 'Feature Items' , name : 'items' , list : true , fields : [ { type : 'string' , label : 'Title' , name : 'title' , } , { type : 'string' , label : 'Text' , name : 'text' , } , ] , } , ] , } ;

      fields : [ { type : 'object' , list : true , name : 'blocks' , label : 'Sections' , templates : [ heroBlock , featureBlock , contentBlock ] , } , ] , } , ] , } , } ) ; We have defined the structure of our 3 blocks ( content , features , hero ), as well as our main blocks field: blocks .

      Source ↗ tina.io/docs/reference/fields

      Only the following types have dedicated list UIs built into the CMS... String field type Object field type Image field type

  2. As raw text

    Editable, as raw JSON or YAML.

    1 product
    • EmDash
      Structured fields nest one level (a custom block may hold a repeater of simple inputs); deeper structure is reachable only as raw JSON in a single-line, unvalidated JSON field. Tested Checked

How a field that allows several shapes is edited.

  1. Choosable

    Adding an item offers the shapes the union allows.

    all 12
    • ZeroCMS
      Tested and documented Checked
      4 quotes from 2 sources

      Source ↗ zerocms.io/features/visual-content-editor

      Slash menu Insert any block in two keystrokes Hit / anywhere in the editor and a searchable palette opens. Scroll or type to filter.

      Headings, lists, code blocks, tables Callouts, dividers, embeds Any custom MDX component in your project Searchable — type to filter instantly

      Works with all Astro and Starlight components Visual component picker in the slash menu Prop inputs rendered as forms Imports handled automatically

      Source ↗ zerocms.io

      No matter how complex your schema, all structures and content types are supported. Your team edits visually while the structure stays rock-solid underneath.

    • CloudCannon
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-is-an-array-input

      If your Array input uses a Structure, you can select a predefined template to populate a new entry. This method allows you to have many entry templates that are as complex as you require.

      Source ↗ cloudcannon.com/…/using-structures

      The spec section names this component and tells CloudCannon where you can place this component on your site. The blueprint section defines the data your component needs and provides the default values when a new component is created.

    • Decap CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/variable-type-widgets

      Instead of defining your list fields under fields or field, define them under types.

      the name of the field that will be added to every item in list representing the name of the object widget that item belongs to

    • EmDash
      Only in rich-text fields, where the / menu picks a custom block type and each type has its own form; every custom block appears in every rich-text field, and repeater rows have no per-row type. Tested Checked
    • Keystatic
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/fields/conditional

      The conditional field is used when you need to display entirely different fields based on a condition.

      Source ↗ keystatic.com/docs/fields/blocks

      with the difference that it lets you define a separate field schema for each instance.

    • Pages CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org/docs/configuration/fields/block

      Let editors choose between multiple object shapes.

      Use `type: block` for page-builder style sections where each item can be a different schema.

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/fields/blocks

      It stores an array of objects, where each object is a “block” with its own schema. Unlike a simple array (where every item looks the same), blocks let you mix and match different content types in any order.

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/array-type

      in this example we want an array of employees to be able to contain both crew members or cast members.

      Allows configuring the insert menu for array items with the following properties:

    • Storyblok
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/concepts/fields

      Allow only specific components to be inserted (boolean): restrict blocks allowed in rich text composing (enabling this option will reveal a menu to select blocks)

      Source ↗ storyblok.com/docs/concepts/blocks

      To add blocks to any content type, open Fields and add a `Blocks` field.

    • Strapi
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/content-manager

      Click on the Add a component to [dynamic zone name] button. Choose a component available for the dynamic zone. Fill in the fields of the component.

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      Dynamic zones are a combination of components that can be added to content-types. They allow a flexible content structure as once in the Content Manager, administrators have the choice of composing and rearranging the components of the dynamic zone

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/fields/list

      With the `types` option: A type selector is shown for each item, along with the corresponding subfield editors. This configuration is called a variable type list.

    • TinaCMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/docs/reference/types/object

      When using templates , the user can select between associated templates .

      When using the templates property, your document stores each chosen template with the key,

      This visual block selector allows editors to select Templates with images as well as text.

      array is also an object list, with 3 options to choose from (Templates).

Whether earlier versions of an entry can be seen and restored.

  1. Shown and restorable
    5 products
    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/working-with-content

      View the list of previous versions with timestamps Click a revision to preview it Click Restore to revert to that version

      Restoring a revision creates a new revision with the restored content. The original revision history is preserved.

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/versions/overview

      the Admin UI will be extended with additional views that allow you to browse document versions, view diffs in order to see exactly what has changed in your documents (and when they changed), and restore documents back to prior versions easily.

    • Sanity
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/studio/compare-document-versions

      The document comparison view in Sanity Studio provides a side-by-side view of different document versions.

      Source ↗ sanity.io/docs/studio/document-actions-api

      delete duplicate discard changes restore to history state

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/manuals/history

      Storyblok's page history feature allows you to track and manage changes made to a story over time, compare different versions, and restore any previous version as needed.

    • Strapi
      A paid-tier feature that keeps versions for at most ninety days; the free edition keeps no history at all. Vendor documentation Checked
      7 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/content-history

      When restoring a version, the content of this version will override the content of the current draft version.

      Growth This feature is available with a Growth plan.

      Enterprise This feature is available with an Enterprise plan.

      Regardless of the plan, versions are kept for a maximum of 90 days, counted from the creation date of each version.

      Content History is not a permanent archive. Versions are deleted automatically: a job runs once a day, at midnight, and deletes every version older than the retention period.

      Source ↗ strapi.io/pricing-cms

      Community Free Forever Get Started Plan features Open-Source under MIT License Role Based Access Control REST & GraphQL API Powerful Content Management Infinite Customization Capabilities Unlimited Usage (Entries, API calls, etc.) Community Support

      Everything in Community, plus... Includes 3 seats (+$15/month/seat) Strapi AI NEW Live Preview Releases Content History Basic Support

  2. Shown, not restorable

    You can see earlier versions but not roll back to one.

    1 product
    • Sveltia CMS
      An in-editor History panel lists an entry's commits; the diff opens on the Git provider. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      History : Shows the commit history of the current content file. When you click on a commit, you’ll see a diff view of the changes made in that commit on your Git provider.

  3. In git only

    The history is in your repository; the product does not show it.

    6 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Tested Checked
    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      Content is stored in your Git repository alongside your code for easier versioning

    • Keystatic
      Tested Checked
    • Pages CMS
      Every save is a git commit, so history lives in git; the app shows no version list, diff or restore of its own. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs

      Save changes back to GitHub.

      Source ↗ pagescms.org/docs/configuration/settings

      update Update {path} (via Pages CMS) delete Delete {path} (via Pages CMS)

    • TinaCMS
      The history is in Git and the editor only links out to it: a configurable setting says where TinaCMS sends you to view a file's source history — GitHub's commits view in the vendor's own example. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ raw.githubusercontent.com/…/config.mdx

      Allows users to define where TinaCMS should link users to view the source history of the file they are editing.

      url: `https://github.com/tinacms/tina.io/commits/${branch}/${relativePath}`

      Source ↗ tina.io/enterprise

      Your content lives in Git, providing you full version history, safe rollback and branch-based workflows. Every change is tracked automatically, making auditing and compliance significantly easier

What happens when two people edit the same entry at once.

  1. Merged live

    Edits from several people merge as they type.

    3 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/collaboration

      Invite people to your ZeroCMS organization, share your workspace with them, and everyone can edit content simultaneously — changes sync in real time with no locking, no overwriting, no conflicts.

      Zero keeps everyone's edits in sync without any manual merging. If two people update different parts of the same entry at the same time, both changes land correctly.

    • Keystatic
      Real-time multiplayer editing is an experimental, opt-in Keystatic Cloud product. Vendor claim Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      Multi-player editing (experimental): collaborate with other editors in real-time on the same document.

      Keystatic Cloud also offers opt-in products such as Cloud Images (an image storage, optimisation and delivery service) or multi-player editing.

    • Sanity
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/content-lake/realtime-updates

      This is used for collaborative editing in our content studio, where your view of the document is updated as other people make changes.

      Source ↗ sanity.io/docs/studio/array-type

      This allows one user to edit an array item while another user simultaneously reorders the array.

  2. Locked

    The entry is locked while someone has it open.

    3 products
    • CloudCannon
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ cloudcannon.com/…/edit-your-files

      For each file, one person can edit the file while any number of people view their edits live.

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/admin/locked-documents

      If another user attempts to access the same document, they will be notified that it is currently being edited.

    • Storyblok
      Simultaneous edits raise a conflict warning; a lock feature can hold off a second editor. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/content-authoring

      When two editors edit the same story at the same time, Storyblok shows a Content Conflict warning to the second editor who tries to save after the first editor has already saved changes.

      To protect content from accidental overwrites by different editors, Storyblok provides a lock feature.

  3. Warns before overwriting

    Both can edit, and the later save is warned before it overwrites the earlier.

    1 product
    • EmDash
      Two editors can work on the same entry; the later save warns that it will overwrite the other's changes and can go ahead. Tested Checked
  4. Last save wins

    Both can edit, and the later save overwrites the earlier.

    2 products
    • Decap CMS
      Tested Checked
    • Sveltia CMS
      Multiple editors can work at once with no locking or merge handling, so a later save overwrites an earlier one. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/workflows/simple

      At this time, Sveltia CMS does not provide built-in features for handling merge conflicts or simultaneous edits.

  5. Discards unsaved edits

    Both can edit, and the first save wipes the other person's unsaved changes.

    1 product
    • Pages CMS
      Two accounts can edit one entry at once; when the first saves, the second editor's view silently reloads the committed file, discarding their unsaved edits with no notice. Tested Checked
  6. Not tested

    We did not run this. It is not a claim that the product lacks it.

    2 products
    • Strapi
      Nothing in Strapi's documentation describes what happens when two people open the same entry at once. Not tested Undated
    • TinaCMS
      Nothing describes two editors in one entry; the docs establish only that several people can save to the same repository. Not tested Undated

What happens when the content changed between you opening and saving it.

  1. Blocked

    The save is refused until you take the change.

    2 products
    • CloudCannon
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ cloudcannon.com/…/resolve-publishing-conflicts

      After CloudCannon has detected a Publishing Conflict , you cannot publish to your Publish Branch or save your files until you resolve the conflict by merging the conflicting changes in affected files or abandon the update attempt.

      CloudCannon will open the Source Editor to display the file contents and highlight the conflicted sections. CloudCannon will highlight the changes to the file from your current branch in red and the incoming changes from the Publish Branch in green.

    • Keystatic
      When the same entry changed under the editor, the save is refused and a new branch is required. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ raw.githubusercontent.com/…/updating.tsx

      This entry has been updated since it was opened. Create a new branch to save changes.

  2. Flagged

    You are told the content changed.

    2 products
    • ZeroCMS
      Tested Checked
    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/content-authoring

      When two editors edit the same story at the same time, Storyblok shows a Content Conflict warning to the second editor who tries to save after the first editor has already saved changes.

      Overwrite As Editor B you ignore the changes of Editor A and override their changes with yours.

  3. Overwrites

    Your save replaces the newer content without warning.

    3 products
    • Decap CMS
      Tested Checked
    • Payload CMS
      Tested Checked
    • Sveltia CMS
      There is no conflict detection: a baseline that moved under an open editor is neither flagged nor blocked before a save. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/workflows/simple

      At this time, Sveltia CMS does not provide built-in features for handling merge conflicts or simultaneous edits.

  4. Discards your edits

    Your unsaved changes are replaced by the newer content without warning.

    1 product
    • Pages CMS
      A commit made on GitHub while an entry is open is pulled into the editor, replacing the open content and discarding unsaved edits without notice. Tested Checked
  5. Not tested

    We did not run this. It is not a claim that the product lacks it.

    4 products
    • EmDash
      Edits save straight to the database with no staging baseline; no stale-change detection is documented. Not tested Undated
    • Sanity
      Editors share one live draft through merged real-time patches, and no separate stale-baseline warning or block is documented. Not tested Undated
    • Strapi
      Nothing in Strapi's documentation says what happens when an entry is saved under another editor's open change; releases publish the latest saved draft rather than the version added to them. Not tested Undated
    • TinaCMS
      Nothing in TinaCMS's documentation describes what happens when the branch has moved under an open editor. Not tested Undated

Whether reviewers can leave comments on the content.

  1. Threads on fields

    A thread on a field, resolvable.

    2 products
    • Sanity
      Field-level comments, resolvable; a paid feature on the Growth plan. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sanity.io/docs/studio/comments

      Leave comments on specific document fields or even single words in Portable Text,

      When a comment has been addressed or is no longer relevant, you can mark it as resolved.

      this is a paid feature this feature is available in the growth plan

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/visual-editor

      Every field in the Visual Editor has a comment button, which opens a new discussion. To add a comment, select Start a discussion next to the field.

      Select a comment to read, reply, or resolve. The Resolved tab lists all resolved comments chronologically.

  2. No

    Email.

    8 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ cloudcannon.com/…/review-and-merge-a-pull-request

      Reviewing the Pull Request , including viewing the diff, leaving comments, and approving, happens on your Git Provider , not in CloudCannon.

      Source ↗ cloudcannon.com/…/editing-sessions-and-collaboration

      CloudCannon makes it easy to collaborate with your team. When someone opens a file, you'll see their avatar appear in the Editing Interface Header and over File Cards in the Collection Browser .

      One person can edit a file at a time, while others can view the changes in real time. This means you can see what your teammate is editing as they make changes, which is great for reviewing content together or learning how to use CloudCannon.

      Source ↗ cloudcannon.com/…/save-your-changes

      Clicking the Save button will open the Review changes modal and provide a comprehensive list of the unsaved changes to your site.

      Source ↗ cloudcannon.com/…/what-is-the-publishing-page

      On this page The Summary tab The Changes tab The Commits tab

    • Decap CMS
      Tested Checked
    • EmDash
      Tested Checked
    • Keystatic
      Tested Checked
    • Pages CMS
      In-content comments are an announced but unreleased feature. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Comments Soon Let your team leave inline comments on any part of your content.

    • Payload CMS
      Tested Checked
    • TinaCMS
      Vendor documentation Checked
      9 quotes from 4 sources

      Source ↗ tina.io/editorial-workflow

      Editorial Workflow Review, approve, and manage content changes with version control

      Branching Create content on new branches without going to GitHub. Protect Branches Prevent editing on specific branches.

      Merge With Confidence A Pull Request is automatically created when a content editor creates a new branch. This also allows teams to ensure that their CI/CD workflow all passes before merging content into production.

      Shareable Previews Easily get to your preview on Netlify, Vercel, AWS, etc. This allows editors to easily share their site preview with other stakeholders.

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub. After the pull request is successfully merged, the updated content will be available on the protected branch.

      to view the pull request on GitHub. This will open a new tab in your browser.

      On This Page Setting Up Accessing CMS and Saving to Protected Branches Publishing Content Media in the Editorial Workflow GitHub Pull Request links Preview links

      Source ↗ tina.io/docs/tinacloud

      TinaCloud provides: A hosted GraphQL endpoint for your content, Git integration User management Editorial Workflow features

      Source ↗ tina.io/pricing

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects

  3. Not tested

    We did not run this. It is not a claim that the product lacks it.

    2 products
    • Strapi
      Strapi documents review workflows and per-entry assignees, but nothing on its pages says whether an editor can leave a comment on an entry. Not tested Undated
    • Sveltia CMS
      Not tested Undated

How translations of the same entry are handled.

  1. Translation workflow

    Linked locales, plus tracking of what still needs translating.

    1 product
    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/internationalization

      By default, publishing a story publishes all language versions simultaneously. To publish individual versions, open Settings → Internationalization and select Enable Individual Translation Publishing.

      Specify a fallback language for untranslated fields using the `fallback_lang` parameter

  2. Linked locales

    The product knows one entry is a translation of another.

    6 products
    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/i18n

      The CMS can provide a side by side interface for authoring content in multiple languages

    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/internationalization

      Each translation is a full, independent content entry with its own slug, status, and revision history.

      the new entry is pre-filled with data from the source locale and assigned a default slug of {source-slug}-{locale}

    • Payload CMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/configuration/localization

      With the above configuration, the title field will now be saved in the database as an object of all locales instead of a single string. All field types with a name property support the localized property—even the more complex field types like array s and block s.

      This means that you can determine what locales are visible in the localizer selection menu at the top of the admin panel.

      fallback Boolean enabling "fallback" locale functionality. If a document is requested in a locale, but a field does not have a localized value corresponding to the requested locale, then if this property is enabled, the document will automatically fall back to the fallback locale value.

      Payload allows you to localize the status field for draft enabled collections and globals. This lets you manage publication status independently for each locale, ensures the admin UI always shows the status for the selected locale, and unpublish content in a single locale.

    • Sanity
      Localization stores a language field; the recommended document-internationalization plugin relates translations as references. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/localization

      Localization in Sanity is performed by storing language data as a value of a field in a document.

      for translated documents, we recommend the @sanity/document-internationalization plugin, which will relate translations as references and handle setting a language field

    • Strapi
      Each locale publishes on its own, and only one can be edited at a time. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/internationalization

      The Internationalization feature allows to manage content in different languages, called

      In the Content Manager , when the Internationalization feature is enabled for the content-type, a locale drop-down list is added to the top right of the edit view and allows to switch locales.

      Click on the Fill in from another locale button, in the top right corner, for all fields (including relations) to be filled up with the values of another chosen locale.

      Content can only be managed one locale at the time. It is not possible to edit or publish content for several locales at the same time (e.g. Clicking on the Publish button will only publish the content for the locale you are currently working on).

    • Sveltia CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/i18n

      When you create or edit an entry in one locale, you can easily switch to another locale and provide the translated content. The CMS automatically links the translations together based on the i18n configuration.

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      If there are any errors or missing translations, they will be indicated in the switcher.

      A Copy button is available to copy content from one language version to another

  3. Untracked

    Translations are just separate entries.

    5 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      The tool their docs pair with CloudCannon translates tagged strings in the finished site as a postbuild step, not entries. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-is-internationalization

      CloudCannon supports internationalization and multilingual websites. You can add multiple languages to any static site hosted on CloudCannon — either by using your Static Site Generator

      's (SSG's) built-in i18n features, or by adding a dedicated tool to your build pipeline.

      Astro includes built-in i18n routing from v3.5. You can configure supported locales in astro.config.mjs and use Astro's routing to serve localized content from language-specific directory structures.

      Rosey works with any SSG — you tag translatable HTML elements with data-rosey attributes, and Rosey generates complete locale-specific versions of your site from JSON translation files at build time.

      Source ↗ cloudcannon.com/…/what-is-rosey

      Finally, Rosey runs as a postbuild step on CloudCannon, generating a localized version of your Site for each locale.

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • TinaCMS
      Under directory-based localization, a second locale is a separate document whose filename puts it in a locale sub-folder; nothing ties the copies together. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ tina.io/docs/guides/internationalization

      Managing multilingual content is essential for global reach. TinaCMS provides versatile options to facilitate this. This guide focuses on two main strategies: Directory-Based Localization Field-Based Localization

      With this setup, editors will browse locales for each collection via the document list.

      If a user wants to create a new localized version of an existing document, they can click

      from the document list, and prepend the desired locale in the new document

      Source ↗ tina.io/docs/guides/nextjs-internationalization

      Here at Tina, we are still working on our built-in solution for internationalizing your website. However, for those users that need a simple solution and are willing to navigate a few hurdles, we do have a potential workaround utilizing content sub-folders.

      want to create three versions in our post collection by modifying the filename field to include each locale as a sub-folder

Automated checks the product runs over content.

  1. SEOaccessibilityreadabilitywriting stylebroken linksbroken contentcontent consistencyGEO
    1 product
    • ZeroCMS
      The audits cover content-level issues an editor can fix, not a WCAG or Lighthouse audit of your templates. Tested and documented Checked
      10 quotes from 1 source

      Source ↗ zerocms.io/features/audits-and-checks

      ZeroCMS ships with eight built-in content audits covering SEO, GEO, readability, broken links, and more.

      SEO Checks meta descriptions, title quality, heading hierarchy, image alt text, thin content, and internal linking

      the on-page factors your editors can actually control.

      Accessibility Flags content-level WCAG 2.1 AA issues: missing alt text, unclear link labels, tables without headers

      Readability Catches issues with sentence complexity, paragraph density, passive voice overuse

      Writing style Flags writing that reads as AI-generated: generic phrasing, inflated vocabulary

      Broken links Verifies that internal links, image references, anchor targets, and external URLs actually resolve

      Broken content Catches content that is clearly incomplete, placeholder-only, or malformed

      Content consistency Compares an entry against its collection peers and flags deviations

      GEO Audits content for Generative Engine Optimization

  2. Nothing
    11 products
    • CloudCannon
      Tested Checked
    • Decap CMS
      Tested Checked
    • EmDash
      An SEO panel sets title, description and OG fields but does not score or lint content. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/querying-content

      editors can set an SEO title, meta description, OG image, canonical URL, and a "hide from search engines" (noindex) toggle in the admin's SEO panel.

    • Keystatic
      Tested Checked
    • Pages CMS
      Pages CMS validates individual fields but ships no content checks such as SEO, readability or broken links. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/configuration/content/fields

      pattern Regex validation for supported field types.

    • Payload CMS
      Tested Checked
    • Sanity
      Beyond schema field validation, there are no built-in content audits such as SEO, readability or link checks. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/studio/validation

      Each schema type has a set of built-in validation methods.

    • Storyblok
      Beyond schema field validation, there are no built-in content audits; SEO is a separate app. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/concepts/fields

      Required (boolean): Disable saving when the field is empty

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      The AI SEO app helps you generate SEO tags for your application using AI.

    • Strapi
      Strapi ships no SEO tooling of its own: the original strapi-plugin-seo repository was archived and SEO analysis now comes from a community fork, and Strapi does not generate sitemaps natively. Vendor documentation Checked
      8 quotes from 3 sources

      Source ↗ strapi.io/blog/strapi-seo-plugins

      SEO becomes your responsibility, and without the right tooling, it becomes a manual grind.

      Strapi SEO plugins help by giving editors an Admin Panel UI for managing SEO metadata without touching code.

      The @strapi-community/plugin-seo package provides meta tag management, SERP previews, social previews, and SEO analysis directly in the Strapi Admin Panel.

      The correct package for Strapi 5 is @strapi-community/plugin-seo . The original strapi-plugin-seo repository was archived, and the maintained package for current Strapi 5 projects is the community fork.

      generate sitemaps natively since it has no awareness of your front-end URL structure. Two Strapi plugins solve this with different approaches.

      Source ↗ docs.strapi.io/…/installing-plugins-via-marketplace

      Strapi comes with built-in plugins such as Documentation , GraphQL , and Sentry .

      Source ↗ docs.strapi.io/cms/features/review-workflows

      Features API Tokens Admin tokens Audit Logs Content History Custom Fields Data Management

      MCP server Preview Role-Based Access Control (RBAC) Releases Review Workflows Single Sign-On (SSO)

    • Sveltia CMS
      Sveltia validates individual fields but ships no content checks such as SEO, readability or broken links. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/fields

      All visible fields support various validation options to ensure data integrity.

    • TinaCMS
      They publish an AI content-freshness audit, but it runs as a GitHub Action and raises issues rather than holding anything. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ tina.io/docs/guides/content-auditing-github-actions

      This guide contains instructions to setup a GitHub Actions Workflow to check for outdated content using AI and raise GitHub Issues.

      setting up the GitHub action for your own project you should be able to see a new workflow called Audit Content with AI in the GitHub Actions for your repo. Run it to perform your first content audit.

      The flow will output a list of Issues after the content audit is finished. Each Issue will contain a list of suggestions for the content and a handy link to the file that needs to be changed.

Whether a failed check blocks publishing.

  1. Your choice

    You decide which checks block.

    1 product
    • ZeroCMS
      An admin can make checks automatic pre-publish rather than on-demand; warnings can be overridden, errors must be addressed or dismissed. Tested Source ↗ Checked
  2. Does not apply
    11 products
    • CloudCannon
      Does not apply
    • Decap CMS
      Does not apply
    • EmDash
      Does not apply
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply
    • Sveltia CMS
      Does not apply
    • TinaCMS
      Does not apply

Whether you can add checks of your own.

  1. In plain language

    You write your own checks as written instructions.

    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/features/audits-and-checks

      A custom audit is a skill written in plain language.

      Custom skills can enforce any rule you can describe

      They're defined as prompts with access to the full content and rendered output.

  2. Does not apply
    11 products
    • CloudCannon
      Does not apply
    • Decap CMS
      Does not apply
    • EmDash
      Does not apply
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply
    • Sveltia CMS
      Does not apply
    • TinaCMS
      Does not apply

How much of the site a single check can look at.

  1. The whole site

    A check sees the whole site.

    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/features/audits-and-checks

      Open the Issues panel and run audits against the current file or all changes.

      Every audit ships enabled by default and works across all your content collections. You can easily turn off audits that are not relevant to your site.

      Content consistency Compares an entry against its collection peers and flags deviations

  2. Does not apply
    11 products
    • CloudCannon
      Does not apply
    • Decap CMS
      Does not apply
    • EmDash
      Does not apply
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply
    • Sveltia CMS
      Does not apply
    • TinaCMS
      Does not apply

What renders the page the editor sees.

  1. You implement it

    You build the preview yourself.

    4 products
    • Payload CMS
      Payload ships React and Vue helpers for the live-preview bridge; an Astro site wires up the subscription itself. Vendor documentation Checked
      8 quotes from 2 sources

      Source ↗ payloadcms.com/docs/live-preview/overview

      The url property resolves to a string that points to your front-end application. This value is used as the src attribute of the iframe rendering your front-end.

      These events are emitted every time a change is made to the Document. Your app then listens for these events and re-renders itself with the data it receives.

      Source ↗ payloadcms.com/docs/live-preview/client

      No matter what front-end framework you are using, you can build your own hook using the same underlying tooling that Payload provides.

      If your front-end application is built with React or Vue , use the useLivePreview hooks that Payload provides.

      First, install the @payloadcms/live-preview-react package

      First, install the @payloadcms/live-preview-vue package

      subscribe Subscribes to the Admin Panel's window.postMessage events and calls the provided callback function.

      In the future, all other major frameworks like Svelte will be officially supported.

    • Sanity
      The Presentation tool loads the customer's own frontend app in an iframe with visual-editing overlays; the customer builds, hosts and sets the preview URL. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/…/configuring-the-presentation-tool

      The Presentation Tool is a Sanity Studio plugin that renders your frontend application inside an iframe, giving content editors a live preview with click-to-edit functionality.

      Source ↗ sanity.io/docs/visual-editing/astro-visual-editing

      for production, youd add your deployed frontend url as well.

    • Storyblok
      The visual editor loads the customer's own site in an iframe with the Storyblok Bridge for live editing; the customer builds, hosts and points at the preview URL. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ storyblok.com/docs/concepts/visual-editor

      The Visual Editor loads your webpage in an iframe. To view it, open Settings → Visual Editor and define a Preview URL.

      The @storyblok/preview-bridge handles most of the heavy lifting required for live editing.

      Source ↗ storyblok.com/docs/guides/astro/visual-preview

      Go to Settings → Visual Editor and set the default environment to the URL of the local development server.

    • Strapi
      The preview link points at a route on your own front end, and the documented example implementation is Next.js, with a pointer to Nuxt's own preview docs. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/preview

      With the Preview feature, you can preview your front end application directly from Strapi's admin panel.

      Setting up the front-end preview route is highly dependent on the framework used for your front-end application.

      For instance, Next.js draft mode and Nuxt preview mode provide additional documentation on how to implement the front-end part in their respective documentations.

      If using Next.js, a basic implementation could be like in the following example taken from the Launchpad Strapi demo application:

  2. The CMS renders it

    The CMS draws the page with its own renderer, not your site's code.

    2 products
    • Decap CMS
      The preview is Decap's own render, not the built Astro site, so Astro components and layouts are not reflected. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/customization

      Registers a template for a folder collection or an individual file in a file collection.

      Source ↗ decapcms.org/docs/architecture

      The preview component is responsible for displaying the value with the appropriate styling.

    • Sveltia CMS
      The preview is Sveltia's own render of the entry, not the built Astro site, so Astro components and layouts are not reflected. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/api/field-types

      preview (React component, optional): A React class component that defines how the field’s value is previewed in the CMS preview pane.

  3. A server you run

    Your own server renders the page, through a route they supply.

    2 products
    • EmDash
      EmDash supplies the preview middleware; the customer's own Astro SSR deployment renders the draft on each request. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/preview

      Your template code calls getEmDashEntry() as normal — draft content is served automatically

      the middleware verifies the token and the query functions read it through AsyncLocalStorage , so the same template code serves draft content during a preview and published content otherwise.

    • TinaCMS
      Your own Astro server re-renders the preview at request time, and only sections wrapped in a TinaIsland refresh as you type. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      The helper enforces same-origin POST with the Tina-preview content-type, renders the registered component via Astro's container API, and wraps the output in the registered wrapper element — matching the page-side <TinaIsland> so the bridge can swap it in.

      You need an SSR adapter. The per-island refresh endpoint (/tina-island/[name]) runs at request time on every keystroke.

  4. No preview
    2 products
    • Keystatic
      previewUrl opens draft mode, but a save to main is already live and a branch save ships only by merging in GitHub. Tested Checked
    • Pages CMS
      The editor never shows the rendered site; the flow goes from editing straight to a commit. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs

      Edit content in the UI. Save changes back to GitHub.

      Source ↗ pagescms.org/docs/configuration/fields/rich-text

      Show or hide the `Editor` / `Source` mode switch. Defaults to `true`.

  5. Astro build output

    Your real Astro build, served once it finishes.

    1 product
    • CloudCannon
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ cloudcannon.com/…/confirm-your-output-urls

      These output files are what your website visitors will see on the Internet and what CloudCannon uses as the interactive webpage in the Visual Editor

  6. Astro dev server

    Your real Astro site, running as it does in development.

    1 product
    • ZeroCMS
      Tested and documented Checked
      1 quote from 1 source

      Source ↗ zerocms.io/features/live-preview

      The preview runs on Astro's actual dev server with HMR, and updates almost instantly as you type.

How your changes reach the preview.

  1. Re-rendered in the browser

    The changed region renders again in the page, not on a server.

    3 products
    • CloudCannon
      The changed region renders again, without saving — but in the browser, so components must be registered and must run client-side. Vendor documentation Checked
      4 quotes from 4 sources

      Source ↗ cloudcannon.com/…/an-overview-of-editable-regions

      CloudCannon will re-render that section of your webpage to keep the preview up to date.

      Source ↗ cloudcannon.com/…/visually-edit-components

      Registering your components tells CloudCannon that those components should be bundled for client side use in the Visual Editor.

      Source ↗ cloudcannon.com/…/component-templating

      Since Bookshop renders your components in the browser, any functions or packages that you use must be able to run in a browser.

      Source ↗ cloudcannon.com/…/what-is-the-visual-editor

      With the Visual Editor, you can instantly see what your content updates will look like live; the Visual Editor will automatically re-render to show you an accurate preview without needing to save your changes.

    • Decap CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ decapcms.org/docs/customization

      registerPreviewTemplate: Register a template for a collection.

      A React component that renders the collection data.

      Seven props will be passed to your component during render

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/api/field-types

      preview (React component, optional): A React class component that defines how the field’s value is previewed in the CMS preview pane.

  2. Hot reload

    The framework's own hot module reload.

    1 product
    • ZeroCMS
      Tested Checked
  3. Region re-render

    Only the changed region is rendered again.

    1 product
    • TinaCMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      Each editable region in the page is wrapped in <TinaIsland>, which emits a <… data-tina-island="/tina-island/<name>?<params>"> marker. On every store update, the bridge POSTs the current overlay to that endpoint.

      Wrap every editable region in <TinaIsland> with a registered island — that's both how the bridge re-renders regions and how the bootstrap gets onto the page.

  4. Does not apply
    6 products
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply
  5. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • EmDash
      Not tested Undated

What makes the preview update.

  1. As you type
    5 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-is-the-visual-editor

      With the Visual Editor, you can instantly see what your content updates will look like live; the Visual Editor will automatically re-render to show you an accurate preview without needing to save your changes.

      Source ↗ cloudcannon.com/…/what-is-visual-editing

      When you change the value of an Input in the sidebar, the preview of your webpage in the Visual Editor will immediately update to match the new value.

    • EmDash
      Tested Checked
    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      This helps you see how your content will look as you write

    • TinaCMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ tina.io/docs/contextual-editing/astro

      The bridge POSTs to /tina-island/<name> on every keystroke. One dynamic route, plus experimental_createIslandRoute(), handles every entry in the registry:

      As the editor types, the admin posts updateData back to the iframe. The bridge stores it.

  2. On save
    1 product
    • Decap CMS
      Tested Checked
  3. Does not apply
    6 products
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply

How long a change takes to appear in the preview.

  1. Under ten seconds
    6 products
    • ZeroCMS
      Tested and documented Checked
      1 quote from 1 source

      Source ↗ zerocms.io/features/live-preview

      Typically, only a few seconds from keystroke to a visible change, through Astro's Vite-powered HMR. Very large sites (500+ pages) may see a slightly higher latency.

    • CloudCannon
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-is-the-visual-editor

      With the Visual Editor, you can instantly see what your content updates will look like live; the Visual Editor will automatically re-render to show you an accurate preview without needing to save your changes.

      Source ↗ cloudcannon.com/…/what-is-visual-editing

      When you change the value of an Input in the sidebar, the preview of your webpage in the Visual Editor will immediately update to match the new value.

    • Decap CMS
      No latency figure is published; the preview is described as real-time. Vendor claim Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      rich-text editing, real-time preview, and drag-and-drop media uploads.

    • EmDash
      Tested Checked
    • Sveltia CMS
      The pane shows a real-time preview as you type; no latency figure is published. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      Developers can enhance the content editing experience by providing real-time previews of how the content will appear on the live site.

      This helps you see how your content will look as you write

    • TinaCMS
      The docs say field changes appear in the preview as you type: each update is POSTed to an endpoint that re-renders the matching Astro component and swaps the HTML into the live DOM. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ tina.io/…/astro-react-free-visual-editing

      You should see: Field changes appear in the public preview as you type.

      Source ↗ tina.io/docs/contextual-editing/astro

      As the editor types, the admin posts updateData back to the iframe. The bridge stores it.

      On every store update, the bridge POSTs the current overlay to that endpoint. The endpoint re-renders the matching Astro component against the overlay data and returns an HTML fragment. The bridge swaps it into the live DOM.

  2. Does not apply
    6 products
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
    • Payload CMS
      Does not apply
    • Sanity
      Does not apply
    • Storyblok
      Does not apply
    • Strapi
      Does not apply

Whether a preview can be shared and opened without an account.

  1. Yes
    5 products
    • ZeroCMS
      Tested and documented Checked
      1 quote from 1 source

      Source ↗ zerocms.io/features/live-preview

      Send a private link to a stakeholder and they see the live site in their browser. No account or login needed.

    • CloudCannon
      Every site gets a free .cloudvent.net testing domain, which can be password-protected. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ cloudcannon.com/…/what-is-a-testing-domain

      A Testing Domain is a free .cloudvent.net URL that CloudCannon assigns to every Site.

      To stop serving content on your Testing Domain, you can set a password to prevent unauthorized visitors

      Choosing your Testing Domain improves your branding if you are sharing the URL outside of your Organization (e.g., sending a test Site to a client).

    • Decap CMS
      Tested Checked
    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/preview

      Preview links use HMAC-SHA256 signed tokens that you can share with reviewers without exposing your entire draft content.

    • TinaCMS
      The shared link is a branch deploy on your own host (Netlify, Vercel, AWS), returned by a previewUrl function you add to your config. Vendor claim Checked
      3 quotes from 2 sources

      Source ↗ tina.io/editorial-workflow

      Shareable Previews Easily get to your preview on Netlify, Vercel, AWS, etc. This allows editors to easily share their site preview with other stakeholders.

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      You can setup preview links for your pull requests. This will allow you to preview your content changes before merging them into the protected branch.

      In your config file add a previewUrl function to the ui object. This function will receive the branch name as an argument and should return the preview url for that branch.

  2. No
    3 products
    • Payload CMS
      Both preview surfaces are Admin Panel surfaces, and Payload documents no public share link; its draft-preview route authenticates the user. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ payloadcms.com/docs/live-preview/overview

      With Live Preview you can render your front-end application directly within the Admin Panel . As you type, your changes take effect in real-time. No need to save a draft or publish your changes.

      Live Preview works by rendering an iframe on the page that loads your front-end application. The Admin Panel communicates with your app through window.postMessage events.

      Source ↗ payloadcms.com/docs/admin/preview

      Preview is a feature that allows you to generate a direct link to your front-end application. When enabled, a "preview" button will appear on the Edit View within the Admin Panel with an href pointing to the URL you provide.

      Then, create an API route that verifies the preview secret, authenticates the user, and enters draft mode

    • Strapi
      The "Copy preview link" button copies the admin-panel preview URL, which needs an admin login and content-manager read permission; the front-end route is one you implement yourself. Vendor documentation Checked
      6 quotes from 4 sources

      Source ↗ docs.strapi.io/cms/features/preview

      click the link icon in the upper right corner to copy the preview link. Depending on the preview tab you are currently viewing, this will either copy the link to the preview of the draft or the published version.

      Clicking it will display the preview of your content as it will appear in your front-end application, but directly within Strapi's the admin panel.

      Setting up the front-end preview route is highly dependent on the framework used for your front-end application. For instance, Next.js draft mode and Nuxt preview mode provide additional documentation on how to implement the front-end part in their respective documentations.

      Source ↗ raw.githubusercontent.com/…/PreviewHeader.tsx

      const { copy } = useClipboard(); const handleCopyLink = () => { copy(window.location.href); toggleNotification({ message: formatMessage({ id: 'content-manager.preview.copy.success', defaultMessage: 'Copied preview link', }),

      Source ↗ raw.githubusercontent.com/…/routes.tsx

      const routes: RouteObject[] = [ { path: ':collectionType/:slug/:id/preview', Component: ProtectedPreviewPage, }, { path: ':collectionType/:slug/preview', Component: ProtectedPreviewPage, }, ];

      Source ↗ raw.githubusercontent.com/…/Preview.tsx

      const ProtectedPreviewPageImpl = () => { const { slug: model } = useParams<{ slug: string; }>(); const { permissions = [], isLoading, error, } = useRBAC([ { action: 'plugin::content-manager.explorer.read', subject: model },

    • Sveltia CMS
      The preview is a pane inside the signed-in editor; the only shareable link is a deploy preview built by the Git host's CI on the pull request. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      the Content Editor interface will split into two panes. By default, the Edit Pane is displayed on the left side, while the Preview Pane is on the right.

      Source ↗ sveltiacms.app/en/docs/workflows/deploy-previews

      an unpublished entry links to the deploy preview built for its pull request, so you can see a draft before it goes live.

  3. Does not apply
    2 products
    • Keystatic
      Does not apply
    • Pages CMS
      Does not apply
  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    2 products
    • Sanity
      The previewed page is the customer's own hosted site, so whether it opens without a login depends on their deployment, not on Sanity. Not tested Undated
    • Storyblok
      Not tested Undated

A media library allows users to upload, browse, and select images and videos.

  1. ImagesDocumentsVideo
    10 products
    • CloudCannon
      There is no video-specific input or preview: video goes through the generic File input and File Browser, and their docs steer large files to external storage. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/documentation/user-articles/add-a-file

      Although you can upload videos this way, we recommend using external storage to prevent large files from affecting the size of your Git repository.

      File inputs in the sidebar of the Visual or Content Editor, or in the Data Editor, allow you to select a file from your local computer or browse existing files stored in your repository or a remote DAM.

      Source ↗ cloudcannon.com/…/the-file-browser

      The File browser shows you all the folders and files in your Site, with each file represented by a Card. These file Cards will show:

      The filename. An icon based on the file extension. Some metadata associated with that file (e.g., date created, last updated, and file size). A preview, if the file is an image.

      Source ↗ cloudcannon.com/…/what-is-a-file-input

      There are three types of File input: File Document Image

    • Decap CMS
      The image widget handles images; the file widget uploads any other file type into the same media library. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/widgets

      The file widget allows editors to upload a file or select an existing one from the media library.

      The image widget allows editors to upload an image or select an existing one from the media library.

    • EmDash
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/guides/media-library

      EmDash includes a media library for managing images, documents, and other files.

      Source ↗ docs.emdashcms.com/deployment/storage

      EmDash stores uploaded media (images, documents, videos) in a configurable storage backend.

    • Pages CMS
      The file field takes any type — documents, video, audio — not images alone. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/media

      categories Category-based extension sets. Values: image, document, video, audio, compressed, code, font, spreadsheet.

      Source ↗ pagescms.org/docs/configuration/fields/file

      Use for PDFs, ZIPs, docs, audio, and similar files.

    • Payload CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/docs/upload/overview

      that contains images for use throughout your site or app Building a Gated Content library where users need to sign up to gain access to downloadable assets like ebook PDFs, whitepapers, etc. Storing publicly available, downloadable assets like software, ZIP files, MP4s, etc.

      Some example values are: image/* , audio/* , video/* , image/png , application/pdf

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/assets

      Image assets: For many kinds of images including JPG, PNG, WebP, SVG, TIFF, GIF, HEIF, AVIF

      File assets: For all other file types such as PDFs, audio files, videos, documents, and archives.

    • Storyblok
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/assets

      Image: `image/x-png`, `image/png`, `image/gif`, `image/jpeg`, `image/avif`, `image/svg+xml`, `image/webp`

      Video: `video/*`, `application/mp4`, `application/x-mpegurl`, `application/vnd.apple.mpegurl`, `audio/webm`

      Text: `application/msword`, `text/plain`, `application/pdf`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`

    • Strapi
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/media-library

      The Media Library is the Strapi feature that displays all assets uploaded in the Strapi application and allows users to manage them.

      List of media types and extensions supported by the Media Library Media type Supported extensions Image - JPEG - PNG - GIF - SVG - TIFF - ICO - DVU Video - MPEG - MP4 - MOV (Quicktime) - WMV - AVI - FLV Audio - MP3 - WAV - OGG File - CSV - ZIP - PDF - XLS, XLSX - JSON

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/ui/asset-library

      Sveltia CMS’s Asset Library allows you to efficiently manage and organize your media files, including images, videos, and documents.

    • TinaCMS
      Repo-based media cannot be renamed through the Media Manager or replaced in place, and there is no Git LFS support. Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ tina.io/docs/reference/media/repo-based

      The following file types are supported by default: Format MIME Type Examples Adobe InDesign application/x-indesign .indd Apple HTTP Live Streaming application/vnd.apple.mpegurl .m3u8 Binary File application/octet-stream .bin

      Images image/* .jpg, .png, .gif, etc. JSON application/json .json

      Videos video/* .mp4, .avi, .mkv, etc.

      MPEG-DASH application/dash+xml .mpd PDF application/pdf .pdf Polygon File Format model/ply .ply

      Microsoft Word (Legacy) application/msword .doc Microsoft Word (OpenXML) application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx

      Images cannot be altered in place. Once uploaded, subsequent changes to an asset are not reflected, so upload a new file instead.

      Repo-based media does not support renaming files through the Media Manager — the UI has no rename action today.

      Source ↗ tina.io/docs/reference/types/image

      Images can be uploaded to the image component with drag-and-drop actions, or with the dedicated media manager that comes with the CMS.

      Source ↗ tina.io/docs/faq

      Do you support Git LFS? Unfortunately we do not support Git LFS at this time due to limitations with the GitHub API.

  2. ImagesDocuments
    1 product
    • Keystatic
      Core has per-field image and file pickers; a browsable image library exists only in Keystatic Cloud. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ keystatic.com/docs/fields/image

      In the Admin UI it renders an image picker component

      Source ↗ keystatic.com/docs/fields/file

      In the Admin UI it renders a file picker component.

      Source ↗ keystatic.com/docs/cloud

      Each Keystatic Cloud project can have its own Image Library, where you can upload images and copy the URL to use in your content.

  3. ImagesVideo
    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/media-library

      Upload images and videos and search across everything — with inline previews and smart defaults that automatically put files in the right folder.

      Search by name across all images and videos on the site, and see results with thumbnails and file paths.

      Source ↗ zerocms.io/features/file-browser

      No. ZeroCMS only allows editors to access content files, images, and videos. This prevents anyone from accidentally touching code files or breaking the build.

Storage locations for uploaded media files.

  1. Your bucket
    Your bucket
    Held in object storage you own.
    2 products
    • EmDash
      Uploads go to a storage backend the customer configures, including the local filesystem. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.emdashcms.com/deployment/storage

      The S3 adapter works with Cloudflare R2 (via S3 API), MinIO, and other S3-compatible services.

      Use R2 bindings when deploying to Cloudflare Workers for the fastest integration.

      Use local storage for development. Files are stored in a directory on disk.

    • Payload CMS
      Files land on your own server by default, or in a bucket you own through an official storage adapter. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ payloadcms.com/docs/upload/storage-adapters

      Payload offers additional storage adapters to handle file uploads. These adapters allow you to store files in different locations, such as Amazon S3, Vercel Blob Storage, Google Cloud Storage, and more.

      Service Package Vercel Blob @payloadcms/storage-vercel-blob AWS S3 @payloadcms/storage-s3 Azure @payloadcms/storage-azure Google Cloud Storage @payloadcms/storage-gcs Uploadthing @payloadcms/storage-uploadthing R2 @payloadcms/storage-r2 Vercel Blob Storage @payloadcms/storage-vercel-blob Installation

      Source ↗ payloadcms.com/docs/upload/overview

      staticDir The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. Defaults to your collection slug

      You can prevent Payload from writing files to disk by specifying disableLocalStorage: true on your

  2. Your repositoryYour bucketThird-party DAM
    Your repository
    Committed alongside the content.
    Your bucket
    Held in object storage you own.
    Third-party DAM
    Held in a separate asset manager.
    2 products
    • CloudCannon
      The repository is the default, and their own documentation warns against keeping large assets there. Vendor documentation Checked
      6 quotes from 3 sources

      Source ↗ cloudcannon.com/documentation/user-articles/add-a-file

      the Choose your file destination modal will prompt you to select either your DAM or Site files . Click Confirm destination . If you do not have a DAM, CloudCannon will upload your file to your Site files

      Although you can upload videos this way, we recommend using external storage to prevent large files from affecting the size of your Git repository.

      Source ↗ cloudcannon.com/…/what-is-a-file-input

      The Image input provides an editing interface for uploading image files to your repository or DAM and browsing existing assets.

      Source ↗ cloudcannon.com/…/introduction-to-assets-and-dams

      CloudCannon integrates with several DAM providers to store your images and documents outside your Git repository. Your editors can upload and select assets from any editing interface, and the DAM serves them from a CDN.

      Creating an Azure DAM Creating a Cloudflare R2 DAM Creating a Cloudinary DAM Creating a DigitalOcean Spaces DAM Creating a Google Cloud Storage DAM Creating an S3 DAM Creating a Tenovos DAM

      can become an issue, as most Git Repositories have a maximum storage amount, and larger Repositories have slower

    • Sveltia CMS
      Uploads commit to the repository by default; S3-compatible buckets you own and DAMs like Cloudinary or Uploadcare are alternatives. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/media

      the built-in internal media storage that saves files directly in your Git repository

      Sveltia CMS currently supports the following external media storage providers: Amazon S3 and S3-compatible providers: Backblaze B2 Cloudflare R2 DigitalOcean Spaces Scaleway Object Storage Supabase Storage Azure Blob Storage Cloudinary Uploadcare

  3. Your repository
    Your repository
    Committed alongside the content.
    2 products
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 3 sources

      Source ↗ zerocms.io/features/media-library

      No S3 bucket to configure, no separate media service to log into. Your images and videos live in your repo alongside your content.

      Source ↗ zerocms.io/features/zero-integration

      Every change an editor makes is committed directly to your repo, whether it's Markdown, MDX, or images. All content remains in Git, just like your code.

      Source ↗ zerocms.io/features/visual-content-editor

      No S3 buckets to configure, no upload dashboards to navigate. The image lands in Git like everything else.

    • Pages CMS
      Uploads are committed to the repository; external buckets (S3, R2) are an announced but unreleased feature. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/media

      input * Repository path where files are stored (e.g. src/media).

      Source ↗ pagescms.org

      File storage Soon Connect with AWS S3, Cloudflare R2, and more.

  4. Vendor CDN
    Vendor CDN
    Held and served by the vendor.
    2 products
    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/apis-and-sdks/asset-cdn

      Sanity offers a global content delivery network (CDN) for serving assets, at cdn.sanity.io.

      These assets can only be accessed by clients via our asset CDN

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/concepts/assets

      Storyblok delivers all assets via AWS CloudFront CDN .

  5. Your repositoryVendor CDNYour bucketThird-party DAM
    Your repository
    Committed alongside the content.
    Vendor CDN
    Held and served by the vendor.
    Your bucket
    Held in object storage you own.
    Third-party DAM
    Held in a separate asset manager.
    1 product
    • TinaCMS
      The repository is the default and its files are mirrored to Tina's own CDN; an external provider replaces that rather than joining it. Vendor documentation Checked
      11 quotes from 6 sources

      Source ↗ tina.io/docs/reference/media/overview

      Repo-based Media (default) With the built-in repo-based media option, media is stored within the site

      Note: Only Repo-based Media or an External Media Provider can be configured, but not both

      TinaCMS also supports pluggable external media providers. Read more about the external media store implementation here

      Source ↗ tina.io/docs/reference/media/repo-based

      Anything in this directory will be synced with TinaCloud

      media server, and the images will be publicly accessible.

      Source ↗ tina.io/docs/reference/media/external/authentication

      otherwise your assets will still be prefixed with https://assets.tina.io as if you were still using repo based media

      Tina supports using external media providers, however a light backend media handler needs to be setup/hosted by the user. Tina offers some helpers to make this easy, for cloudinary , s3 ,

      replace the default repo-based media with the external media store. You can register a media store via the loadCustomStore prop.

      Source ↗ tina.io/docs/reference/media/external/s3

      Manage S3 Bucket media assets in TinaCMS.

      Source ↗ tina.io/docs/reference/media/external/do-spaces

      Manage Digital Ocean Spaces media assets in TinaCMS.

      Source ↗ tina.io/docs/reference/media/external/cloudinary

      Manage Cloudinary media assets in TinaCMS.

  6. Vendor CDNYour bucketThird-party DAM
    Vendor CDN
    Held and served by the vendor.
    Your bucket
    Held in object storage you own.
    Third-party DAM
    Held in a separate asset manager.
    1 product
    • Strapi
      Files land on your own server by default, on Strapi's own storage with the hosted service, or in a bucket or asset library you own. Vendor documentation Checked
      6 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/features/media-library

      The Media Library is powered in the backend server by the Upload package, which can be configured and extended through providers.

      Source ↗ docs.strapi.io/…/media-library-providers

      By default Strapi provides a provider that uploads files to a local public/uploads/ directory in your Strapi project. Additional providers are available and add an extension to the core capabilities of the plugin. Use them to upload your files to another location, such as AWS S3 or Cloudinary.

      The providers maintained by Strapi are the following. Clicking on a card will redirect you to a docs page with a configuration example: Amazon S3 Official provider for file uploads to Amazon S3. Cloudinary Official provider for media management with Cloudinary. Local Default provider for storing files locally on the server.

      Source ↗ docs.strapi.io/cloud/advanced/upload

      Configuring a third-party upload provider for use with Strapi Cloud requires the following 4 configuration steps, followed by a deployment: Install the provider plugin in your local Strapi project.

      Source ↗ docs.strapi.io/cloud/getting-started/usage-billing

      This includes requests to the GraphQL and REST APIs, excluding requests for file and media assets counted towards CDN bandwidth and storage.

      Source ↗ strapi.io/pricing-cloud

      100k API requests 50 GB asset storage 50 GB asset bandwidth Unlimited database entries Plan features Built in email provider Fast and global CDN Custom domains Observability

  7. Your repositoryThird-party DAM
    Your repository
    Committed alongside the content.
    Third-party DAM
    Held in a separate asset manager.
    1 product
    • Decap CMS
      Uploads are committed to the repository by default; Cloudinary is an external media-library option. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ decapcms.org/docs/configuration-options

      The media_folder option specifies the folder path where uploaded files should be saved, relative to the base of the repo.

      Source ↗ decapcms.org/docs/cloudinary

      Cloudinary is a digital asset management platform

      The Cloudinary media library integration

  8. Your repositoryVendor CDN
    Your repository
    Committed alongside the content.
    Vendor CDN
    Held and served by the vendor.
    1 product
    • Keystatic
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/fields/image

      Images will be stored on your local file system or GitHub repository.

      Source ↗ keystatic.com/docs/cloud

      Cloud Images: upload, transform and serve optimized images without cluttering your GitHub repository.

How images are resized and optimized for the page.

  1. No variants
    4 products
    • Decap CMS
      Uploads are referenced by a static public path, so they never reach astro:assets. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/configuration-options

      The public_folder option specifies the folder path where the files uploaded by the media library will be accessed, relative to the base of the built site.

    • Pages CMS
      Pages CMS writes the file and rewrites its path but performs no resizing, format conversion or variant generation. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/media

      output * Public path written into content (e.g. /media).

      Source ↗ pagescms.org/docs/configuration/fields/image

      rename Controls upload renaming. Use false to keep the original filename, true or safe to slugify it, or random for a generated name.

    • Sveltia CMS
      Sveltia optimizes an image to WebP but cuts no variants, deferring responsive sizes to the framework's own build. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/media

      you can convert raster images to WebP format, resize them to a maximum dimension, and optimize SVG files

      This feature is not intended for creating image variants in different formats and sizes. It should be done with a framework during the build process.

    • TinaCMS
      Files are committed to the repository but referenced by a Tina CDN URL, so Astro sees a remote image, and no documented path produces variants. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ tina.io/docs/reference/media/repo-based

      TinaCMS has a built-in Repository (git) based media storage option .

      Anything in this directory will be synced with TinaCloud

      media server, and the images will be publicly accessible.

      Source ↗ tina.io/docs/reference/media/external/authentication

      otherwise your assets will still be prefixed with https://assets.tina.io as if you were still using repo based media

  2. Transformed on request
    Transformed on request
    Resized by a service when the page asks for it.
    4 products
    • EmDash
      An image endpoint EmDash installs resizes on request — on Cloudflare Workers through the IMAGES binding, over the media in your own bucket. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/guides/media-library

      EmDash installs an image endpoint that produces the resized variants on request. On Cloudflare Workers that endpoint uses the IMAGES binding.

      Source ↗ docs.emdashcms.com/deployment/cloudflare

      EmDash resizes and re-encodes R2 media inside the Worker, through Cloudflare's IMAGES binding.

    • Keystatic
      Keystatic Cloud Images transforms images via URL query parameters. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      Cloud Images is an opt-in image storage and delivery service that optimises your images for the web.

      https://[IMAGE_URL]?width=240&height=480&fit=crop

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/apis-and-sdks/image-urls

      you can scale, crop, and process images on the fly based on URL parameters.

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/concepts/assets

      Use Storyblok's Image Service to modify files programmatically: change the file format, optimize the quality, resize, set a focal point, or apply various filters.

  3. Sizes cut on upload
    Sizes cut on upload
    Fixed sizes generated when the file is uploaded.
    2 products
    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/upload/overview

      If you specify an array of imageSizes to your upload config, Payload will automatically crop and resize your uploads to fit each of the sizes specified by your config.

    • Strapi
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.strapi.io/cms/features/media-library

      Breakpoint changes will only apply to new images, existing images will not be resized or have new sizes generated.

  4. Optimized by Astro
    Optimized by Astro
    Astro's own astro:assets pipeline, at build time.
    1 product
    • ZeroCMS
      Tested Checked
  5. Optimized by AstroSizes cut on upload
    Optimized by Astro
    Astro's own astro:assets pipeline, at build time.
    Sizes cut on upload
    Fixed sizes generated when the file is uploaded.
    1 product
    • CloudCannon
      Uploads default to the Git repository rather than a vendor CDN, so an uploaded image is an ordinary project file; a DAM is the opt-in way to store assets outside the repo. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ cloudcannon.com/documentation/user-articles/add-a-file

      CloudCannon will push the new file to your Git repository. This way, technical and non-technical team members can contribute to your Git repository.

      Your File Browser uses the same file structure as your Git repository.

      Source ↗ cloudcannon.com/…/introduction-to-assets-and-dams

      CloudCannon integrates with several DAM providers to store your images and documents outside your Git repository. Your editors can upload and select assets from

      Source ↗ cloudcannon.com/…/configure-a-file-input

      For inputs that accept images, you can configure how CloudCannon resizes images, MIME type, and whether CloudCannon creates additional images of different sizes when you upload a new asset.

Defines where published content lands.

  1. A commitA pull requestA branch
    A commit
    A commit is created and pushed to your repository.
    A pull request
    Opened as a pull request for review.
    A branch
    A branch is created for each change.
    4 products
    • Decap CMS
      Simple mode commits straight to the configured branch; editorial workflow opens a branch and pull request per entry. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/backends-overview

      All CMS commits and PRs are made to this branch.

      Source ↗ decapcms.org/docs/editorial-workflows

      Commits to a new branch (named according to the pattern cms/collectionName/entrySlug), and opens a pull request

    • Keystatic
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ raw.githubusercontent.com/…/updating.tsx

      mutation CreateCommit($input: CreateCommitOnBranchInput!) {

      Source ↗ keystatic.com/docs/github-mode

      Keystatic will only list branches starting with my-prefix/ in the Admin UI, and will only let you create new branches with that prefix.

      Source ↗ raw.githubusercontent.com/…/en-US.json

      "createPullRequest": "Create pull request"

    • Sveltia CMS
      Simple workflow commits straight to the configured branch; editorial workflow opens a branch and pull request per entry. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/simple

      Changes made through Sveltia CMS are automatically committed and pushed to the connected repository’s default branch

      Source ↗ sveltiacms.app/en/docs/workflows/editorial

      A branch named `cms/[COLLECTION_NAME]/[SLUG]` is created off the configured branch, the entry files are committed to it, and a pull request is opened

    • TinaCMS
      Saving commits straight to the branch by default; the editorial workflow adds a branch and a draft pull request, on Business and Enterprise only. Vendor documentation Checked
      9 quotes from 6 sources

      Source ↗ tina.io/docs/tinacloud/git-co-authoring

      When changes are saved in TinaCMS, they are committed to your project's GitHub repository. By default, these commits are authored by our tina-cloud-app

      Source ↗ tina.io/docs/faq

      Any changes that are saved by your editors will be committed to the configured branch in your GitHub repository.

      Source ↗ tina.io/docs/tinacloud/deployment-options/vercel

      By default, TinaCMS will push a commit with changes every time you make a change. That also means Vercel will create a deployment every time you make a change.

      Source ↗ tina.io/docs/tinacloud/overview

      Once connected, your project's editors will be able to save content directly to its GitHub repository, entirely from within your site.

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      Instead of saving your content directly to a protected branch (e.g., main ), a new branch is created. A draft pull request is generated, and all subsequent edits are made on this new branch. When your content is ready to be published, it can be merged back into the protected branch (e.g., main ) via GitHub.

      The new branch will be created. The content of the new branch will be indexed (this process may take a few minutes). The changes will be saved to the new branch. A draft pull request will be created.

      Note: The Editorial Workflow feature is available on select paid plans.

      Source ↗ tina.io/editorial-workflow

      Merge With Confidence A Pull Request is automatically created when a content editor creates a new branch.

      Tina's Editorial Workflow is only available on the Business and Enterprise plans. Contact us for a demo.

  2. The vendor's store
    The vendor's store
    Saved to the vendor's database.
    4 products
    • EmDash
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/why-emdash

      Content lives in the same deployment as your site and is queried through Astro's Live Content Collections within the same process.

      Source ↗ docs.emdashcms.com/concepts/content-model

      status draft , published , or scheduled

    • Payload CMS
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ payloadcms.com/docs/versions/drafts

      Quick reference Operation draft param _status in data Result Create true or false omitted Main collection updated with _status: 'draft' Create true or false 'published' Main collection updated with _status: 'published'

      Source ↗ payloadcms.com/docs/versions/overview

      By enabling versions , a new database collection will be made to store versions for your collection or global.

      Source ↗ payloadcms.com/docs/database/overview

      Currently, Payload officially supports the following Database Adapters: MongoDB with Mongoose Postgres with Drizzle SQLite with Drizzle

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/drafts

      When you publish a document it is copied from the draft into a document without the

      When you publish a document it becomes available on the public APIs

    • Strapi
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/configurations/database

      The /config/database.js|ts file is used to define database connections that will be used to store the application content.

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      To publish a draft, click on the Publish button in the Entry box on the right side of the interface.

      Draft or published content can be requested, created, updated, and deleted using the status parameter through the various front-end APIs accessible from Strapi

  3. A commit
    A commit
    A commit is created and pushed to your repository.
    2 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      Saves commit straight to the branch you are on. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs

      Save changes back to GitHub.

      Source ↗ pagescms.org/docs/configuration/settings

      `settings.commit.templates` defines the default commit message format for content and media changes.

  4. A commitA pull request
    A commit
    A commit is created and pushed to your repository.
    A pull request
    Opened as a pull request for review.
    1 product
    • CloudCannon
      Saving is what commits your changes to your Git repository; publishing is a separate second step that sends those changes to the Site's assigned Publish Branch. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/…/save-your-changes

      Whenever you edit your files , CloudCannon will remember any updates you make in-app. To see your updates live on your site or commit them to your Git repository, you must save your changes.

      Source ↗ cloudcannon.com/…/what-are-publishing-methods

      Every Site connected to a Publish Branch will have a Publishing Method , either Merge Immediately or Pull Request .

      When you publish a Site configured with the Merge Immediately Publishing Method , CloudCannon sends your changes straight to the Publish Branch , with no review or approval required.

      The Pull Request must be reviewed and approved by another Team Member in your Git Provider before the changes can reach your Publish Branch .

      Source ↗ cloudcannon.com/…/what-is-publishing

      A Publish Branch is the destination Site for your changes. Each Site in your Project has one Publish Branch assigned to it.

  5. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Storyblok
      Not tested Undated

Can you see what changed before publishing?

  1. Line by line

    A full diff of the changes about to be published.

    4 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/review-and-publish

      The ZeroCMS review screen shows a full diff of all pending changes — text and images — so you can confirm exactly what's going out. Hit Publish and it lands as a single, clean git commit. The AI writes the commit message for you.

      The review screen shows a diff of every changed, added, and deleted file. Text changes are highlighted line by line. Images are shown visually.

    • CloudCannon
      A line-by-line diff per file before saving; at publish time you get a file list and a link out to your Git host. Vendor documentation Checked
      8 quotes from 4 sources

      Source ↗ cloudcannon.com/…/save-your-configuration-file

      View diff — Review unsaved changes for a file in text format, with deleted content highlighted in red and new content highlighted in green.

      When you look at the files in the Save changes modal, you can see a three-dot icon at the top right of each File Card . This is the file Context Menu , containing a set of file actions that may be useful before you save your changes.

      Source ↗ cloudcannon.com/…/publishing-conflict-resolution-domains-rework-and-more

      Added the View diff file action to the Context Menu , allowing you to review the unsaved changes for a file in text format. CloudCannon will highlight deleted content in red and new content in green. CloudCannon will highlight content that has no changes, but where a change is present on the same line, in yellow.

      Source ↗ cloudcannon.com/…/what-is-the-publishing-page

      The Changes tab lists all the files with saved changes on your Site . At the top, you can see how many total files have changes. Each Card in the list represents a file with saved changes, showing the name of the file, the number of lines changed,

      The Publish button to send your changes to the Publish Branch . A Compare changes link to your Git Provider to review the changes.

      Source ↗ cloudcannon.com/…/publishing-your-changes

      Compare link: The "Compare changes on [Git provider]" link takes you to a detailed view of your changes. You may not have access to this because it requires access to your Git provider

      CloudCannon will open the Publishing page, which has three tabs: Summary , Changes , and Commits .

      The Changes and Commits tabs let you see all saved changes on your Site , organized by file or by editing session.

    • Payload CMS
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ payloadcms.com/docs/versions/overview

      the Admin UI will be extended with additional views that allow you to browse document versions, view diffs in order to see exactly what has changed in your documents (and when they changed), and restore documents back to prior versions easily.

      Comparing an old version to a newer version of a document With Versions, you can:

      It also lets you save versions (drafts) that are newer than your most recently published document, which is helpful if you want to draft changes and maybe even preview them before you publish the changes.

      Source ↗ payloadcms.com/docs/versions/drafts

      Changed - if a document has been published, but there are newer drafts available and not yet published

    • Sanity
      Version comparison highlights changed fields; richer inline diff annotations come from Advanced Version Control. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/studio/compare-document-versions

      Differences between the fields in the right version are highlighted in yellow.

      Advanced Version Control adds inline diff annotations to fields, letting editors see how content has changed between versions while they work on it.

  2. Entry level only

    You are told an entry changed, without being shown what.

    4 products
    • Decap CMS
      The editorial-workflow interface tracks unpublished entries by status; the change goes through a pull request on the git host. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ decapcms.org/docs/editorial-workflows

      adds an interface for drafting, reviewing, and approving posts.

      In order to track unpublished entries statuses

      Merges pull request and deletes branch

    • Strapi
      An entry is marked as modified, and the history screen lists a single version's fields rather than a comparison of two. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      Modified : The content was previously published. You made some changes to the draft version and saved these changes, but the changes have not been published yet.

      The Draft tab is where you can edit your content. The Published tab is a read-only tab where edition of all fields is disabled. The Published tab only exists to show what is the content of fields in the published version.

      Source ↗ docs.strapi.io/cms/features/content-history

      gives you the ability to browse and restore previous versions of documents created with the Content Manager

      The main view on the left, which lists the fields and their content for the version selected in the sidebar on the right.

      Note The main view of Content History clearly states whether a field was inexistent, deleted, or renamed in other versions of the content-type.

    • Sveltia CMS
      Status badges and an Unpublished Entries list flag that an entry changed; the line-by-line diff lives on the Git provider, not in the CMS. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/editorial

      Unpublished entries appear in the entry list alongside published ones, each with a badge showing its status

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      you’ll see a diff view of the changes made in that commit on your Git provider.

    • TinaCMS
      Tina links out from the branch list modal to a preview of the branch and to the pull request on GitHub, where the change is merged. Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      Instead of saving your content directly to a protected branch (e.g., main ), a new branch is created. A draft pull request is generated, and all subsequent edits are made on this new branch.

      When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub. After the pull request is successfully merged, the updated content will be available on the protected branch.

      On This Page Setting Up Accessing CMS and Saving to Protected Branches Publishing Content Media in the Editorial Workflow GitHub Pull Request links Preview links

      In the branch list modal, you can click on the dropdown and click "View Pull Request" to view the pull request on GitHub. This will open a new tab in your browser.

      You can setup preview links for your pull requests. This will allow you to preview your content changes before merging them into the protected branch.

      Now you will be able to click on the "View Preview" button in the branch list modal to preview your changes.

      Source ↗ tina.io/editorial-workflow

      Editorial Workflow Review, approve, and manage content changes with version control

      Merge With Confidence A Pull Request is automatically created when a content editor creates a new branch. This also allows teams to ensure that their CI/CD workflow all passes before merging content into production. Shareable Previews Easily get to your preview on Netlify, Vercel, AWS, etc.

      Source ↗ tina.io/roadmap

      Improved PR workflow We are making some improvements to Tina's Editorial Workflow that will allow you to merge Pull Requests from within the CMS UI.

  3. No

    There's no way to see exactly what changed.

    3 products
    • EmDash
      Changes to published content take effect on save; there is no staged changeset to diff before publishing. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/working-with-content

      Changes to published content appear immediately on your site.

    • Keystatic
      Tested Checked
    • Pages CMS
      Editing goes straight to a commit, with no in-product diff. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs

      Edit content in the UI. Save changes back to GitHub.

  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Storyblok
      Not tested Undated

Whether unfinished work can be saved without publishing.

  1. Real drafts

    An entry can stay unpublished, be previewed, and be found again.

    9 products
    • ZeroCMS
      Tested and documented Checked
      11 quotes from 6 sources

      Source ↗ zerocms.io/features/review-and-publish

      Changes accumulate locally as you edit.

      Not everything has to ship at once. Deselect individual files to hold them back, and publish just the changes that are ready.

      review screen shows a full diff of all pending changes

      The review screen shows a diff of every changed, added, and deleted file. Text changes are highlighted line by line. Images are shown visually.

      Source ↗ zerocms.io/pricing

      Publishing Review changes Selective publishing Hold back individual files from a publish

      Source ↗ zerocms.io

      Each change is automatically synced across users and devices, so everyone stays on the same content without a single commit or PR.

      Source ↗ zerocms.io/features/live-preview

      See exactly how your actual site looks, or ask feedback from your teammates or client, before publishing changes.

      Send a private link to a stakeholder and they see the live site in their browser. No account or login needed.

      Source ↗ zerocms.io/changelog

      When editing a file, ZeroCMS now automatically finds the matching URL and points the live preview at it.

      remembered, so when you or a teammate opens the file the next time

      Source ↗ zerocms.io/features/ai-content-agent

      Ask it to find all posts tagged with a specific keyword, locate draft entries, or surface content missing a required field.

    • Decap CMS
      Editorial workflow adds unpublished draft states across the content publishing phases. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/configuration-options

      The publish_mode option allows you to enable Editorial Workflow mode for more control over the content publishing phases.

      Source ↗ decapcms.org/docs/editorial-workflows

      adds an interface for drafting, reviewing, and approving posts.

    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/working-with-content

      Drafts are only visible in the admin. Change status to Published to make content visible on your site.

    • Keystatic
      Tested Checked
    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/versions/drafts

      By enabling Versions with Drafts, your collections and globals can maintain newer, and unpublished versions of your documents.

    • Sanity
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sanity.io/docs/content-lake/drafts

      drafts capture in-flight updates while the original published document remains intact. this enables keeping changes separated from what is presented to users until those changes are ready to be explicitly rolled-out

      drafts are saved in a document with an id beginning with the path drafts.

      Source ↗ sanity.io/…/presenting-and-previewing-content

      perspective to preview what your content would look like if all drafts were published

    • Storyblok
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/manuals/content-authoring

      A workflow is a set of rules that controls how stories move from draft to publication. Storyblok offers a Default workflow with three stages: Drafting , Reviewing , and Ready to Publish .

      Source ↗ storyblok.com/docs/guides/astro

      const { data } = await storyblokApi . get ( " cdn/stories/home " , { version: " draft " , } );

    • Strapi
      Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      By default, each newly created content is a draft. Drafts can be modified and saved at will, using the Save button in the Entry box on the right side of the interface, until they are ready to be published.

      Modified : The content was previously published. You made some changes to the draft version and saved these changes, but the changes have not been published yet. Draft : The content has never been published yet.

      The Draft tab is where you can edit your content. The Published tab is a read-only tab where edition of all fields is disabled. The Published tab only exists to show what is the content of fields in the published version.

      in the Content Manager list view, you can filter entries by status using the Filters button. You can also sort entries by publication status by clicking the Status column header in the list view.

      Draft or published content can be requested, created, updated, and deleted using the status parameter through the various front-end APIs accessible from Strapi

      Source ↗ docs.strapi.io/cms/features/preview

      With the Preview feature, you can preview your front end application directly from Strapi

    • Sveltia CMS
      True unpublished drafts persist and are listed, but only under the editorial workflow on the GitHub and GitLab backends. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/editorial

      An unpublished entry moves through three stages, shown as columns on the Editorial Workflow page and as a status button in the entry editor:

      Each entry with unsaved work lives on its own branch with an open pull request

      Source ↗ sveltiacms.app/en/docs/backends

      Editorial Workflow currently only works with the GitHub and GitLab backends.

  2. A flag in the content

    A draft flag the site is expected to honour.

    2 products
    • CloudCannon
      Unsaved edits persist across sessions and save file by file, but they are shared and any teammate can commit them. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ cloudcannon.com/…/save-your-changes

      Whenever you edit your files , CloudCannon will remember any updates you make in-app. To see your updates live on your site or commit them to your Git repository, you must save your changes.

      You can select as many or as few files as you like using the checkboxes by each heading or file card. The Save selected and Discard selected buttons at the bottom of the modal allow you to save or discard your selected files as a group.

      Any team member can review and save file changes, even if they did not contribute to those edits.

      Source ↗ cloudcannon.com/…/edit-your-files

      Every change you make is remembered by CloudCannon, so you are safe to take a break, close the editing interface, refresh the tab, change the editing interface, or switch who is editing the file any time.

      An editing session is the period of time between the first change someone makes to any file and when someone clicks the Save button. Editing sessions can contain any number of changes to any number of files, with any number of team members contributing to those changes.

    • TinaCMS
      Either implement a draft field of your own, or use the editorial, pull-request based workflow, which is Business and Enterprise only. Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ tina.io/docs/drafts/overview

      TinaCMS supports a few implementations of "drafts".

      Developers can setup a "draft" field on a document, which can be toggled to conditionally include pages based on their draft state.

      Some editorial teams like to work in branches, for more control over what gets merged into production.

      Source ↗ tina.io/docs/drafts/drafts-fields

      You can add a filter to filter out draft documents from your queries:

      The above solution won't work as-is with visual editing . To setup visual editing with drafts, you will need to implement NextJS Preview-Mode .

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      If your content editors need to work on multiple branches, you can utilize the Editorial Workflow feature.

      a new branch is created. A draft pull request is generated, and all subsequent edits are made on this new branch.

      Note: The Editorial Workflow feature is available on select paid plans.

      When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub.

  3. No

    Every save is a publish.

    1 product
    • Pages CMS
      Every save is an immediate commit; there is no staging layer. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs

      Save changes back to GitHub.

      Source ↗ pagescms.org/docs/configuration/settings

      update Update {path} (via Pages CMS) delete Delete {path} (via Pages CMS)

Is it possible to publish only some of the changes?

  1. Yes
    9 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/review-and-publish

      Not everything has to ship at once. Deselect individual files to hold them back, and publish just the changes that are ready.

      Changes accumulate locally as you edit. When you're ready, open the review screen to see everything at once. Confirm what you want to ship, and Zero publishes it as a single atomic git commit.

    • Decap CMS
      In editorial workflow each entry is its own branch and pull request, so pending entries can be held while others publish. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/editorial-workflows

      Commits to a new branch (named according to the pattern

      Merges pull request and deletes branch

    • EmDash
      Publishing is per locale — one locale can go live while another stays draft. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/internationalization

      Per-locale publishing — publish the English version while keeping French in draft

    • Keystatic
      Tested Checked
    • Payload CMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/versions/drafts

      Payload's Draft functionality builds on top of the Versions functionality to allow you to make changes to your collection documents and globals, but publish only when you're ready.

      If Drafts are enabled, the typical Save button is replaced with new actions which allow you to either save a draft, or publish your changes.

      Changed - if a document has been published, but there are newer drafts available and not yet published

      Update true omitted or 'draft' Only versions table updated, main collection unchanged

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/user-guides/content-releases

      Releases are a way to group multiple document changes together into a single unit that can be previewed, validated, scheduled, and published as one.

      You can work directly on a draft and publish it without creating a release.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/content-authoring

      A release is a group of content changes scheduled for publishing.

      Once saved, the release opens in a new tab, and you can select which stories to include.

    • Strapi
      Entry by entry, or several at once from the list view; Releases additionally batch entries across content types and locales, and need the Growth or Enterprise plan. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/releases

      The Releases feature enables content managers to organize entries into containers that can perform publish and unpublish actions simultaneously. A release can contain entries from different content types and can mix locales.

      Releases Copy Markdown Growth This feature is available with a Growth plan.

      IDENTITY CARD Plan CMS Growth and Enterprise plans Role

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      To publish a draft, click on the Publish button in the Entry box on the right side of the interface.

      list view will display additional buttons to publish or unpublish several entries simultaneously. This is what is called

    • Sveltia CMS
      In editorial workflow each entry is its own branch and pull request, so pending entries can be held while others publish. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/workflows/editorial

      Each entry with unsaved work lives on its own branch with an open pull request, so making a change and releasing it are two separate steps.

  2. No
    3 products
    • CloudCannon
      Publishing moves everything saved on the branch; the choosing happens earlier, when you pick which files to save. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ cloudcannon.com/…/publish-changes-to-a-publish-branch

      To publish your changes: Click the Publishing link in the Site Navigation . CloudCannon will open the Publishing page. (Optional, Pull Request only.) Fill out the Title and Body text fields to describe the changes on this Site . Click the Publish or Create Pull Request button on the Publishing State Card .

      (Optional, Pull Request only.) Once your Pull Request is approved on your Git Provider , click the Publish pull request button to merge it. CloudCannon will move your saved changes from your current Site to its Publish Branch .

      Source ↗ cloudcannon.com/…/publishing-your-changes

      When you publish your changes, CloudCannon will: Move your saved changes to your Publish Branch If your Publish Branch is your public website, all your visitors will see your changes

      Source ↗ cloudcannon.com/…/saving-your-changes

      Select the files you want to save using the checkboxes in the top left of each File Card . By default, any files you contributed to will be selected.

    • Pages CMS
      Each save commits its own entry immediately, so there is no pile of pending changes to hold some of back from. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs

      Save changes back to GitHub.

    • TinaCMS
      Everything saved on a working branch ships together when its pull request is merged. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      Instead of saving your content directly to a protected branch (e.g., main ), a new branch is created. A draft pull request is generated, and all subsequent edits are made on this new branch. When your content is ready to be published, it can be merged back into the protected branch (e.g., main ) via GitHub.

      Publishing Content When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub. After the pull request is successfully merged, the updated content will be available on the protected branch.

      On This Page Setting Up Accessing CMS and Saving to Protected Branches Publishing Content Media in the Editorial Workflow GitHub Pull Request links Preview links

      Source ↗ tina.io/docs/tinacloud/deployment-options/vercel

      By default, TinaCMS will push a commit with changes every time you make a change. That also means Vercel will create a deployment every time you make a change.

Whether a publish can be set to happen later.

  1. Yes
    5 products
    • EmDash
      On Cloudflare Workers a cron trigger is required to release scheduled content. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/working-with-content

      When the publication date arrives, the content automatically becomes published.

      On Cloudflare Workers, it needs a cron trigger to publish content on schedule.

    • Payload CMS
      Needs the jobs queue configured, and something running it. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/docs/versions/drafts

      schedulePublish Allow for editors to schedule publish / unpublish events in the future. More validate Set validate to true to validate draft documents when saved. Default is false . Database changes

      You can enable this functionality on both collections and globals via the versions.drafts.schedulePublish: true property.

      if you are going to enable scheduled publish / unpublish, you need to make sure your Payload app is set up to process Jobs . This feature works by creating a Job in the background, which will be picked up after the job becomes available. If you do not have any mechanism in place to run jobs, your scheduled publish / unpublish jobs will never be executed.

    • Sanity
      Scheduled publishing of single documents and grouped Content Releases both hold and release on a clock. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/studio/scheduled-drafts

      Scheduled drafts allows you to schedule single-document releases for a time in the future.

      Source ↗ sanity.io/docs/user-guides/content-releases

      Content Releases lets you organize and schedule updates across multiple documents.

    • Storyblok
      Scheduling and releases are paid features. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/content-authoring

      For single story scheduling, select More Options (next to Publish ), choose Schedule Publishing , and set the date and time.

      Scheduling, releases, and pipelines are paid features.

    • Strapi
      Through releases, which require the Growth or Enterprise plan. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/releases

      Releases can be published manually or scheduled to be automatically published at a given date and time, with the timezone of your choice.

      Releases Copy Markdown Growth This feature is available with a Growth plan.

      IDENTITY CARD Plan CMS Growth and Enterprise plans Role

      Source ↗ docs.strapi.io/cms/features/draft-and-publish

      To schedule publication (i.e. convert a draft to a published entry at a given date and time) you can include it in a release and schedule the publication of that release.

  2. No
    7 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      What can be scheduled is a build: a `_schedule.txt` file, which their Jekyll plugin generates from future-dated posts, or a one-off build set in the CloudCannon UI. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/…/scheduling-your-next-build-automatically

      Automatic builds are configured by creating a `_schedule.txt` file in your site. After building your site, CloudCannon will read your `_schedule.txt` file and automatically configure a build at the specified time. This is useful for future posts.

      For Jekyll sites we recommend using our plugin, jekyll-cloudcannon-schedule to generate `_schedule.txt`. This will parse all posts set for the future and generate a build on that date.

      Source ↗ cloudcannon.com/…/scheduling-your-builds-manually

      Manually scheduled builds are configured in the CloudCannon UI. They are useful for regular period builds or one-off future builds.

    • Decap CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ decapcms.org/docs/configuration-options

      By default, all entries created or edited in the Decap CMS are committed directly into the main repository branch.

      Allowed values for publish_mode are: simple , editorial_workflow or empty string

      Source ↗ decapcms.org/docs/editorial-workflows

      Approve and publish draft Merges pull request and deletes branch

    • Keystatic
      Tested Checked
    • Pages CMS
      Scheduled publishing is an announced but unreleased feature. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Scheduling Soon Easily schedule one-off or recurring content updates.

    • Sveltia CMS
      Publishing is an immediate commit; there is no scheduled or timed publish. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/workflows/simple

      Changes made through Sveltia CMS are automatically committed and pushed to the connected repository’s default branch

    • TinaCMS
      Vendor documentation Checked
      8 quotes from 4 sources

      Source ↗ tina.io/docs/drafts/overview

      TinaCMS supports a few implementations of "drafts". Document-based "draft" state Developers can setup a "draft" field on a document, which can be toggled to conditionally include pages based on their draft state.

      On This Page Document-based "draft" state Working in branches

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      Publishing Content When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub. After the pull request is successfully merged, the updated content will be available on the protected branch.

      On This Page Setting Up Accessing CMS and Saving to Protected Branches Publishing Content Media in the Editorial Workflow GitHub Pull Request links Preview links

      Source ↗ tina.io/editorial-workflow

      Branching Create content on new branches without going to GitHub. Protect Branches Prevent editing on specific branches.

      Merge With Confidence A Pull Request is automatically created when a content editor creates a new branch.

      Shareable Previews Easily get to your preview on Netlify, Vercel, AWS, etc.

      Source ↗ tina.io/docs/tinacloud/deployment-options/vercel

      By default, TinaCMS will push a commit with changes every time you make a change. That also means Vercel will create a deployment every time you make a change.

Is published content recorded under the editor's own name?

  1. Yes
    11 products
    • ZeroCMS
      Changes an external agent makes through the MCP server are attributed to the user who authorized it. Tested Checked
    • CloudCannon
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/…/configure-your-commit-messages

      [author] reads as the email address of the person making the commit.

      Commit messages provide a record of your changes for you and your team members.

      Source ↗ cloudcannon.com/…/configure-the-commit-details-for-clients

      By default, when a Client edits your Site, the commit details will contain the name

      You can configure the commit details for Clients to create a more accurate history of changes made to your Site.

    • Decap CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/github-backend

      the github backend allows CMS users to log in directly with their GitHub account. Note that all users must have push access to your content repository

      Source ↗ decapcms.org/docs/open-authoring

      Unpublished Open Authoring entries, on the other hand, are visible only to the author in the CMS UI or publicly as GitHub PRs

    • EmDash
      Entries record the creating user; EmDash uses real per-user accounts, not a shared bot identity. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/concepts/content-model

      author_id The user who created the entry

      Source ↗ docs.emdashcms.com/concepts/admin-panel

      EmDash has five roles, from least to most access: Subscriber, Contributor, Author, Editor, Admin.

    • Pages CMS
      A signed-in GitHub user's commits are attributed to them. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/development/authentication

      When Pages CMS writes with a GitHub user token, GitHub handles attribution normally.

      Source ↗ pagescms.org/docs/configuration/settings

      user Send the current user's name and email as committer metadata when available.

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/versions/overview

      With Versions, you can: Maintain an audit log / history of every change ever made to a document, including monitoring for what user made which change

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/content-lake/realtime-updates

      identity: the user making the changes

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/manuals/history

      The Versions list appears on the right panel and displays all saved versions of the story in chronological order, along with timestamps and the names of the authors who made the changes.

    • Strapi
      The entry records who created and updated it, but REST omits those fields unless populateCreatorFields is activated on the content-type, and that setting is not available to the GraphQL API. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ docs.strapi.io/…/populate-creator-fields

      The creator fields createdBy and updatedBy are removed from the REST API response by default. These 2 fields can be returned in the REST API by activating the populateCreatorFields parameter at the content-type level.

      The populateCreatorFields property is not available to the GraphQL API.

      Source ↗ docs.strapi.io/cms/features/content-history

      the date and time when the version was created, the user who created it, and whether its status is Draft, Modified, or Published

      Source ↗ docs.strapi.io/cms/features/audit-logs

      The Audit Logs feature logs the following events: Event Actions Content Type create , update , delete Entry (draft/publish) create , update , delete , publish , unpublish

      Date: date and time of the action. User: user who performed the action.

    • Sveltia CMS
      Commits made through Sveltia are automatically GPG-signed and marked verified on GitHub. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/backends/github

      When you commit changes to your GitHub repository through Sveltia CMS, the commits are automatically GPG-signed and marked as verified

    • TinaCMS
      Off by default: a GitHub account lets an editor author the commit, or be named co-author of the bot's. Vendor documentation Checked
      9 quotes from 1 source

      Source ↗ tina.io/docs/tinacloud/git-co-authoring

      This method provides perfect attribution by using your GitHub account to perform all actions. Commits, branches, and pull requests will appear in your repository's history exactly as if you had made them from your own computer.

      Act as You (Recommended): The most seamless and accurate method. TinaCMS will perform all Git actions using your personal GitHub identity after you grant authorization.

      still performs all Git actions, but it adds a Co-authored-by: trailer to the end of each commit message, crediting you for the work.

      Commits are made directly by your user identity.

      Without authorship settings, it's unclear who made the change.

      To solve this, TinaCMS provides two distinct methods for attributing your work:

      Navigate to your Account Settings in TinaCloud. Find the GitHub Authoring section. Use the toggle to select the "Act as [Your Name]" option. You will be redirected to GitHub to authorize the application.

      This method provides perfect attribution by using your GitHub account to perform all actions.

      Commits are made by the bot, with your name added as a Co-authored-by: line.

  2. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Keystatic
      Keystatic's documentation does not say whose identity its commits carry, in GitHub mode or for Keystatic Cloud editors without a GitHub account. Not tested Undated

Can someone else approve a change before it's published?

  1. Stages you define

    Stages you define, and who may move an entry between them.

    3 products
    • Payload CMS
      Multi-step approval with field-level stages, advertised in vendor marketing copy. Vendor claim Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/enterprise/publishing-workflows

      Map your internal dependencies to Payload's easily defined, multi-step approval processes, and ensure content meets your standards before it meets the world.

      The effectiveness of a publishing workflow hinges on the strength of its underlying access control. Specify approval stages down to the field level.

    • Storyblok
      Custom workflow stages, with the roles that may edit and publish at each, are a premium feature; a fixed default workflow is otherwise available. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/workflows

      Storyblok offers a Default workflow with three stages: Drafting , Reviewing , and Ready to Publish . This workflow applies to all content types and folders.

      Some pricing plans allow admins to edit the Default workflow and stages and create custom workflows .

      Select a stage to set different behaviors and permissions: define relevant content types, the default stage for new stories, who can edit and publish stories in this stage

    • Strapi
      Stages you define yourself, with the roles that may move an entry into and out of each one. An Enterprise feature. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/review-workflows

      The default workflow is configured to have 4 stages: To do, In progress, Ready to review, and Reviewed. All 4 stages can be edited, reordered or deleted as needed, and it is also possible to add new stages.

      to define which roles can move content out of this stage.

      to define which roles can transition content into this stage.

      Entries of a review workflow content type can be assigned to any admin user in Strapi for review.

      This feature is available with an Enterprise plan.

  2. One review step

    Request review, and hold the publish until it is granted.

    6 products
    • ZeroCMS
      Publishing can be gated on approval; a Business-plan feature. Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/pricing

      Business For larger teams that need priority support. $100 /site/month $199 $83 /site/month $166 Try for free 14 days free · no credit card Users Up to 20 AI credits 300 / month Content entries Unlimited Everything in Team, plus Require approvals before publishing Priority support

      Publishing Review changes Selective publishing Hold back individual files from a publish Custom pre-publish checks Publish via Claude, ChatGPT, and other AI tools Collaboration Real-time collaboration Require approvals before publishing Workspace

    • CloudCannon
      The diff, the comments and the approval all happen at your Git host. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ cloudcannon.com/…/review-and-merge-a-pull-request

      Reviewing the Pull Request, including viewing the diff, leaving comments, and approving, happens on your Git Provider, not in CloudCannon.

      Source ↗ cloudcannon.com/…/change-your-publishing-method

      CloudCannon offers two Publishing Methods: Merge Immediately and Pull Request.

      Source ↗ cloudcannon.com/…/what-are-publishing-methods

      When you publish a Site configured with the Merge Immediately Publishing Method, CloudCannon sends your changes straight to the Publish Branch, with no review or approval required.

      The Pull Request must be reviewed and approved by another Team Member in your Git Provider before the changes can reach your Publish Branch.

    • Decap CMS
      The editorial workflow adds a drafting and review step before publishing. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/editorial-workflows

      adds an interface for drafting, reviewing, and approving posts.

    • EmDash
      The Contributor role needs approval to publish. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      Contributor 20 Create content (needs approval to publish)

    • Sveltia CMS
      The editorial workflow adds a fixed draft-and-review step before publishing; GitHub and GitLab backends only. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/editorial

      Editors can submit changes for review, and designated reviewers can approve or request modifications.

      Source ↗ sveltiacms.app/en/docs/backends

      Editorial Workflow currently only works with the GitHub and GitLab backends.

    • TinaCMS
      On the Business and Enterprise plans, edits to a protected branch go through a generated draft pull request; publishing is merging it on GitHub, and Tina links out to the PR rather than showing it. Vendor documentation Checked
      10 quotes from 1 source

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      A draft pull request is generated, and all subsequent edits are made on this new branch. When your content is ready to be published, it can be merged back into the protected branch (e.g., main ) via GitHub.

      Media follows the same review process as your content. When you upload or delete an image while editing a protected branch, TinaCMS routes the change through a branch and pull request instead of writing to the protected branch directly.

      In the branch list modal, you can click on the dropdown and click "View Pull Request" to view the pull request on GitHub. This will open a new tab in your browser.

      This will allow you to preview your content changes before merging them into the protected branch.

      Prefer to skip the workflow for a one-off change? Choose Save to protected branch in the prompt to write the media directly to the protected branch.

      The Editorial Workflow can be enabled in TinaCloud.

      Note: The Editorial Workflow feature is available on select paid plans.

      A draft pull request is generated, and all subsequent edits are made on this new branch. When your content is ready to be published, it can be merged back into the protected branch (e.g., main ) via GitHub.

      In the branch list modal, you can click on the dropdown and click "View Pull Request" to view the pull request on GitHub. This will open a new tab in your browser.

      To publish the media change, merge its pull request into the protected branch, the same as you would for content.

  3. No

    Anyone who can edit can publish.

    3 products
    • Keystatic
      Tested Checked
    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs

      Edit content in the UI. Save changes back to GitHub.

    • Sanity
      No built-in sign-off gate; review workflows are built by overriding the publish action with custom document actions. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/studio/document-actions-api

      you are free to swap any or all of these out with your own custom actions, or conditionally disable or enable them

How finely an editor's access can be limited.

  1. Per field
    3 products
    • Payload CMS
      Access rules are boolean-returning functions that receive the authenticated user, and can be written against a role field on users. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ payloadcms.com/docs/access-control/fields

      Field Access Control is Access Control used to restrict access to specific Fields within a Document.

      Returns a boolean which allows or denies the ability to read a field's value. If false , the entire property is omitted from the resulting document. Available argument properties: Option Description req The Request object containing the currently authenticated user

      Source ↗ payloadcms.com/docs/access-control/overview

      Giving only users with a role field equal to admin the ability to delete posts

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/roles

      Storyblok supports an extensive list of permission levels, allowing admins to manage access to stories, blocks, fields, assets, languages, datasources, tags, and apps.

      Manage access to selected block fields using an allowlist/denylist.

    • Strapi
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/rbac

      (optional) Click the name of the content-type to display its full list of fields. Untick the field and action-related boxes to prevent access and/or action for the fields of your choice.

      For each content-type, the administrators can have the permission to perform the following actions: create, read, update, delete and publish.

      The permissions area of an administrator role editing interface allows to configure in detail what actions an administrator can do for any part of the Strapi application.

  2. Per collection
    3 products
    • CloudCannon
      Access can be scoped to collections, folders and file patterns, but custom groups start at the Team plan. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-are-custom-permission-groups

      You can specify which collections, folders, filenames, and file extensions a team member is allowed to read or edit, allowing for fine-grain control over reading and editing site files.

      You want to define which files within a Site a team member can edit (e.g., a collection, specific file types, or a single file).

      With Custom Permission Groups, you can set a permission at one of five scopes: Global, Project, Site, Group, and Base Domain.

      This feature is available on our Team and Enterprise plans .

      Source ↗ cloudcannon.com/…/permissions

      site:file # Available scopes: Project , Site , File , Global read → Allow users to view the contents of a Site's files. write → Allow users to update a Site's files, including creating new files, deleting existing files, and editing file contents.

      org:api-key # Available scopes: Global read → Allow users to view the Organization's API keys. write → Allow users to revoke the Organization's API keys. create → Allow users to create new API keys for the Organization.

    • Decap CMS
      Custom roles scope collections as edit, view-only or no-access; leaving the roles field blank means any logged-in user may access the CMS. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ decapcms.org/docs/turbo-roles-and-members

      named roles you create yourself

      each scoped to specific collections as edit / view-only / no-access.

      Source ↗ decapcms.org/docs/choosing-a-backend

      leaving the Roles field blank, which means any logged in user may access the CMS.

    • Sanity
      Custom roles scope access to GROQ-filtered content resources, an Enterprise feature. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sanity.io/…/custom-roles-and-resources

      Content resources are essentially a set of documents in a dataset, defined by a GROQ filter

      content permissions: control over which roles have permissions to make changes to certain content resources

      Source ↗ sanity.io/docs/content-lake/roles-concepts

      Custom roles are an Enterprise plan feature.

  3. Per site
    3 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      More limited collaborators scoped per repository; there are no configurable roles, and finer control is unreleased. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/collaborators

      Collaborators can: open repositories they were invited to, edit content, edit media.

      Collaborators cannot: manage .pages.yml , manage collaborators, access cache admin features.

      Source ↗ pagescms.org

      Permissions Soon Granular access control for different content types.

    • TinaCMS
      Project Admin and Project Editor differ only in managing project configuration and collaborators, and both can edit project content. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ tina.io/docs/tinacloud/dashboard/users

      Project collaborators can have one of the following project-level roles: Editor Admin

      Actions Project Admin Project Editor Edit Project Content ✔️ ✔️ View Project Overview ✔️ ✔️ Manage Project Configuration ✔️ ❌ Manage Project Collaborators ✔️ ❌

      Source ↗ tina.io/docs/tinacloud/dashboard/organizations

      Each user in an organization can have one of the following org-level roles: Editor Admin

      Actions Org Admin Org Editor Create new projects ✔️ ✔️ List all organization projects ✔️ ❌ Manage project collaborators ✔️ ❌ Edit project content ❌ ❌

      In order to sign in to a project and edit through TinaCMS, the org user needs to be explicitly added to the given project.

  4. Per organization
    1 product
    • EmDash
      Five instance-wide roles from Subscriber to Admin; access cannot differ per collection or field. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      EmDash uses role-based access control with five levels: Role Level Description Subscriber 10 Read published content (no draft access) Contributor 20 Create content (needs approval to publish) Author 30 Create/edit/publish own content Editor 40 Manage all content Admin 50 Full access including settings

  5. Everyone the same

    Every editor has the same access.

    2 products
    • Keystatic
      Keystatic Cloud grants team-level access to all projects. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/cloud

      User access is set at the team level, so every user in team will have access to all projects within that team.

    • Sveltia CMS
      Sveltia has no user or role system; every authorized editor has the same access, and who can reach the repository is the Git host's to control. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      Currently, Sveltia CMS does not have a built-in user authentication system. Instead, it relies on the Git backend for user authentication and access control.

Can a single account manage several sites?

  1. Yes
    10 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/multi-site

      Add as many Astro sites as you need and switch between them instantly. If separate teams need separate access, put each site in its own organization.

      Marketing site, docs, blog — add each one independently, and switch between them in seconds.

    • CloudCannon
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ cloudcannon.com/documentation/user-glossary

      Organization # A workspace in CloudCannon that groups together Sites , team members, and shared resources. It is also the unit CloudCannon bills for.

      Sites Browser # CloudCannon's interface for managing and organizing all the Sites within an Organization . The Sites Browser allows you to browse, search, and open Sites , displaying key information like name, icon, branch, Build status, and domain.

      Project # A way to group multiple Sites from the same Git Repository , allowing you to define a main branch, as well as branching and publishing rules.

    • Decap CMS
      One organization owns many sites; a self-hosted install is one repository and config per site. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/turbo-how-it-works

      An organization can own multiple

      each site corresponds to one Decap CMS install (one repo, one config.yml).

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/cloud

      Keystatic cloud organises projects into teams. Each team can have multiple projects, and each project is be connected to a specific GitHub repository.

    • Pages CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org

      Manage any website or app hosted on GitHub directly.

      Source ↗ pagescms.org/docs/quick-start

      Install the GitHub App on the account or organization that owns your repository. Open the repository you want to edit.

    • Payload CMS
      Through the official multi-tenant plugin, which scopes documents and list views to a tenant. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ payloadcms.com/docs/plugins/multi-tenant

      Multi-Tenant Plugin This plugin sets up multi-tenancy for your application from within your Admin Panel . It does so by adding a tenant field to all specified collections.

      Core features Adds a tenant field to each specified collection Adds a tenant selector to the admin panel, allowing you to switch between tenants Filters list view results by selected tenant

      Source ↗ payloadcms.com/docs/plugins/overview

      These plugins are maintained by the Payload team and its contributors and are guaranteed to be stable and up-to-date. Form Builder MCP Multi-Tenant Nested Docs Redirects Search Sentry SEO Stripe Import/Export Ecommerce

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/…/projects-organizations-and-billing

      All projects on Sanity.io can be tied to an organization. An organization holds contact and billing information

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/manuals/organizations

      An organization in Storyblok represents a high-level entity that contains multiple spaces, users, and settings.

    • Strapi
      Separate websites are separate projects, each needing its own instance and licence, and on the hosted service its own per-project subscription. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ support.strapi.io/…/2990044364-understanding-the-definition-of-a-strapi-project

      Produces an identical Strapi API and content model structure May be deployed across multiple environments Can be scaled horizontally or vertically Functions as a single application, regardless of instance count

      What is not considered a single project The following scenarios require separate licenses: Multi-tenancy applications with different models

      Multiple projects serving different websites Example: One Strapi instance for client1.example.com, another for client2.example.com

      Source ↗ docs.strapi.io/cloud/projects/overview

      The Projects page displays a list of all your Strapi Cloud projects. From here you can manage your projects and access the corresponding applications.

      Source ↗ strapi.io/pricing-cloud

      Starter $35 per project / month Sign up 100k API requests 50 GB asset storage 50 GB asset bandwidth

    • TinaCMS
      Every plan carries one project, so a second site is a second subscription. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ tina.io/docs/tinacloud/dashboard/organizations

      Organizations make it easy to manage users across multiple projects. Each user can belong to multiple organization.

      Actions Org Admin Org Editor Create new projects ✔️ ✔️ List all organization projects ✔️ ❌ Manage project collaborators ✔️ ❌ Edit project content ❌ ❌

      Source ↗ tina.io/docs/tinacloud/dashboard/projects

      Projects connect TinaCloud with a GitHub repository.

      Source ↗ tina.io/pricing

      Monthly Annually All prices are per-project and in USD . Team For growing teams

      Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1 Repositories Documents Unlimited Unlimited Unlimited Unlimited Unlimited

  2. No
    2 products
    • EmDash
      EmDash embeds per Astro project as a single deployment; no organization or multi-site management layer is documented. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/concepts/architecture

      EmDash is an Astro integration. You add it to astro.config.mjs

      Source ↗ docs.emdashcms.com/why-emdash

      Content lives in the same deployment as your site and is queried through Astro's Live Content Collections within the same process.

    • Sveltia CMS
      Each admin instance binds to one repository, and there is no account or dashboard spanning several sites. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/intro

      It’s not a service but a client-side application, giving you full control over your data. No user registration or subscription required. NPM package is available for self-hosting.

      Source ↗ sveltiacms.app/en/docs/backends/github

      provide the `repo` option with the format `owner/repo`

Can the CMS be branded with your own logo and colors?

  1. Throughout

    Sign-in page and editor, on your own domain.

    1 product
    • Strapi
      The sign-in logo, the menu logo, the favicon and the colours are all replaceable, on your own domain — the logos by upload in the admin panel, the favicon and theme by editing configuration. Vendor documentation Checked
      6 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/admin-panel-customization/logos

      The Strapi admin panel displays a logo in 2 different locations, represented by 2 different keys in the admin panel configuration: Location in the UI Configuration key to update On the login page config.auth.logo In the main navigation config.menu.logo

      Source ↗ docs.strapi.io/cms/admin-panel-customization/favicon

      There are 2 approaches to replacing the favicon: Replace the favicon.png file at the root of a Strapi project Edit the strapi::favicon middleware configuration with the following code

      Source ↗ docs.strapi.io/…/theme-extension

      To extend the theme, use either: the config.theme.light key for the Light mode the config.theme.dark key for the Dark mode

      The default Strapi theme defines various theme-related keys (shadows, colors

      Source ↗ docs.strapi.io/cms/features/admin-panel

      The default Strapi logos, displayed in the main navigation of a Strapi application and the authentication pages, can be modified. Click on the upload area for Menu logo or Auth logo .

      Source ↗ docs.strapi.io/cloud/projects/settings

      Default domain names are made of 2 randomly generated words followed by a hash. They can be replaced by any custom domain of your choice.

  2. Some surfaces

    Some surfaces carry your branding and some do not.

    8 products
    • CloudCannon
      Badge, logo and accent colour reach inside the app, and the Partner Program brands each client; clients reaching a headless Site by its .cloudvent.net link are forwarded to app.cloudcannon.com/update. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ cloudcannon.com/…/customize-your-organization-branding

      You can add two brand assets on the Branding page. Each must be a PNG, JPEG, or SVG: Organization Badge — appears in the App Sidebar and wherever CloudCannon di

      Sites Browser Logo — adds custom branding to your Sites Browser

      Your brand color sets the accent color used across CloudCannon.

      through the CloudCannon Partner Program, you can brand each one with your client's own color and logo, so their editing experience feels like theirs rather than yours.

      Source ↗ cloudcannon.com/…/what-is-client-sharing

      By default, the URL for the Login Page is the Site domain with the suffix "/update"

      CloudCannon will forward clients trying to login to a headless Site using the .cloudvent.net link to the appropriate app.cloudcannon.com/update link.

    • Decap CMS
      The login-page and header logo can be replaced. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/configuration-options

      the CMS UI will change the logo displayed at the top of the login page, allowing you to brand the CMS with your own logo.

      if set to true, the logo will also be shown in the header of the CMS when logged in.

    • EmDash
      Your logo, name and favicon on sign-in and admin; the /_emdash/admin URL, the sidebar version line and some messages still say EmDash. Tested Checked
    • Keystatic
      The Admin UI's brand name and logo mark are configurable; the GitHub sign-in is not branded. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/user-interface

      we've set the brand name, which will be used in the Admin UI as the title of the app. You can also set the brand mark using a React component to render your logo or anything you like.

      Source ↗ keystatic.com/docs/github-mode

      you will be prompted to login with GitHub

    • Payload CMS
      The admin UI's logo is replaceable, including on the login view; a custom domain is not documented. Vendor documentation Checked
      7 quotes from 1 source

      Source ↗ payloadcms.com/docs/custom-components/root-components

      To add a custom logo, use the admin.components.graphics.Logo property in your Payload Config

      The Logo property is the full logo used in contexts like the Login view. This is typically a larger, more detailed representation of your brand.

      To add a custom icon, use the admin.components.graphics.Icon property in your Payload Config

      The Icon property is the simplified logo used in contexts like the Nav component. This is typically a small, square icon that represents your brand.

      Root Components are those that affect the Admin Panel at a high-level, such as the logo or the main nav. You can swap out these components with your own Custom Components to create a completely custom look and feel.

      you can create a truly unique experience for your users, such as white-labeling the Admin Panel to match your brand.

      The Nav property contains the sidebar / mobile menu in its entirety. Use this property to completely replace the built-in Nav with your own custom navigation.

    • Storyblok
      Enterprise can replace the in-app logo, and organizations can serve the editor on a custom domain; the sign-in page's own branding is not separately documented. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/organizations

      Enterprise customers can replace Storyblok's logo with their own logo in the application.

      Organizations can also configure a custom domain for the Visual Editor as well as new user invitations, ensuring users access the app through a company domain.

    • Sveltia CMS
      The logo and app title are replaceable, but a “Powered by Sveltia CMS” line stays on the login page. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/customization

      Where the Logo Appears Login page Header of the admin interface (when show_in_header is set to true) Browser tab (favicon)

      Note that this is not a white-label solution, so the name of Sveltia CMS will remain visible in some places. When a custom title is set, a small "Powered by Sveltia CMS" label will appear in the footer of the login page.

    • TinaCMS
      The editor sits on your own domain and the project name shown at sign-in is yours to set, but editors sign in to TinaCloud. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ tina.io/docs/using-tina-editor

      This (and the editor) can be accessed at the /admin/index.html route of your website.

      Source ↗ tina.io/docs/tinacloud/dashboard/users

      When a site is configured to use TinaCloud, an authorized user will be prompted for their TinaCloud credentials to access the editing route of the site.

      Source ↗ tina.io/docs/tinacloud/dashboard/projects

      the following properties must be configured: Project Name This name is shown to your users when they log in to the project. Defaults to the repository name. Site URL(s) In these fields, enter both the local URL and the production site URL

  3. No

    The client sees the vendor's product.

    2 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      Tested Checked
  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Sanity
      Not tested Undated

Does the product keep a record of who did what?

  1. Published changes only

    Covers what was published, and nothing else.

    all 12
    • ZeroCMS
      Git covers published changes, not in-product activity such as sign-ins, invites, role changes or discarded edits. Tested Checked
    • CloudCannon
      File changes (with author, date, time and commit message), Site and branch settings changes, and syncing/output errors are logged. Vendor documentation Checked
      6 quotes from 4 sources

      Source ↗ cloudcannon.com/…/tour-your-site

      On the Activity tab of your Site Dashboard , CloudCannon will show you a list of recent activity on your Site in reverse chronological order. This list refreshes every time you sync your Site or update your Site Settings . This list includes:

      Every change made to your files from within CloudCannon or your Git provider (including the author, date, time, and commit message, if applicable). When your Site has Syncing or Output errors. Any changes made to your Site Settings , or Branch and Publish Branch settings.

      On the Syncs tab of your Site Dashboard , CloudCannon will show you a list of syncing logs for your Site in reverse chronological order.

      Source ↗ cloudcannon.com/documentation/user-glossary

      Activity # A log or feed that displays recent actions and events within CloudCannon, such as site builds, content updates, user logins, and other platform interactions.

      Source ↗ cloudcannon.com/…/permissions

      site:activity # Available scopes: Project , Site , Global read → Allow users to view the history of activity for a Site.

      Source ↗ cloudcannon.com/…/organizations

      List an Organization's Activity GET /api/v0/orgs/{org_uuid}/activity Path parameters: org_uuid UUID Required

    • Decap CMS
      Git commit history covers published content changes. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/turbo-how-it-works

      Every save still becomes a real commit in your GitHub or GitLab repo, on the branch you configured

    • EmDash
      A first-party audit-log plugin and invocation logging (plugin, tool, route, actor) exist; coverage of sign-ins, invites and role changes is not documented. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ github.com/emdash-cms/emdash

      First-party plugins (forms, embeds, SEO, audit-log, etc.)

      Source ↗ docs.emdashcms.com/reference/mcp-server

      invocations are recorded in the audit log with plugin, tool, route, and actor provenance.

    • Keystatic
      The Git commit history records who changed content; sign-ins, invites and role or permission changes are not logged. Tested Checked
    • Pages CMS
      Git commit history covers published content changes, not in-product activity such as sign-ins, invites or collaborator changes. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org/docs/configuration/settings

      update Update {path} (via Pages CMS) delete Delete {path} (via Pages CMS)

      user Send the current user's name and email as committer metadata when available.

    • Payload CMS
      Version history covers changes to documents, user records included; sign-ins and other authentication events are not documented. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/versions/overview

      When enabled, Payload will automatically scaffold a new Collection in your database to store versions of your document(s) over time, and the Admin UI will be extended with additional views that allow you to browse document versions, view diffs in order to see exactly what has changed in your documents (and when they changed), and restore documents back to prior versions easily.

      If you enable versions but keep draft mode disabled, Payload will simply create a new version of a document each time you update a document.

      collection of users, where you might want to keep a version history (or audit log) of all changes ever made to users

      Versions are extremely performant and totally opt-in.

    • Sanity
      The Activity Feed logs project and team management events, exportable as CSV. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/platform-management/activity-feed

      An event is created when various actions are performed in the system. This can be by a user, by Sanity, or even by a robot token.

      Actions for projects and teams are available as a CSV export from the manage dashboard for each project.

    • Storyblok
      Logs create, update and delete of content and configuration; sign-in coverage is not documented and the extended log is an Enterprise feature. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/api/management/activities

      Activities are created on update, create and delete actions in Storyblok for resources like stories, components, spaces, datasources and datasource entries.

      Source ↗ storyblok.com/faq/what-is-extended-activity-log

      The extended activity log offered as part of Storyblok's Enterprise plan is a valuable feature.

    • Strapi
      Sign-ins, role and user changes, content and media, searchable, with each event's JSON payload readable in a modal; it needs an Enterprise plan. Vendor documentation Checked
      7 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/audit-logs

      Audit Logs captures every administrative action in a searchable, filterable history to aid troubleshooting and compliance.

      Login / Logout success , fail Role / Permission create , update , delete User create , update , delete

      Entry (draft/publish) create , update , delete , publish , unpublish Media create , update , delete

      In the modal, the Payload section displays the details in an interactive JSON component, enabling you to expand and collapse the JSON object.

      Actions that only read content are not logged.

      This feature is available with an Enterprise plan.

      Source ↗ docs.strapi.io/cms/configurations/admin-panel

      auditLogs.retentionDays How long Audit Logs are kept, in days.

    • Sveltia CMS
      Git commit history covers published content changes, but not in-product activity such as sign-ins or invites — there is no account system to log. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      Content is stored in your Git repository, giving you full control, complete version history, and collaboration capabilities. No database is required. Every change is auditable.

      Currently, Sveltia CMS does not have a built-in user authentication system. Instead, it relies on the Git backend for user authentication and access control.

    • TinaCMS
      Git tracks every content change and, by default, attributes all of it to one bot; Tina lists audit logs among the features it does not have. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ tina.io/enterprise

      Your content lives in Git, providing you full version history, safe rollback and branch-based workflows. Every change is tracked automatically, making auditing and compliance significantly easier

      Source ↗ tina.io/docs/faq

      By default when using TinaCloud, the author on Git commits is the TinaCloud GitHub app . Some users prefer to know who made the change.

      Source ↗ tina.io/docs/forestry/missing-forestry-features

      Below is a list of features that exist in Forestry, but are currently missing from TinaCMS.

      Considering Support Audit Logs Considering Support Media Netlify Large Media Not Considering Support

How editors can sign in.

  1. Email and passwordGit host
    Git host
    Signing in with the Git host account.
    2 products
    • Storyblok
      Native sign-in is email or GitHub; Google, Microsoft, Okta and others arrive through SSO. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ storyblok.com/docs/manuals/account

      Create an account by signing up at app.storyblok.com with your email address or a GitHub account.

      Source ↗ storyblok.com/docs/concepts/sso-and-scim

      SSO is a Premium and Elite feature.

      Google Workspace JumpCloud Microsoft Entra ID Okta OneLogin Salesforce

    • TinaCMS
      Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ tina.io/docs/tinacloud/dashboard/registration

      Register for TinaCloud by navigating to the registration page . You can register with either an existing GitHub account or create a new TinaCloud account:

      Source ↗ tina.io/docs/faq

      Do I need a GitHub account to edit? No! Only the individual who sets up the TinaCloud project, linking it to a GitHub repository, requires GitHub. Editors can create a TinaCloud account with just their email.

      Source ↗ tina.io/blog/two-factor-authentication

      Log in to your TinaCloud account using your email and password.

      For users who log in via GitHub, MFA functionality is managed directly through GitHub.

      Source ↗ tina.io/docs/tinacloud/dashboard/projects

      When setting up a project, the first step will be to authenticate with GitHub. A popup window will ask for permission to give Tina.io access to your GitHub repositories.

  2. Git hostSomething else
    Git host
    Signing in with the Git host account.
    2 products
    • Pages CMS
      GitHub OAuth for repository owners, and email sign-in for invited collaborators without a GitHub account. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ pagescms.org/docs/quick-start

      Sign in with GitHub. Install the GitHub App on the account or organization that owns your repository.

      Source ↗ pagescms.org/docs/configuration/collaborators

      Collaborators are invited by email. Use them when someone needs to edit content or media but does not have a GitHub account.

      Source ↗ pagescms.org

      Email invites Invite users via email, no other account needed.

    • Sveltia CMS
      OAuth “Sign in with” the Git host, or a personal access token; no email, Google, Microsoft or magic-link option. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/backends

      By default, Sveltia CMS allows users to sign in using either OAuth or an access token.

      Source ↗ sveltiacms.app/en/docs/backends/github

      The authorization code flow requires you to set up an OAuth app on GitHub and deploy an OAuth client server to handle the authentication process.

  3. Email and password
    1 product
    • Payload CMS
      SAML and OAuth identity providers belong to the quote-only enterprise tier. Vendor documentation Checked
      14 quotes from 5 sources

      Source ↗ payloadcms.com/docs/authentication/overview

      Strategies Out of the box Payload ships with three powerful Authentication strategies: HTTP-Only Cookies JSON Web Tokens (JWT) API-Keys Each of these strategies can work together or independently.

      disableLocalStrategy Advanced - disable Payload's built-in local auth strategy. Only use this property if you have replaced Payload's auth mechanisms with your own.

      Note: Auth-enabled Collections will be automatically injected with the hash , salt , and email fields.

      loginWithUsername Ability to allow users to login with username/password.

      Note: By default, Payload provides an auth-enabled User Collection which is used to access the Admin Panel.

      Custom Strategies There are cases where these may not be enough for your application. Payload is extendable by design so you can wire up your own strategy when you need to.

      Source ↗ payloadcms.com/docs/plugins/overview

      These plugins are maintained by the Payload team and its contributors and are guaranteed to be stable and up-to-date. Form Builder MCP Multi-Tenant Nested Docs Redirects Search Sentry SEO Stripe Import/Export Ecommerce

      Source ↗ payloadcms.com/headless-cms-auth

      Single sign-on (SSO) Enterprise clients can seamlessly integrate with any SAML or OAuth 2.0 identity provider, and eliminate the need to maintain individual logins.

      Source ↗ payloadcms.com/enterprise/single-sign-on-sso

      OAuth and SAML Support Integration with industry leaders Payload integrates with the security protocols of major OAuth 2.0 and SAML providers, including Microsoft Azure ID, Okta, Google, and more.

      Schedule time with us What we'll talk about: Dedicated engineering support Demo of enterprise features, including visual editing and AI Custom solutions to extend Payload

      Source ↗ payloadcms.com/get-started

      Enterprise customers can unlock dedicated support, hosting, and advanced features like SSO and visual editing.

      Enterprise Deploy anywhere — self-hosted or with Payload. Includes dedicated support plus features like SSO, visual editing, and more.

      Unlimited custom domains White-labeled email service Roadmap influence Dedicated Support Enterprise Features Get a Demo Get a Demo

      Self-hosted Free Payload is open source and MIT licensed. Deploy it anywhere you can run a Node.js app — for free, forever.

  4. Git hostEmail and passwordGoogle
    Git host
    Signing in with the Git host account.
    1 product
    • Decap CMS
      Direct backends use the git-host account; the hosted sign-in adds email/password and Google. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/github-backend

      the github backend allows CMS users to log in directly with their GitHub account.

      Source ↗ decapcms.org/docs/turbo-getting-started

      email/password, or one of the sign-in providers your organization has enabled, e.g. Google or GitHub

  5. Git hostEmail and passwordGoogleMicrosoftMagic linkSomething else
    Git host
    Signing in with the Git host account.
    Magic link
    A sign-in link sent by email.
    1 product
    • ZeroCMS
      The remaining methods include a one-time emailed code, a passkey, and Google One Tap. Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ clerk.zerocms.io/v1/environment

      "identification_strategies":["email_address","oauth_github","oauth_google","oauth_microsoft"],"first_factors":["email_code","email_link","google_one_tap","oauth_github","oauth_google","oauth_microsoft","passkey","password","reset_password_email_code","ticket"]

      "email_address":{"enabled":true,"required":true,"used_for_first_factor":true,"first_factors":["email_code","email_link"],"used_for_second_factor":false,"second_factors":[],"verifications":["email_code"]

      "social":{"oauth_github":{"enabled":true,"required":false,"authenticatable":true,"block_email_subaddresses":false,"strategy":"oauth_github","not_selectable":false,"deprecated":false,"name":"GitHub"

      "strategy":"oauth_google","not_selectable":false,"deprecated":false,"name":"Google","logo_url":"https://img.clerk.com/static/google.png"},"oauth_microsoft":{"enabled":true,"required":false,"authenticatable":true,"block_email_subaddresses":false,"strategy":"oauth_microsoft","not_selectable":false,"deprecated":false,"name":"Microsoft"

      "password":{"enabled":true,"required":true,"used_for_first_factor":false,"first_factors":[],"used_for_second_factor":false,"second_factors":[],"verifications":[],"verify_at_sign_up":false

      "first_name":"required","last_name":"required","email_address":"on","phone_number":"off","username":"off","password":"required"

      Source ↗ zerocms.io/privacy

      Social Media Login Data. We may provide you with the option to register with us using your existing third-party account details, such as your GitHub account.

      names usernames email addresses passwords job titles billing addresses contact preferences contact or authentication data GitHub account identifiers

      Source ↗ zerocms.io/features/access-management

      Teammates join your Zero organization with just an email invite — they don't need a GitHub account or any access to your repo. Zero handles the authentication layer so you don't have to.

  6. Email and passwordGoogleMicrosoftGit hostSomething else
    Git host
    Signing in with the Git host account.
    1 product
    • Strapi
      The rest is Okta, Keycloak, Discord and any valid Passport strategy that needs no additional custom data; every provider beyond a password needs the Enterprise plan or the SSO add-on. Vendor documentation Checked
      9 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/configurations/guides/configure-sso

      Single Sign-On (SSO) on Strapi allows you to configure additional sign-in and sign-up methods for the Strapi admin panel.

      Google Learn how to configure SSO with Google and Strapi. GitHub Learn how to configure SSO with GitHub and Strapi. Discord Learn how to configure SSO with Discord and Strapi. Microsoft Learn how to configure SSO with Microsoft and Strapi. Keycloak Learn how to configure SSO with Keycloak and Strapi. Okta Learn how to configure SSO with Okta and Strapi.

      Strapi uses Passport.js , which enables a large selection of providers. Any valid passport strategy that doesn't need additional custom data should therefore work with Strapi.

      To configure SSO on your application, you will need an Enterprise This feature is available with an Enterprise plan. plan or the SSO This feature is available with the SSO add-on. add-on.

      Source ↗ docs.strapi.io/cms/features/sso

      To access the admin panel using a specific provider instead of logging in with a regular Strapi administrator account

      Source ↗ docs.strapi.io/…/setting-up-admin-panel

      Go to the URL of your Strapi application's admin panel. Enter your credentials to log in. Click on the Login button.

      Source ↗ docs.strapi.io/cms/features/rbac

      Email Write the administrator's complete email address in the textbox. Username Write the administrator's username in the textbox. Password Write the new administrator account's password in the textbox.

      Source ↗ strapi.io/pricing-cms

      Single Sign-On Add-on $150 /month (+$50/month/seat) Authenticate with Okta, Active Directory, or multiple other SAML 2.0 or OAuth2 providers.

      Community Free Forever Get Started Plan features Open-Source under MIT License Role Based Access Control REST & GraphQL API Powerful Content Management Infinite Customization Capabilities Unlimited Usage (Entries, API calls, etc.) Community Support

  7. Git hostEmail and passwordSomething else
    Git host
    Signing in with the Git host account.
    1 product
    • CloudCannon
      The rest is SAML on the Enterprise plan, and a shared site password for clients from outside the organization. Vendor documentation Checked
      9 quotes from 7 sources

      Source ↗ app.cloudcannon.com

      Log in with GitHub Log in with Bitbucket Log in with GitLab or Email address Log in with email

      Source ↗ app.cloudcannon.com/register

      Sign up with GitHub Sign up with Bitbucket Sign up with GitLab Sign up with email

      Source ↗ app.cloudcannon.com/users/sign_in

      Log in Email Address Password Forgot your password? Log in Return to login options

      Source ↗ cloudcannon.com/…/what-are-login-sessions

      Login method — The method used to sign in (Email, GitHub, GitLab, Bitbucket, or SAML/SSO).

      Source ↗ cloudcannon.com/…/create-a-cloudcannon-account

      Click on the Sign up with email button. Enter your email in the Email address field and click the Send Code button.

      Enter your first name, last name, and an account password, and whether you are a developer or a content editor. Your password must be at least nine characters long.

      Source ↗ cloudcannon.com/…/what-is-sso-saml

      CloudCannon supports Single Sign-On (SSO) using a Security Assertion Markup Language (SAML) for customers on our Enterprise plan

      Source ↗ cloudcannon.com/…/what-is-client-sharing

      Client Sharing allows you to invite someone from outside your Organization (called a Client) to view, edit, and publish content for a specific Site. Clients do not need to have a CloudCannon account. Instead, they log into CloudCannon using a site-specific password.

      Although an unlimited number of people can use a Client Sharing password to log in to a Site, we do not recommend giving a Client Sharing password to multiple people.

  8. Git host
    Git host
    Signing in with the Git host account.
    1 product
    • Keystatic
      GitHub OAuth is the documented method; Keystatic Cloud lets team members edit without a GitHub account, but the sign-in it uses is not documented. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/github-mode

      With github mode on, visit the /keystatic route. You will be prompted to login with GitHub.

      Source ↗ keystatic.com/docs/cloud

      It skips the more complicated process of setting up GitHub mode, while also allowing team members to edit content without needing a GitHub account.

  9. Git hostGoogleMagic linkSomething else
    Git host
    Signing in with the Git host account.
    Magic link
    A sign-in link sent by email.
    1 product
    • EmDash
      Passkeys are the primary method; GitHub, Google and Atmosphere (AT Protocol) OAuth ship built-in, magic links are the email fallback, and providers are pluggable. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      EmDash uses passkey authentication as its primary login method.

      GitHub, Google, and the Atmosphere (AT Protocol) ship out of the box, and the same provider interface is open for third-party packages.

      If you can't use your passkey (e.g., lost device), magic links provide an alternative.

  10. GoogleGit hostSomething else
    Git host
    Signing in with the Git host account.
    1 product
    • Sanity
      Beyond Google and GitHub, sign-in offers a native Sanity account and Vercel. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/cli-reference/login

      log in using a provider id (google, github, sanity, vercel)

Whether an editor can be added by emailing them a link.

  1. Yes
    9 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/access-management

      Securely invite teammates via email and set their roles.

      Teammates join your Zero organization with just an email invite — they don't need a GitHub account or any access to your repo.

    • CloudCannon
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ cloudcannon.com/…/add-a-team-member-to-your-organization

      CloudCannon will open the Invite team members to your Organization modal. Enter the email address of the person you want to add to your Organization

      CloudCannon will send an email to your pending Team Members , inviting them to your Organization

    • Decap CMS
      Email invites come through the hosted Members page or Netlify Identity. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/turbo-roles-and-members

      Members page (owners only), invite by email and optionally grant access to specific sites

      Source ↗ decapcms.org/docs/choosing-a-backend

      you can invite users from the Netlify dashboard.

    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      Enter the user's email and select a role

      Invites are valid for 7 days. Admins can resend or revoke invites from the Users page.

    • Pages CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/collaborators

      Collaborators are invited by email. Use them when someone needs to edit content or media but does not have a GitHub account.

      Source ↗ pagescms.org

      Email invites Invite users via email, no other account needed.

    • Payload CMS
      Tested Checked
    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/cli-reference/users

      usage $sanity users invite [email] [-p

    • Storyblok
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/manuals/organizations

      To get started, invite users to your organization and assign them to one or more spaces with specific roles and permissions.

      Source ↗ storyblok.com/faq/can-i-whitelabel-storyblok

      will be used in email invitations sent to users when inviting them to your organization or spaces

    • TinaCMS
      Invitations go out by email — the changelog documents invitation emails, their subject lines and project-name personalisation. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ raw.githubusercontent.com/…/2026.01.3.json

      "changesDescription": "Revise email invitation messages and links",

      Source ↗ raw.githubusercontent.com/…/2026.04.3.json

      "changesDescription": "feat: include project name in invitation emails",

      Source ↗ raw.githubusercontent.com/…/2026.04.4.json

      "changesDescription": "Update Email Subject and Bodies for User invites",

  2. No
    3 products
    • Keystatic
      Tested Checked
    • Strapi
      Inviting an administrator creates the account and produces a sign-in link, which you then have to deliver to them yourself. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.strapi.io/cms/features/rbac

      A URL appears at the top of the window: it is the URL to send the new administrator for them to log in for the first time to your Strapi application.

    • Sveltia CMS
      Every editor must already hold an account on the chosen Git host; there is no email-invite path. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      users need to have an account with the chosen Git service provider (e.g. GitHub) to access the CMS, though they don’t need to know Git itself or how to use the service.

Whether editors can sign in through your identity provider.

  1. Yes
    7 products
    • CloudCannon
      Enterprise plan only. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ cloudcannon.com/…/what-is-sso-saml

      CloudCannon supports Single Sign-On (SSO) using a Security Assertion Markup Language (SAML) for customers on our Enterprise plan

    • Decap CMS
      SSO/SAML is an Enterprise-tier feature. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/turbo

      Enterprise Agencies and orgs running many sites

      Custom/granular roles SSO/SAML Dedicated support & SLA

    • Payload CMS
      Advertised on the enterprise tier and documented nowhere. Vendor claim Checked
      5 quotes from 3 sources

      Source ↗ payloadcms.com/enterprise/single-sign-on-sso

      03 OAuth and SAML Support Integration with industry leaders Payload integrates with the security protocols of major OAuth 2.0 and SAML providers, including Microsoft Azure ID, Okta, Google, and more.

      Payload for Enterprise / Single Sign-On (SSO) Schedule a Demo Single Sign-On (SSO) Schedule a Demo Single Sign-On (SSO) Enhance the security of your app while modernizing user access.

      Source ↗ payloadcms.com/security

      01 Single Sign-On (SSO) SSO integrates with any SAML or OAuth 2.0 identity provider, and meets the requirements the highest enterprise security standards.

      Source ↗ payloadcms.com/enterprise

      Enterprise features Coming Soon Visual Editor Save a trip to your admin panel by swiftly making text or image modifications on the fly, or reconfigure entire pages alongside your team. Explore Explore Single Sign-On (SSO) Seamlessly integrate with any SAML or OAuth 2.0 identity provider, and eliminate the need to maintain individual logins.

      Enterprise Features SSO AI Auto-Embedding Publishing Workflows Visual Editor Static A/B testing AI features

    • Sanity
      A SAML SSO feature available on Enterprise plans. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/developer-guides/sso-saml

      SAML (Security Assertion Markup Language) SSO (single sign-on) enables your organization to control access to Sanity projects by using a third-party identity provider.

      This feature is available on certain Enterprise plans.

    • Storyblok
      SSO with SCIM user provisioning; a Premium and Elite feature. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/sso-and-scim

      SSO is a Premium and Elite feature.

      Storyblok supports the following IdPs and SAML standards:

      In addition to SSO, Storyblok organization and space admins can use the system for cross-domain identity management (SCIM) standard to reduce manual processes and keep access in sync.

    • Strapi
      Advertised as SAML 2.0 in the SSO add-on's pricing description, though the setup documentation covers only OpenID and OAuth; an Enterprise plan or a paid add-on either way. Vendor claim Checked
      7 quotes from 4 sources

      Source ↗ strapi.io/features/single-sign-on-sso

      Strapi’s SSO Enterprise feature enhances security by allowing your organization to centralize authentication through your preferred identity provider.

      Source ↗ strapi.io/pricing-cms

      Single Sign-On Add-on $150 /month (+$50/month/seat) Authenticate with Okta, Active Directory, or multiple other SAML 2.0 or OAuth2 providers.

      Source ↗ docs.strapi.io/cms/features/sso

      Plan CMS Enterprise plan, or SSO add-on with the CMS Growth plan

      Source ↗ docs.strapi.io/cms/configurations/guides/configure-sso

      Configure SSO providers in the Strapi admin panel by registering OAuth/OIDC applications

      In the provider's dashboard (e.g. Azure AD, Okta, Google, GitHub), create a new OAuth/OIDC application for Strapi.

      The following examples show how SSO is configured for the most common providers: Google Learn how to configure SSO with Google and Strapi. GitHub Learn how to configure SSO with GitHub and Strapi. Discord Learn how to configure SSO with Discord and Strapi. Microsoft Learn how to configure SSO with Microsoft and Strapi.

      Keycloak Learn how to configure SSO with Keycloak and Strapi. Okta Learn how to configure SSO with Okta and Strapi.

    • TinaCMS
      Advertised on the enterprise tier as SAML and OIDC with Okta, Entra ID and Google Workspace. Vendor claim Checked
      3 quotes from 2 sources

      Source ↗ tina.io/enterprise

      Single Sign On Compatible with leading identity providers including Okta, Entra ID (Azure AD), and Google Workspace, with full support for both SAML and OIDC

      Source ↗ tina.io/pricing

      Enterprise For custom needs Custom Contact Sales

      Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow AI Features (Coming Soon) API (Beta) GitHub Enterprise Support SSO

  2. No
    5 products
    • ZeroCMS
      Tested Checked
    • EmDash
      No native SAML; SSO can be added by fronting the deployment with Cloudflare Access. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      Users authenticate with your company's IdP

      Access handles authentication at the edge.

    • Keystatic
      The Cloud plans enumerate Free and Pro by users and price only; no SAML or enterprise SSO tier appears anywhere. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      The free plan allows for up to 3 users per team.

      Keystatic Cloud Pro starts at $10/month. Adding beyond 3 users to a team costs $5/month per user.

      Besides allowing you to add more than 3 users to a team, Keystatic Cloud Pro also offers the following features:

      Multi-player editing (experimental): collaborate with other editors in real-time on the same document.

      upload, transform and serve optimized images without cluttering your GitHub repository.

    • Pages CMS
      The supported auth is a GitHub App and Better Auth; the environment lists no SAML or SSO option. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ pagescms.org/docs/development/environment-variables

      GITHUB_APP_CLIENT_ID GitHub App client ID. GITHUB_APP_CLIENT_SECRET GitHub App client secret.

      BETTER_AUTH_SECRET Secret used by Better Auth. AUTH_SECRET is also accepted.

      Only these canonical names are supported.

    • Sveltia CMS
      The only sign-in methods are Git-host OAuth and access tokens; any SSO would come from the Git host, not Sveltia. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/backends

      By default, Sveltia CMS allows users to sign in using either OAuth or an access token.

      Source ↗ sveltiacms.app/en/docs/intro

      Currently, Sveltia CMS does not have a built-in user authentication system. Instead, it relies on the Git backend for user authentication and access control.

Whether a second factor is offered or required.

  1. Enforceable

    Can be required for everyone.

    1 product
    • CloudCannon
      An authenticator-app second factor of CloudCannon's own; requiring it across a team is a Team-plan feature. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ cloudcannon.com/…/enforce-multi-factor-authentication

      Requiring your team members to use multi-factor authentication on CloudCannon can add an extra layer of security to your Organization

      Check the Require multi-factor authentication (MFA) check box. Enter the date after which CloudCannon will require multi-factor authentication to view your Organization.

      After the specified date, CloudCannon will require team members in your Organization to have multi-factor authentication enabled to view your Organization and Sites.

      This feature is available to customers on our Team and Enterprise Plans

      Source ↗ cloudcannon.com/…/what-is-multi-factor-authentication

      Multi-factor authentication in CloudCannon uses a third-party authentication app.

  2. Optional

    Available, and each editor chooses.

    2 products
    • Storyblok
      Storyblok's own 2FA (authenticator app, SMS or email) is opt-in per user and is not enforced for GitHub sign-in. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/account

      Visit Account settings → Security to change your password or enable two-factor authentication (2FA). 2FA is available via authenticator apps, SMS, and email.

      If you log in to Storyblok using GitHub, two-factor authentication will not be enforced.

    • TinaCMS
      Each person turns on their own authenticator app; it is available for email logins, and GitHub logins take their MFA from GitHub. Vendor documentation Checked
      6 quotes from 1 source

      Source ↗ tina.io/blog/two-factor-authentication

      TinaCloud now supports Multi-Factor Authentication (MFA), adding an extra layer of security to your account.

      MFA is available for accounts using email logins.

      This additional step uses a Time-based One-Time Password (TOTP) generated by a compatible authenticator app, such as Google Authenticator, Authy, or 1Password.

      Navigate to your Account Settings and find the Multi-Factor Authentication section.

      Follow the prompts to scan a QR code using your preferred TOTP app.

      For users who log in via GitHub, MFA functionality is managed directly through GitHub.

  3. Your provider's

    Whatever the sign-in provider enforces.

    9 products
    • ZeroCMS
      Tested Checked
    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      Modern authentication: Using GitHub, GitLab, or Bitbucket and JSON web tokens.

    • EmDash
      EmDash ships no native second factor; MFA comes from the identity provider behind Cloudflare Access. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/authentication

      User authenticates (SSO, MFA, etc.)

      Access handles authentication at the edge.

    • Keystatic
      Sign-in is delegated to GitHub. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/github-mode

      you will be prompted to login with GitHub

    • Pages CMS
      Pages CMS has no second factor of its own; GitHub users get GitHub's MFA. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/quick-start

      Sign in with GitHub. Install the GitHub App on the account or organization that owns your repository.

    • Payload CMS
      The built-in email and password sign-in carries no second factor; one can arrive with an identity provider behind enterprise SSO. Vendor documentation Checked
      7 quotes from 3 sources

      Source ↗ payloadcms.com/docs/authentication/operations

      Accepts an email and password . On success, it will return the logged in user as well as a token that can be used to authenticate.

      On this page Access Me Login Logout Refresh Verify by Email Unlock Forgot Password Reset Password

      Source ↗ payloadcms.com/security

      Payload provides a comprehensive range of security features designed to safeguard your data effectively.

      01 Single Sign-On (SSO) SSO integrates with any SAML or OAuth 2.0 identity provider, and meets the requirements the highest enterprise security standards. 02 Authentication Payload's user Auth is built on secure, HttpOnly cookies to protect from MITM (Man in the Middle) and XSS (cross site scripting) attacks.

      03 Access Control Deep access control down to the field level allows for granular management of data access and modification rights. 04 CSRF Prevention Cross-Site Request Forgery (CSRF) prevention will verify the authenticity of each request to your API to prevent a malicious action.

      05 Cross Origin Resource Sharing You can determine a whitelist array of URLS to allow CORS requests from, or a wildcard string ('*') to accept incoming requests from any domain.

      Source ↗ payloadcms.com/headless-cms-auth

      Single sign-on (SSO) Enterprise clients can seamlessly integrate with any SAML or OAuth 2.0 identity provider, and eliminate the need to maintain individual logins.

    • Sanity
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sanity.io/docs/cli-reference/login

      Log in using a provider ID (google, github, sanity, vercel)

      Source ↗ sanity.io/docs/developer-guides/sso-saml

      SAML (Security Assertion Markup Language) SSO (single sign-on) enables your organization to control access to Sanity projects by using a third-party identity provider

      users who log in to a project through Sanity Studio or Sanity Manage are authenticated through the organization's identity provider

    • Strapi
      The built-in password sign-in carries no second factor; one can only arrive with an identity provider behind paid single sign-on. Vendor documentation Checked
      9 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/features/sso

      Users locked out of local authentication will be forced to use SSO to login and will not be able to change or reset their password.

      To access the admin panel using a specific provider instead of logging in with a regular Strapi administrator account

      The Single Sign-On (SSO) feature can be made available on a Strapi application to allow administrators to authenticate through an identity provider (e.g. Microsoft Azure Active Directory).

      Enterprise This feature is available with an Enterprise plan. SSO This feature is available with the SSO add-on.

      Source ↗ docs.strapi.io/…/setting-up-admin-panel

      Go to the URL of your Strapi application's admin panel. Enter your credentials to log in. Click on the Login button.

      Source ↗ docs.strapi.io/cms/features/rbac

      Email Write the administrator's complete email address in the textbox. Username Write the administrator's username in the textbox. Password Write the new administrator account's password in the textbox.

      Source ↗ strapi.io/pricing-cms

      Single Sign-On Add-on $150 /month (+$50/month/seat) Authenticate with Okta, Active Directory, or multiple other SAML 2.0 or OAuth2 providers.

      Community Free Forever Get Started Plan features Open-Source under MIT License Role Based Access Control REST & GraphQL API Powerful Content Management Infinite Customization Capabilities Unlimited Usage (Entries, API calls, etc.) Community Support

      Source ↗ strapi.io/blog/authentication-and-authorization

      Securing the Admin Panel Enforce NIST-compliant password requirements (minimum 8 characters, no forced complexity). Consider implementing MFA using phishing-resistant methods such as FIDO2/WebAuthn or TOTP through OAuth 2.0 providers like Auth0.

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      it relies on the Git backend for user authentication and access control.

Which Git hosts the product works with.

  1. GitHubGitLabBitbucketGiteaForgejoAzure DevOps
    1 product
    • Decap CMS
      By design
  2. GitHubGitLabGiteaForgejo
    1 product
    • Sveltia CMS
      By design
  3. GitHubGitLabBitbucket
    1 product
    • CloudCannon
      By design
  4. GitHub
    4 products
    • ZeroCMS
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • TinaCMS
      By design
  5. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply

Does the product work with a Git host you run yourself.

  1. Yes
    4 products
    • CloudCannon
      Self-hosted GitLab and GitHub Enterprise Server, both on the Enterprise plan. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/…/connecting-a-self-hosted-gitlab-repository-as-your-source

      Connecting to your self-hosted GitLab allows you to work on your websites locally and have the changes sync to CloudCannon.

      This feature is available on our Enterprise plan . Want to chat about whether this feature is right for you?

      Source ↗ cloudcannon.com/…/connecting-a-github-enterprise-server-repository-as-your-source

      Connecting to your GitHub Enterprise Server allows you to work on your websites locally and have the changes synced to CloudCannon.

      This feature is available on our Enterprise plan . Want to chat about whether this feature is right for you?

    • Decap CMS
      GitHub Enterprise and self-hosted GitLab and Gitea instances are supported. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/backends-overview

      Only necessary in certain cases, like with GitHub Enterprise or self-hosted GitLab/Gitea.

      Source ↗ decapcms.org/docs/gitlab-backend

      You can also use PKCE Authorization with a self-hosted GitLab instance.

    • Sveltia CMS
      GitHub Enterprise, self-hosted GitLab, and self-hosted Gitea/Forgejo (including Codeberg) are supported via base_url options. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ sveltiacms.app/en/docs/backends/github

      If you use a self-hosted GitHub Enterprise instance, you need to set the `base_url` and `api_root` options in your backend configuration to point to your GitHub Enterprise server URL.

      Source ↗ sveltiacms.app/en/docs/backends/gitlab

      If you use a self-hosted GitLab instance, you need to set the `base_url` and `api_root` options

      Source ↗ sveltiacms.app/en/docs/backends/gitea-forgejo

      If you use a self-hosted Gitea or Forgejo instance or a hosting service like Codeberg, you need to set the `base_url` and `api_root` options

    • TinaCMS
      GitHub Enterprise Server on the Enterprise plan, and only if TinaCloud can reach it over the network. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ tina.io/docs/tinacloud/github-enterprise-integration

      This is a TinaCloud Enterprise feature This guide provides step-by-step instructions for integrating a GitHub Enterprise (GHE) instance with TinaCloud.

      This integration supports both GitHub Enterprise Server (self-hosted) and GitHub Enterprise Cloud (GitHub-hosted), with the caveat that GitHub Enterprise Server must be accessible by TinaCloud.

      Once the server is successfully configured, users will be able to select it when creating new projects in TinaCloud.

      Source ↗ tina.io/pricing

      Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow AI Features (Coming Soon) API (Beta) GitHub Enterprise Support SSO

      Source ↗ tina.io/docs/faq

      Does TinaCloud only work with GitHub repositories? Currently yes, the first Git provider that TinaCloud integrates with is GitHub. Other Git providers may be available in the future.

  2. No
    2 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ pagescms.org

      Do you only support GitHub? Yes. Supposedly, we could add GitLab and Bitbucket support, but the assumption is the vast majority of users will be on GitHub.

      Source ↗ pagescms.org/docs/development/environment-variables

      Only these canonical names are supported.

      GITHUB_APP_NAME GitHub App slug used in GitHub URLs.

  3. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Keystatic
      Keystatic's documentation explains connecting a GitHub repository but never says whether a self-hosted GitHub Enterprise Server instance can be used. Not tested Undated

Does the product support private repositories?

  1. Yes
    7 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor claim Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/…/hugo-modules

      Hugo Modules can use public or private repositories.

      For a private repository, you must give CloudCannon permission to access the repository at build time. There are two approaches for connecting a private repository.

      Source ↗ cloudcannon.com/…/modules-with-site-mounting

      Site Mounting works between two CloudCannon sites. Add a new site to your CloudCannon account and connect it to your module repository.

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/open-authoring

      For private GitHub repos the user must have read access on the repo, and you must explicitly set the auth_scope to repo

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/workflows/open

      A private repository always needs the full `repo` scope, so set `auth_scope: repo` in that case.

    • TinaCMS
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ tina.io/git-cms

      Whether you're managing an open-source or closed-source project, TinaCMS with Git support is an ideal choice.

      With TinaCMS, all your content is stored directly in your Git repository, ensuring consistency and reliability.

  2. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply

Can editors work on a branch other than the default.

  1. Yes
    5 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/multi-site

      Switch branches without leaving Zero

      Working on a staging branch? A feature branch? Zero lets you switch branches per site so the right people are always editing the right version of your content.

    • CloudCannon
      A site is tied to one branch, so working on another means opening that branch's own site within the project. Vendor documentation Checked
      7 quotes from 4 sources

      Source ↗ cloudcannon.com/…/what-is-the-project-browser

      The Project Sites Browser is the main view for an individual Project . It shows all the Sites connected to your Project

      For each Site , the Project Sites Browser shows: The Site name and branch name The domain or testing URL

      Source ↗ cloudcannon.com/…/what-are-the-optional-project-tabs

      or several branched Sites layered onto a release Site . Clicking a Card opens that Site in CloudCannon.

      Source ↗ cloudcannon.com/…/add-a-site-to-your-project

      Enter a name for your Site in the New Site name field. The branch will automatically receive the same name. Select the Use an existing branch option.

      Select the branch you want to connect using the Branch dropdown. CloudCannon automatically populates this using the branches in your Git Repository .

      Source ↗ cloudcannon.com/…/create-a-branched-site

      Click Projects in the App Sidebar . Select the Project you want to branch from. CloudCannon will open the Project Sites Browser .

      CloudCannon will copy the content, code, and settings from the Source branch and open the new branched Site . Any changes you make on the branched Site stay separate from any other Site until you publish them back.

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/github-mode

      You can tell Keystatic runs in github mode by the extra UI around your GitHub repo, like a branch dropdown.

    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/configuration

      Pages CMS reads it per repository and per branch.

    • TinaCMS
      A developer sets a flag in the Tina config; switching at runtime is not available when you host the backend yourself. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ tina.io/docs/tinacloud/branching

      If your content editors need to work on multiple branches, you can enable Tina

      This allows you to create new branches and switch between them from Tina

      Simply add the branch-switcher flag to your CMS callback function in your Tina config file

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      After completing the setup, you can access the CMS, and a new branch switcher button will appear at the top.

      Source ↗ tina.io/docs/faq

      Dynamic Branch Switching at Runtime TinaCloud allows for changing the content branch at runtime, a feature managed through URL modification. However, in self-hosted Tina, changing branches is restricted to the build phase only.

  2. No
    2 products
    • Decap CMS
      The config pins one branch for published content; editors do not switch working branches in the UI. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/backends-overview

      The branch where published content is stored. All CMS commits and PRs are made to this branch.

    • Sveltia CMS
      The working branch is fixed by the config's `branch` option; editors do not switch branches in the UI. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/backends

      By default, Sveltia CMS interacts with the repository’s default branch (usually `main` or `master`). You can specify a different branch using the `branch` option in the backend configuration

  3. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply

Does every editor need an account on your Git host?

  1. No
    4 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/access-management

      ZeroCMS gives you a clean access model with no GitHub account required and no repo permissions to wrangle.

      Teammates join your Zero organization with just an email invite — they don't need a GitHub account or any access to your repo.

    • CloudCannon
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/…/create-a-cloudcannon-account

      To create a CloudCannon account: Open the CloudCannon app using your Internet browser. Click on the Sign up with email button.

      Enter your email in the Email address field and click the Send Code button. CloudCannon will send a six-digit confirmation code to validate your email address.

      Enter your first name, last name, and an account password, and whether you are a developer or a content editor.

      Source ↗ cloudcannon.com/…/what-is-branching

      CloudCannon handles communicating with the repository for you; you don't need access to your

    • Pages CMS
      Invited collaborators edit by email with no GitHub account. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/configuration/collaborators

      Use them when someone needs to edit content or media but does not have a GitHub account.

      Source ↗ pagescms.org

      Email invites Invite users via email, no other account needed.

    • TinaCMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ tina.io/docs/faq

      No! Only the individual who sets up the TinaCloud project, linking it to a GitHub repository, requires GitHub.

  2. Yes
    3 products
    • Decap CMS
      The direct backends need each editor to hold a git-host account; another route removes that requirement. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/github-backend

      the github backend allows CMS users to log in directly with their GitHub account.

      Source ↗ decapcms.org/docs/turbo-how-it-works

      need an account on your Git hosting platform at all.

    • Keystatic
      In GitHub mode every editor signs in with GitHub. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/github-mode

      With `github` mode on, visit the `/keystatic` route. You will be prompted to login with GitHub.

      Next time someone with `write` access on the repo visits `/keystatic`, they will be able to login and access the Admin UI.

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      users need to have an account with the chosen Git service provider (e.g. GitHub) to access the CMS, though they don’t need to know Git itself or how to use the service.

  3. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply

Does every editor need write access to the repository?

  1. No
    4 products
    • ZeroCMS
      Zero commits through its GitHub App installation, so editors are never repo collaborators and cost no GitHub seat. Tested Checked
    • CloudCannon
      CloudCannon commits through the CloudCannon GitHub App installed on your account or organization; connecting the Git provider is a one-time step, and editors need no Git-provider access. Vendor documentation Checked
      9 quotes from 5 sources

      Source ↗ cloudcannon.com/…/publishing-your-changes

      The "Compare changes on [Git provider]" link takes you to a detailed view of your changes. You may not have access to this because it requires access to your Git provider (a separate software your developer uses to manage your website's files).

      When you are ready, click the Publish button. CloudCannon will immediately publish your changes to your Publish Branch.

      Source ↗ cloudcannon.com/…/editing-in-cloudcannon

      Before we begin, this guide assumes that you already have a Site set up in CloudCannon and that you have permission to edit that Site (i.e., you are a member of the Editors Permission Group or higher).

      Source ↗ cloudcannon.com/…/what-is-client-sharing

      (called a Client) to view, edit, and publish content for a specific Site. Clients do not need to have a CloudCannon account. Instead, they log into CloudCannon using a site-specific password.

      Source ↗ cloudcannon.com/…/authenticate-your-git-provider

      Members of the Owners or Developers Default Permission Groups, or Custom Permission Groups with the org:settings:git:provider permission, can manage which Git providers are connected to an Organization.

      You only need to authenticate your Git provider once, and you can authenticate multiple Git providers on an account (but not multiple accounts on the same provider).

      For CloudCannon to sync your files from a Git repository, you must give it permission to access your Git provider.

      Source ↗ cloudcannon.com/…/connecting-a-github-repository-as-your-source

      Install the CloudCannon GitHub App on your personal account or on your organization. Select to grant access to all repositories or only select repositories.

      Changes you push to the Git repository are pulled in by CloudCannon. Any changes made on CloudCannon are automatically committed and pushed.

    • Pages CMS
      Collaborators write through the GitHub App installation token, so they need no personal repo write access. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/configuration/collaborators

      Collaborator writes use the GitHub App installation token for the target repository.

    • TinaCMS
      Tina's bot commits on the repository's behalf — you can be named co-author without a GitHub account, but authoring the commit yourself, or merging the pull request, needs one. Vendor documentation Checked
      6 quotes from 3 sources

      Source ↗ tina.io/docs/faq

      Do I need a GitHub account to edit? No! Only the individual who sets up the TinaCloud project, linking it to a GitHub repository, requires GitHub. Editors can create a TinaCloud account with just their email.

      Source ↗ tina.io/docs/tinacloud/git-co-authoring

      By default, these commits are authored by our tina-cloud-app , which can make it difficult to track who made specific changes within a team.

      Co-authoring: A simpler, manual option. The tina-cloud-app will still make the commit, but it will add your name and email as a co-author , attributing the change to you in the commit message.

      Act as You (Recommended): The most seamless and accurate method. TinaCMS will perform all Git actions using your personal GitHub identity after you grant authorization.

      Your Personal Permissions: For every action, GitHub also checks if your personal account has the right to perform that action.

      Source ↗ tina.io/docs/tinacloud/editorial-workflow

      When you are ready to publish your content, merge the draft pull request into the protected branch (e.g., main) through GitHub.

  2. Yes
    3 products
    • Decap CMS
      Direct backends require repo push access; other routes remove it. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ decapcms.org/docs/github-backend

      Note that all users must have push access to your content repository for this to work.

      Source ↗ decapcms.org/docs/git-gateway-backend

      allows you to add editors to your site CMS without giving them direct write access to your GitHub or GitLab repository

      Source ↗ decapcms.org/docs/open-authoring

      you can use Decap CMS to accept contributions from GitHub users without giving them access to your repository

    • Keystatic
      Editors must be repo collaborators with write access. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/github-mode

      Collaborators will need `write` access to this repository.

      Next time someone with `write` access on the repo visits `/keystatic`, they will be able to login and access the Admin UI.

    • Sveltia CMS
      The direct-commit flow needs repo push access; Open Authoring is the fork-based exception. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/simple

      Sveltia CMS will automatically commit and push the changes to the connected Git repository.

      Source ↗ sveltiacms.app/en/docs/workflows/open

      Open Authoring is a workflow that allows contributors to propose changes to a project without requiring direct write access to the repository. This is typically done through fork-and-pull request mechanisms

  3. Does not apply
    5 products
    • EmDash
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Payload CMS
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Sanity
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Storyblok
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply
    • Strapi
      The content lives in the vendor's store, so there is no repository to ask about. Does not apply

Does the product run locally with no account or cloud?

  1. Yes
    8 products
    • CloudCannon
      A command-line dev server runs the editor against local files with no account, though it is framed as a tool for building the editing setup. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/documentation/developer-reference/cli

      runs a local dev server that loads the CloudCannon app against your local files

      The configure and dev commands work on your local project files and don't require authentication. The sites, orgs, builds, and inboxes commands operate on CloudCannon through the API, so they require authentication.

      Source ↗ cloudcannon.com/…/build-your-editing-experience-locally-with-the-cloudcannon-dev-server

      The dev server closes that loop. It runs CloudCannon's editing experience on your machine, against your local files, and reflects config changes the moment you save. No commits, no pushes, no builds.

      The dev server is a development tool. Your editors never see it; it exists for exactly this phase, when you’re building or refining the editing experience.

    • Decap CMS
      A local backend reads a working directory; a test backend runs with no repository at all. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ decapcms.org/docs/decap-proxy

      You can connect Decap CMS to a local directory, instead of working with a remote Git repository.

      Source ↗ decapcms.org/docs/test-backend

      You can use the test-repo backend to try out Decap CMS without connecting to a Git repo.

    • EmDash
      The default setup uses a local SQLite file and local file storage, so the admin runs at localhost with no cloud service. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/getting-started

      with a local SQLite database and local file storage

      npm run dev Open your browser to http://localhost:4321

    • Keystatic
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ keystatic.com/docs/installation-astro

      Visit http://127.0.0.1:4321/keystatic to see the Keystatic Admin UI running.

      Source ↗ keystatic.com/docs/configuration

      local to store and read files directly from your local file system

    • Payload CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/docs/getting-started/installation

      To quickly scaffold a new Payload app in the fastest way possible, you can use create-payload-app . To do so, run the following command: 1 npx create-payload-app Then just follow the prompts! You'll get set up with a new folder and a functioning Payload app inside.

      By default, the Next.js dev script is pnpm dev (or npm run dev if using npm). After it starts, you can go to http://localhost:3000/admin to create your first Payload user!

    • Strapi
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/installation/cli

      Strapi CLI (Command Line Interface) installation scripts are the fastest way to get Strapi running locally.

      Before installing Strapi, the following requirements must be installed on your computer:

      To start the Strapi application, run the following command in the project folder: NPM terminal npm run develop

      For self-hosted Strapi projects, all your content is saved in a database file (by default, SQLite) found in the .tmp subfolder

    • Sveltia CMS
      A local Git folder is edited through the File System Access API (Chromium-only), or a repository-less Test backend. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/workflows/local

      Developers can smoothly work with local Git repositories using Sveltia CMS while running it on a local development server.

      The workflow doesn’t work in Firefox, Safari, or other non-Chromium browsers, because this feature relies on the File System Access API

      Source ↗ sveltiacms.app/en/docs/backends/test

      It stores entries and assets in a virtual file system in the browser, allowing you to test your Sveltia CMS setup without needing a repository.

    • TinaCMS
      Local mode reads your files straight off disk with no sign-in, and is not meant to run in production. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/docs/faq

      When developers are developing locally, it's often convenient to load/save content from their local filesystem rather than connecting to the content on TinaCloud.

      Local-mode is meant for developing locally, and will not work when your site is hosted on production.

      When in local-mode, you will not need to login to enter edit-mode.

      which isn't available at runtime on your production site (and neither is the underlying filesystem content).

  2. No
    4 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      Sign-in and the GitHub App install are required; there is no offline, account-free local-file mode. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/quick-start

      Sign in with GitHub. Install the GitHub App on the account or organization that owns your repository.

    • Sanity
      The Studio runs against a hosted project and dataset and requires a login. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/docs/astro/configure-sanity-astro

      projectId: 'YOUR_PROJECT_ID', dataset: 'production'

      Source ↗ sanity.io/docs/astro-quickstart/setting-up-your-studio

      log in to the studio open the studio running locally in your browser

    • Storyblok
      Even in local development the site fetches content from Storyblok's cloud with an access token; there is no account-free local-files mode. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/guides/astro

      In the root of the project, create a .env file to store the Storyblok access token.

      const { data } = await storyblokApi . get ( " cdn/stories/home " , { version: " draft " , } );

Does the product offer a REST API?

  1. Wide

    Broad reach, including writes.

    6 products
    • CloudCannon
      It manages organizations, projects, sites and builds. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/…/platform

      The CloudCannon API lets you manage your organizations, projects, sites, builds, and more programmatically.

      Source ↗ cloudcannon.com/…/editing-sessions

      Create a file in an Editing Session POST /api/v0/editing_sessions/{editing_session_uuid}/files

      Upload a file to an Editing Session POST /api/v0/editing_sessions/{editing_session_uuid}/upload_file

      Commit an Editing Session to its Git Provider POST /api/v0/editing_sessions/{editing_session_uuid}/commit

      Source ↗ cloudcannon.com/…/editing-session-files

      Get a file's raw contents from an Editing Session GET /api/v0/editing_session_files/{editing_session_file_uuid}/raw

    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/reference/rest-api

      GET /_emdash/api/content/:collection

      POST /_emdash/api/content/:collection

    • Payload CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/docs/rest-api/overview

      The REST API is a fully functional HTTP client that allows you to interact with your Documents in a RESTful manner. It supports all CRUD operations and is equipped with automatic pagination, depth, and sorting.

    • Sanity
      A query HTTP endpoint for reads and a Mutation API for writes. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/http-reference

      query api reference reference documentation for the query http endpoint. mutation api reference

    • Storyblok
      A Content Delivery API, plus a Management API that creates, edits and deletes content and configuration. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ storyblok.com/docs/api/management

      The Management API is designed for creating, editing, updating, and deleting content and configuration.

      Source ↗ storyblok.com/docs/api/content-delivery/v2

      The Storyblok Content Delivery API is organized around REST.

    • Strapi
      A read-and-write endpoint per content type, generated from the model, and a separate token system for the administrative routes. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/api/rest

      The REST API allows accessing the content-types through API endpoints. Strapi automatically creates API endpoints when a content-type is created.

      Collection type Single type Method URL Description GET /api/:pluralApiId Get a list of documents POST /api/:pluralApiId Create a document GET /api/:pluralApiId/:documentId Get a document PUT /api/:pluralApiId/:documentId Update a document DELETE /api/:pluralApiId/:documentId Delete a document

      Method URL Description GET /api/:singularApiId Get a document PUT /api/:singularApiId Update/Create a document DELETE /api/:singularApiId Delete a document

      The Upload package (which powers the Media Library feature ) has a specific API accessible through its /api/upload endpoints .

      Source ↗ docs.strapi.io/cms/features/admin-tokens

      Admin tokens allow automated clients to authenticate requests to the Strapi Admin API. For authenticating requests to the Content API, see API Tokens . Admin tokens and API tokens are strictly separated: each is rejected on the other's routes.

  2. Narrow

    Limited reach, or read-only.

    1 product
    • TinaCMS
      APIs exist for content (read-only) and search. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ tina.io/docs/tinacloud/dashboard/projects

      There are two types of tokens associated with projects in TinaCloud: Content (Read-only) and Search. Content tokens provide read-only access to your project's content. Search tokens provide write access to the TinaCloud search API.

      Source ↗ tina.io/docs/reference/content-api/content-delivery

      The Content API endpoint is https://content.tinajs.io/<TinaGraphQLVersion>/content/<myClientId>/github/<myBranch> . The token can be passed by including a X-API-KEY custom HTTP header with the token as the value.

  3. None
    5 products
    • ZeroCMS
      Tested Checked
    • Decap CMS
      Decap is a client-side app that calls the git host's API and exposes no content-management API of its own. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      At its core, Decap CMS is an open-source React app that acts as a wrapper for the Git workflow, using the GitHub, GitLab, or Bitbucket API.

    • Keystatic
      Tested Checked
    • Pages CMS
      Pages CMS positions itself as backend-less, and no content API of its own is documented. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Manage content and media right in your GitHub repository. No database, no API, no extra backend.

    • Sveltia CMS
      A client-side app that calls the Git host's API directly; it exposes no content API of its own. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/intro

      It’s not a service but a client-side application, giving you full control over your data.

      Source ↗ sveltiacms.app/en/docs/privacy

      subsequent API requests are made directly between your browser and the Git hosting provider.

Does the product offer a GraphQL API?

  1. Wide

    Broad reach, including writes.

    3 products
    • Payload CMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/docs/graphql/overview

      In addition to its REST and Local APIs, Payload ships with a fully featured and extensible GraphQL API. By default, the GraphQL API is exposed via /api/graphql

      Everything that can be done to a Collection via the REST or Local API can be done with GraphQL (outside of uploading files, which is REST-only).

      And the following mutations: Query Name Operation createPublicUser create updatePublicUser update deletePublicUser delete

      Globals are also fully supported.

    • Strapi
      A plugin you install rather than part of the core. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/plugins/graphql

      By default Strapi create REST endpoints for each of your content-types. The GraphQL plugin adds a GraphQL endpoint to fetch and mutate your content.

      To install the GraphQL plugin, run the following command in your terminal: Yarn NPM terminal yarn add @strapi/plugin-graphql

      To simplify and automate the build of the GraphQL schema, we introduced the Shadow CRUD feature. It automatically generates the type definitions, queries, mutations and resolvers based on your models.

      # Mutations to create, update or delete a restaurant. type Mutation { createDocument ( data : DocumentInput ! ) : DocumentEntityResponse updateDocument ( id : ID ! , data : DocumentInput ! ) : DocumentEntityResponse deleteDocument ( id : ID ! ) : DocumentEntityResponse }

    • TinaCMS
      The content tokens you can issue are read-only, and the only other token type updates just the hosted search index; the contract is pre-1.0, so a minor version may break it. Vendor documentation Checked
      10 quotes from 6 sources

      Source ↗ tina.io/docs/tinacloud/api-versioning

      leverages version metadata in your site's generated schema to select the appropriate version of the GraphQL API in TinaCloud.

      Prior to the 1.0.0 release, there may be breaking changes between minor versions. For a given minor version, TinaCloud will have the latest patch version of the GraphQL API

      Source ↗ tina.io/docs/graphql/queries

      TinaCMS will generate a GraphQL API which treats your local filesystem as a database.

      The GraphQL API will generate queries which are specific to the schema you define.

      As an alternative to the schema-specific queries, the GraphQL API also makes the following general queries available:

      Source ↗ tina.io/docs/graphql/queries/update-document

      so we can apply an update to each collection type using the updatePost & updateAuthor

      Source ↗ tina.io/docs/graphql/queries/add-document

      The addPendingDocument mutation will take in the collection name as a parameter, as well as the new relative path.

      Source ↗ tina.io/docs/reference/content-api/content-delivery

      Requests can be made to the Tina Content API with Read Only Tokens.

      Source ↗ tina.io/docs/tinacloud/dashboard/projects

      There are two types of tokens associated with projects in TinaCloud: Content (Read-only) and Search.

      Content tokens allow clients read-only access to your repository content. Search tokens allow clients to update the TinaCloud hosted search index for your site.

  2. Narrow

    Limited reach, or read-only.

    2 products
    • Sanity
      A read-only content-delivery endpoint; writes go through the Mutation API. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/graphql

      Mutations are not exposed through the GraphQL API but rather through our powerful Mutation API.

      adds queries allowing you to find and filter the documents stored in your Sanity dataset

    • Storyblok
      A read-only content-delivery endpoint. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/api/graphql

      The API is a read-only endpoint optimized for fast content delivery.

  3. None
    6 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/documentation/developer-reference

      Platform # The tools for working with the CloudCannon backend programmatically — the HTTP API, the SDK, and the CLI — plus the permissions that control what your team can do. Browse Platform CLI — manage CloudCannon from the terminal TypeScript SDK — a typed client for the API API — manage organizations, projects, sites, and builds over HTTP Permissions — control what your team members can do

      Source ↗ cloudcannon.com/documentation/developer-reference/api

      This reference is generated from CloudCannon's OpenAPI specification

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      At its core, Decap CMS is an open-source React app that acts as a wrapper for the Git workflow, using the GitHub, GitLab, or Bitbucket API.

    • EmDash
      The documented content API is REST; no GraphQL endpoint appears in the API reference. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/reference/rest-api

      POST /_emdash/api/content/:collection

    • Keystatic
      Tested Checked
    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Manage content and media right in your GitHub repository. No database, no API, no extra backend.

  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Sveltia CMS
      Not tested Undated

Can the product send webhooks to a URL you control?

  1. Content events

    Fires when content is saved, published or built.

    4 products
    • Sanity
      Webhooks fire a customized HTTP request on document create, update and delete. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/webhooks

      send customized http requests when something in your content lake has changed

      Create: triggers on the creation of a new document.

      Update: triggers on every change to a document once created.

      Delete: triggers on the deletion of a document, including when a published document is unpublished.

    • Storyblok
      Fires on content, asset, discussion and space-membership events. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/concepts/webhooks

      In Storyblok, webhooks notify external services about events: a story published, an asset uploaded, a user removed, a discussion created, and more.

    • Strapi
      Entries on create, update, delete, publish and unpublish, and media on create, update and delete, posted to a URL you name. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/backend-customization/webhooks

      Webhook is a construct used by an application to notify other applications that an event occurred. More precisely, webhook is a user-defined HTTP callback.

      The way a webhook works is by delivering information to a receiving application through HTTP requests (typically POST requests).

      By default Strapi webhooks can be triggered by the following events: Name Description entry.create Triggered when a Content Type entry is created. entry.update Triggered when a Content Type entry is updated. entry.delete Triggered when a Content Type entry is deleted.

      entry.publish Triggered when a Content Type entry is published.* entry.unpublish Triggered when a Content Type entry is unpublished.* media.create Triggered when a media is created. media.update Triggered when a media is updated. media.delete Triggered when a media is deleted.

    • TinaCMS
      Content added, changed and removed, posted to a server you name, per branch. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/docs/tinacloud/webhooks

      If you need to automate tasks or trigger external processes when your content is updated, you can leverage the webhooks feature. When content is pushed or modified to a specific branch, TinaCMS sends a notification to your server.

      The payload includes the paths of the modified files, enabling event driven actions like rebuilding your site or populating a search index.

      Enter a name, server URL, target branches and additional headers to be sent to the your server.

      Note: The payload type can be of either ['content.modified' | 'content.removed' | 'content.added']

  2. One corner

    Fires on part of the product, but not on content events.

    1 product
    • CloudCannon
      Form submissions only. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/…/what-is-a-form

      With CloudCannon forms, you can view your form submissions in CloudCannon, forward them to an email address, or integrate them with your workflow using webhooks. All submissions can be exported from within CloudCannon.

      Source ↗ cloudcannon.com/documentation/developer-reference/api

      Organizations 43 endpoints Sites 92 endpoints Builds 3 endpoints Site Archives 1 endpoint Syncs 1 endpoint Editing Sessions 10 endpoints Editing Session Files 12 endpoints Site Authentication 2 endpoints Site DAMs 3 endpoints Site Mountings 2 endpoints Outputs 1 endpoint Site Inboxes 3 endpoints Projects 8 endpoints

      Base Domains 14 endpoints Users 11 endpoints DAMs 3 endpoints Inboxes 8 endpoints Inbox Targets 4 endpoints Form Hooks 4 endpoints Groups 10 endpoints Scheduled Builds 2 endpoints SSL Certificates 2 endpoints Uploads 1 endpoint

  3. None
    6 products
    • ZeroCMS
      Tested Checked
    • Decap CMS
      Tested Checked
    • EmDash
      Plugin hooks run in-process; no outbound webhooks to customer URLs are documented. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/reference/hooks

      Hooks allow plugins to intercept and modify EmDash behavior at specific points in the content, media, email, comment, and page lifecycle.

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • Payload CMS
      Nothing fires at a URL you register, though a server-side hook can make the outbound call itself — code you write and maintain. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ payloadcms.com/docs/hooks/overview

      There are four main types of Hooks in Payload: Root Hooks Collection Hooks Global Hooks Field Hooks

      Hooks are only triggered on the server and are automatically excluded from the client-side bundle. This means that you can safely use sensitive business logic in your Hooks without worrying about exposing it to the client.

      Integrate with a third-party CRM like HubSpot or Salesforce Send a copy of uploaded files to Amazon S3 or similar Process orders through a payment provider like Stripe Send emails when contact forms are submitted

      Source ↗ payloadcms.com/docs/hooks/collections

      All Collection Hooks accept an array of synchronous or asynchronous functions . Each Collection Hook receives specific arguments based on its own type, and has the ability to modify specific outputs.

  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Sveltia CMS
      Not tested Undated

Does the product offer a CLI?

  1. Maintenance and content

    Reaches the content as well.

    6 products
    • CloudCannon
      Sites, builds, orgs and inboxes, plus a config generator and local `configure` and `dev` commands that need no authentication. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/…/platform

      The CloudCannon CLI manages your organizations, sites, builds, files, and form submissions from the terminal, and can generate CloudCannon configuration files for your site.

      Source ↗ cloudcannon.com/…/files

      Manage files on a CloudCannon site. Usage cloudcannon sites files list|get|upload|move|clone|delete|restore|discard|list-edits|commit

      get # Get the contents of a file from a site. upload # Upload a file to a site. move # Move a file within a site editing session.

      list-edits # List pending edits on a site editing session. commit # Commit a site editing session, pushing changes to the repository.

      Source ↗ cloudcannon.com/documentation/developer-reference/cli

      The configure and dev commands work on your local project files and don't require authentication. The sites , orgs , builds , and inboxes commands operate on CloudCannon through the API, so they require authentication.

    • EmDash
      Reaches content, schema and media, not only the account or builds. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/reference/cli

      The EmDash CLI provides commands for managing an EmDash CMS instance — database setup, type generation, content CRUD, schema management, media, and more.

    • Payload CMS
      Scaffolding, migrations and type generation are among the commands. Vendor documentation Checked
      7 quotes from 2 sources

      Source ↗ raw.githubusercontent.com/…/defaults.ts

      const defaultCLICommands: CLICommands = { build: 'payload/cli/builtin#createBuildCommand', countDocuments: 'payload/cli/builtin#createCountDocumentsCommand',

      createDocuments: 'payload/cli/builtin#createCreateDocumentsCommand', deleteDocuments: 'payload/cli/builtin#createDeleteDocumentsCommand', duplicateDocument: 'payload/cli/builtin#createDuplicateDocumentCommand',

      findDocuments: 'payload/cli/builtin#createFindDocumentsCommand', findGlobal: 'payload/cli/builtin#createFindGlobalCommand',

      updateDocument: 'payload/cli/builtin#createUpdateDocumentCommand', updateGlobal: 'payload/cli/builtin#createUpdateGlobalCommand',

      'generate:types': 'payload/cli/builtin#createGenerateTypesCommand', getCollectionSchema: 'payload/cli/builtin#createGetCollectionSchemaCommand',

      migrate: 'payload/cli/builtin#createMigrateCommand', 'migrate:create': 'payload/cli/builtin#createMigrateCreateCommand',

      Source ↗ payloadcms.com/docs/getting-started/installation

      To quickly scaffold a new Payload app in the fastest way possible, you can use

    • Sanity
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/apis-and-sdks/cli

      Build, deploy, init plugin boilerplate, run scripts, and wrangle datasets and webhooks

      running scripts to migrate or manipulate your data

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/libraries/storyblok-cli

      The `storyblok` CLI scaffolds Storyblok projects and facilitates Management API requests, such as pushing and pulling content and schemas.

    • Strapi
      Content moves in bulk through export, import and transfer; no command edits a single entry. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ docs.strapi.io/cms/cli

      Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds.

      Strapi CLI commands on the present page are grouped by category: Category Commands Development develop , start , build , console Cloud login , link , deploy , logout Data management export , import , transfer Project information report , telemetry:disable , telemetry:enable , version , help Configuration configuration:dump , configuration:restore

      Administration admin:create-user , admin:reset-user-password , admin:list-users , admin:active-user , admin:block-user , admin:delete-user Code generation generate , openapi generate , templates:generate , ts:generate-types Listing routes:list , policies:list , middlewares:list , content-types:list , hooks:list , controllers:list , services:list

      These commands export, import, and transfer data between Strapi instances.

      Imports data into your project. The imported data must originate from another Strapi application. You must pass the --file option to specify the file or directory for the import action.

  2. Maintenance only

    Reaches the account, its sites and its builds, but not the content.

    3 products
    • Decap CMS
      decap-server is a local development proxy. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/docs/decap-proxy

      Run npx decap-server from the root directory

      By default, the proxy server runs on port 8081 and allows CORS requests from any origin.

    • Keystatic
      The CLI only scaffolds a new Next.js, Astro or Remix project with Keystatic integrated; it cannot read or write content. Tested Checked
    • TinaCMS
      A build toolchain — start, build, scaffold, index, audit, dependency check. No command authors content, though search-index uploads to TinaCloud. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ tina.io/docs/cli-overview

      dev [ options ] Builds Tina and starts the dev server build [ options ] Build the CMS and autogenerated modules for usage with TinaCloud init [ options ] Add TinaCloud to an existing project

      audit [ options ] Audit your schema and the files to check for errors search-index [ options ] Builds the TinaCMS search index and uploads it to TinaCloud doctor [ options ] Check direct TinaCMS dependencies against npm latest help [ command ] display help for command

      Source ↗ tina.io/roadmap

      TinaCloud - CLI A first-party TinaCloud CLI lets developers manage projects, repos, branches, and more from the terminal.

  3. None
    2 products
    • ZeroCMS
      Tested Checked
    • Pages CMS
      Tested Checked
  4. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Sveltia CMS
      Not tested Undated

Where you can add your own code to the product.

  1. Content hooksCustom fieldsEditor pluginsAI skillsFork it
    Content hooks
    Run your own code when content changes.
    Custom fields
    Add your own field types to the editor.
    Editor plugins
    Add your own UI to the editor.
    AI skills
    Add your own instructions for the product's AI.
    Fork it
    Change the product's own source.
    1 product
    • Sanity
      Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ sanity.io/docs/functions/functions-introduction

      many functions work on an event system. they react to changes in your data

      Source ↗ sanity.io/docs/studio/form-components-reference

      The Form Components API lets you override default form widgets with your own custom components.

      Source ↗ sanity.io/docs/studio

      create a portable text behavior plugin add portable text editor plugins to studio

      Sanity Studio is an open-source, real-time collaborative content workbench

      Source ↗ sanity.io/…/ai-assist-working-with-instructions

      Give your instruction an appropriate and informative name

  2. Content hooksCustom fieldsEditor pluginsFork it
    Content hooks
    Run your own code when content changes.
    Custom fields
    Add your own field types to the editor.
    Editor plugins
    Add your own UI to the editor.
    Fork it
    Change the product's own source.
    3 products
    • EmDash
      Plugins run in isolated Worker sandboxes with a declared capability manifest. Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ docs.emdashcms.com/reference/hooks

      Hooks allow plugins to intercept and modify EmDash behavior at specific points in the content, media, email, comment, and page lifecycle.

      Source ↗ docs.emdashcms.com/plugins/field-kit

      Field Kit is a first-party plugin that ships four composable widgets for json fields

      Source ↗ emdashcms.com

      Add your own custom block types, admin pages, hooks, storage and more with plugins.

      Open source CMS for Astro, brought to you by Cloudflare

      Source ↗ github.com/emdash-cms/emdash

      isolated Worker sandboxes via Dynamic Worker Loaders, each with a declared capability manifest

    • Payload CMS
      Vendor documentation Checked
      9 quotes from 6 sources

      Source ↗ payloadcms.com/docs/hooks/overview

      Hooks allow you to execute your own side effects during specific events of the Document lifecycle.

      Hooks are only triggered on the server and are automatically excluded from the client-side bundle. This means that you can safely use sensitive business logic in your Hooks without worrying about exposing it to the client.

      Source ↗ payloadcms.com/docs/fields/overview

      To swap in Field Components with your own, use the admin.components property in your Field Config

      you can override the entirety of how a component functions within the Admin Panel to effectively create your own field type.

      Source ↗ payloadcms.com/compare/contentful

      Custom components You can completely and easily override Payload views, fields, and more with your own React components.

      Source ↗ payloadcms.com/docs/custom-components/custom-views

      One of the most powerful ways to customize the Admin Panel is to create Custom Views. These are Custom Components that can either replace built-in views or be entirely new.

      Source ↗ payloadcms.com/docs/custom-components/root-components

      Root Components are those that affect the Admin Panel at a high-level, such as the logo or the main nav. You can swap out these components with your own Custom Components to create a completely custom look and feel.

      actions An array of Custom Components to be rendered within the header of the Admin Panel, providing additional interactivity and functionality.

      Source ↗ payloadcms.com/get-started

      Self-hosted Free Payload is open source and MIT licensed. Deploy it anywhere you can run a Node.js app — for free, forever.

    • Strapi
      Vendor documentation Checked
      7 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/backend-customization/models

      Lifecycle hooks are functions that get triggered when Strapi queries are called. They are triggered automatically when managing content through the administration panel or when developing custom code using queries

      To configure a content-type lifecycle hook, create a lifecycles.js file in the ./src/api/[api-name]/content-types/[content-type-name]/ folder.

      Source ↗ docs.strapi.io/cms/features/custom-fields

      Custom fields extend Strapi’s capabilities by adding new types of fields to content-types and components. Once created or added to Strapi via plugins, custom fields can be used in the Content-Type Builder and Content Manager just like built-in fields.

      Source ↗ docs.strapi.io/cms/plugins-development/admin-panel-api

      The Admin Panel API covers the front-end part: it allows a plugin to customize Strapi's admin panel . The admin panel is a React application, and each plugin contributes its own React application to it.

      Source ↗ raw.githubusercontent.com/strapi/strapi/main/LICENSE

      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software

      you are only accessing or using our “Community Edition” of the Software and (b) you have no registered account on our cloud offering, then we are providing you the software under the "MIT Expat" license as set forth below.

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Content-Type Builder AI chat assistant that helps design content-type structures, explain existing schemas, and plan data models. Uses your existing content types as context. Internationalization Automatically translates content from the default locale to all other configured locales when you save an entry. Media Library Generates alternative text, captions, and descriptions for uploaded images.

  3. Custom fieldsEditor pluginsFork it
    Custom fields
    Add your own field types to the editor.
    Editor plugins
    Add your own UI to the editor.
    Fork it
    Change the product's own source.
    3 products
    • Decap CMS
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ decapcms.org/docs/custom-widgets

      registerWidget: registers a custom widget.

      Source ↗ decapcms.org/docs/customization

      Registers a template for a folder collection or an individual file in a file collection.

      Source ↗ raw.githubusercontent.com/…/LICENSE

      including without limitation the rights to use, copy, modify, merge, publish, distribute

    • Sveltia CMS
      Custom field types, editor components and preview templates in code; the MIT source can be forked. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/customization

      You can register custom field types, preview templates, editor components, and more to enhance the content management experience.

      licensed under the MIT License, and its source code is available on GitHub. Advanced users and developers can fork the repository and modify the source code

    • TinaCMS
      Vendor documentation Checked
      5 quotes from 4 sources

      Source ↗ tina.io/docs/extending-tina/custom-field-components

      A custom component can be passed and rendered by setting the ui.component property on a field. This component completely overrides the original component, providing the user with the ability to fully customize the field.

      Source ↗ tina.io/docs/extending-tina/overview

      The tina/config.{ts,js,tsx} config has an optional cmsCallback parameter that can be added to customize the CMS instance.

      The cmsCallback hook is primarily used for registering custom field plugins. It can also be used for altering Tina's UI, dynamically hiding the sidebar on specific pages, tapping into the CMS event bus, etc.

      Source ↗ tina.io/docs

      TinaCMS is an open-source, Git-backed headless content management system (CMS).

      Source ↗ tina.io/docs/extending-tina/before-submit

      The before submit function allows you to run a function on the frontend before the form is submitted to the backend and optionally modify the values of a document.

  4. Build hooksEditor plugins
    Build hooks
    Run your own code around a build.
    Editor plugins
    Add your own UI to the editor.
    1 product
    • CloudCannon
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/…/extending-your-build-process-with-hooks

      Bash scripts that run at different stages in the build to extend the functionality of your sites. There are three hooks available: Preinstall, Prebuild, and PostBuild. All three are configured using extensionless script files.

      Source ↗ cloudcannon.com/…/what-is-the-visual-editor-api

      The Visual Editor API is designed for experienced CloudCannon developers who want to build their own custom integrations for the Visual Editor that go beyond what CloudCannon provides out of the box.

      Create custom Data Panels that support CloudCannon Input

      Create custom inline editing directly on the webpage preview in the Visual Editor . Manage loading, uploads, and previews . At CloudCannon, we use this API to build our own features.

  5. Custom fieldsEditor plugins
    Custom fields
    Add your own field types to the editor.
    Editor plugins
    Add your own UI to the editor.
    1 product
    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/plugins

      Use field plugins to create custom inputs in the Visual Editor.

      Tool plugins add custom tool windows to the Visual Editor.

  6. Custom fieldsFork it
    Custom fields
    Add your own field types to the editor.
    Fork it
    Change the product's own source.
    1 product
    • Pages CMS
      Custom field types are a designed seam; the whole MIT codebase can also be forked. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ pagescms.org/docs/development/fields

      The custom field folder name becomes the field type.

      Source ↗ github.com/hunvreus/pagescms

      Everything in this repo is released under the MIT License.

  7. AI skills
    AI skills
    Add your own instructions for the product's AI.
    1 product
    • ZeroCMS
      Skills, knowledge and guidelines are authored in the product, in plain language. Tested and documented Checked
      10 quotes from 4 sources

      Source ↗ zerocms.io/features/audits-and-checks

      The eight built-in audits cover universal content quality. Add custom skills for rules that are specific to your team or domain, and run them as audits or pre-publish checks.

      A custom audit is a skill written in plain language. Use them to enforce any custom standard, such as brand voice, formatting conventions, required disclaimers, and domain-specific requirements.

      Custom skills can enforce any rule you can describe — brand voice guidelines, formatting conventions, domain-specific requirements. They're defined as prompts with access to the full content and rendered output.

      Wire custom audits to run before publishing, enforcing your team's standards at the workflow level.

      Source ↗ zerocms.io/features/ai-content-agent

      The agent follows site-wide guidelines out of the box, but you can extend it with custom skills, knowledge entries, and collection-specific rules.

      Set rules like 'always use American English' or 'our tone is direct and never corporate' and the agent applies them to every interaction, automatically.

      Add brand voice guides, product terminology, or content strategy docs as knowledge entries. The agent pulls them in when the task calls for it.

      Source ↗ zerocms.io/privacy

      User-created Skills (content audit instructions), Knowledge entries (reference material such as style guides), and Guidelines (standing AI instructions) are stored in our database per repository.

      When you delete a Skill, Knowledge entry, or Guideline, it is removed from our active database.

      Source ↗ zerocms.io/features/zero-integration

      Zero reads your existing Astro content collections and components directly from GitHub. No sync, no migration, no vendor-specific config files.

  8. Fork it
    Fork it
    Change the product's own source.
    1 product
    • Keystatic
      MIT-licensed, so the whole product can be forked. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ raw.githubusercontent.com/…/LICENSE

      MIT License Copyright (c) Thinkmill Labs Pty Ltd

Named services the product connects to.

  1. Algolia searchCloudinary, via a pluginMux videoShopifyVercel deploymentsNetlify deployments
    1 product
    • Sanity
      Vendor documentation Checked
      8 quotes from 6 sources

      Source ↗ sanity.io/technology-partners/cloudinary

      With the Cloudinary plugin installed in your Sanity Studio, you can take your images and videos to the next level

      Source ↗ sanity.io/technology-partners/vercel

      Trigger and monitor Vercel deployments directly from Sanity Studio — no context switching required.

      Source ↗ sanity.io/technology-partners/algolia

      Algolia is the search-as-a-service platform

      Helpful code for automating indexing Sanity content in Algolia

      Source ↗ sanity.io/technology-partners/mux

      Mux is a powerful API to video and performance monitoring platform.

      Upload videos to Mux directly from the studio.

      Source ↗ sanity.io/technology-partners/shopify

      Continuously synchronize Shopify to Sanity, including products, variants, and collections.

      Source ↗ sanity.io/technology-partners/netlify

      Netlify Deploy and view history of multiple Netlify sites directly inside your Sanity Studio.

  2. GitHub, GitLab and Bitbucket as sourcesGitHub Enterprise Server and self-hosted GitLab, on the Enterprise planCloudinary and Tenovos as asset librariesAmazon S3, Cloudflare R2, Google Cloud Storage, Azure and DigitalOcean SpacesZapier, Make, IFTTT and SlackNetlify, if you host the built site yourself
    1 product
    • CloudCannon
      Vendor documentation Checked
      6 quotes from 6 sources

      Source ↗ cloudcannon.com/…/introduction-to-syncing

      Authenticate your Git Provider Connect a GitHub repository Connect a GitHub Enterprise Server repository Connect a Bitbucket repository Connect a GitLab repository Connect a self-hosted GitLab repository

      Source ↗ cloudcannon.com/…/integrating-your-dam-with-cloudcannon

      For information on setting up a DAM with a specific provider, read one of our guides below: Creating a Cloudinary DAM Creating an S3 DAM Creating a Cloudflare R2 DAM Creating a DigitalOcean Spaces DAM Creating a Tenovos DAM Creating an Azure Blob Storage DAM Creating a Google Cloud Storage DAM

      Source ↗ cloudcannon.com/…/what-is-a-form

      CloudCannon integrates with four external providers at the moment: IFTTT Make Slack Zapier

      Source ↗ cloudcannon.com/…/netlify-hosting-with-cloudcannon-editing

      CloudCannon can enable editing of your Netlify-hosted static site by connecting to the same Git repo. CloudCannon pushes all content updates to your Git repo, which triggers your Netlify build and deploy.

      Source ↗ cloudcannon.com/…/connecting-a-github-enterprise-server-repository-as-your-source

      This feature is available on our Enterprise plan . Want to chat about whether this feature is right for you? Our support team is always happy to hear from you . Connecting to your GitHub Enterprise Server allows you to work on your websites locally

      Source ↗ cloudcannon.com/…/connecting-a-self-hosted-gitlab-repository-as-your-source

      This feature is available on our Enterprise plan . Want to chat about whether this feature is right for you? Our support team is always happy to hear from you . Connecting to your self-hosted GitLab allows you to work on your websites locally

  3. GitHub is the only Git provider Tina ships; other hosts need your ownGitHub Enterprise Server and Cloud, on the Enterprise planCloudinary, Amazon S3 and DigitalOcean Spaces, through official pluginsTinaCloud Search, the only search backendAuth.js, the recommended auth providerDatabase adapters for Vercel KV and MongoDB
    1 product
    • TinaCMS
      Vendor documentation Checked
      6 quotes from 6 sources

      Source ↗ tina.io/…/overview

      By default, we support a GitHub Git Provider . If you do not use GitHub, you can make your own .

      Source ↗ tina.io/docs/tinacloud/github-enterprise-integration

      This is a TinaCloud Enterprise feature This guide provides step-by-step instructions for integrating a GitHub Enterprise (GHE) instance with TinaCloud. This integration supports both GitHub Enterprise Server (self-hosted) and GitHub Enterprise Cloud (GitHub-hosted)

      Source ↗ tina.io/docs/reference/media/external/authentication

      Tina supports using external media providers, however a light backend media handler needs to be setup/hosted by the user. Tina offers some helpers to make this easy, for cloudinary , s3 , & dos ("Digital Ocean Spaces").

      Source ↗ tina.io/docs/reference/search/overview

      Currently only TinaCloud's search API is supported but we plan to provide alternative providers in the near future

      Source ↗ tina.io/…/overview

      The recommended auth provider for Tina is based on Auth.js .

      Source ↗ tina.io/…/overview

      We currently have database adapters for the following database implementations: Vercel KV MongoDB

  4. Amazon S3 and Cloudinary, through official upload providersPostgreSQL, MySQL, MariaDB and SQLite as databasesNodemailer and SendGrid, through official email providersSentry, through the official @strapi/plugin-sentry error-tracking pluginStrapi Cloud, deploying from a Git branch
    1 product
    • Strapi
      Vendor documentation Checked
      8 quotes from 5 sources

      Source ↗ docs.strapi.io/cms/features/media-library

      The providers maintained by Strapi are the following. Clicking on a card will redirect you to a docs page with a configuration example: Amazon S3 Official provider for file uploads to Amazon S3. Cloudinary Official provider for media management with Cloudinary. Local Default provider for storing files locally on the server.

      Source ↗ docs.strapi.io/cms/configurations/database

      Supported databases The following databases are supported by Strapi: Database Recommended Minimum MySQL 8.4 8.0 MariaDB 11.4 10.3 PostgreSQL 17.0 14.0 SQLite 3 3

      Source ↗ docs.strapi.io/cms/features/email

      There are both official providers maintained by Strapi — discoverable via the Marketplace — and many community maintained providers available via npm

      For example, to install the Sendgrid provider: Yarn NPM terminal yarn add @strapi/provider-email-sendgrid

      For most production setups that use a dedicated SMTP relay, consider switching to @strapi/provider-email-nodemailer (set provider to "nodemailer" in your email plugin config).

      Source ↗ docs.strapi.io/cms/plugins/sentry

      This plugin enables you to track errors in your Strapi application using Sentry. IDENTITY CARD Location Only usable and configurable via server code Package name @strapi/plugin-sentry

      Source ↗ docs.strapi.io/cloud/projects/settings

      The GitHub or GitLab repository, branch and base directory for a Strapi Cloud project are by default chosen at the creation of the project

      Auto-deploy Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch.

  5. Cloudinary asset manager, via an appBynder DAM, via an appShopify, via an appSlack, via an appVercel deployments, via an app
    1 product
    • Storyblok
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ storyblok.com/app-store

      Search for apps, discover new field types and add functionalities to your Storyblok project.

      Vercel Deployments View Vercel deployments within Storyblok Bynder Include Bynder assets into your content Cloudinary Asset Manager Manage your assets with Cloudinary

      Shopify V2 Seamlessly integrate your Shopify e-commerce platform with Storyblok Slack Connect Storyblok with your Slack workspace

  6. GitHub, GitLab and Gitea/Forgejo repositoriesS3-compatible buckets and Azure Blob for external mediaCloudinary and Uploadcare as external DAMsLorem Picsum, Pexels, Pixabay and Unsplash stock photosTranslation via Google NMT and LLM providers
    1 product
    • Sveltia CMS
      Vendor documentation Checked
      4 quotes from 4 sources

      Source ↗ sveltiacms.app/en/docs/backends

      Sveltia CMS supports the following Git-based backends: GitHub GitLab Gitea/Forgejo

      Source ↗ sveltiacms.app/en/docs/media

      Sveltia CMS currently supports the following external media storage providers: Amazon S3 and S3-compatible providers: Backblaze B2 Cloudflare R2 DigitalOcean Spaces Scaleway Object Storage Supabase Storage Azure Blob Storage Cloudinary Uploadcare

      Source ↗ sveltiacms.app/en/docs/integrations/stock-photos

      Currently, Sveltia CMS supports the following free stock photo providers: Lorem Picsum Pexels Pixabay Unsplash

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      Currently, the following services are supported: Neural Machine Translation (NMT) Google: Cloud Translation Large Language Models (LLMs) Anthropic: Claude Haiku 4.5

  7. MongoDB, Postgres and SQLite as databasesAmazon S3, Cloudflare R2, Google Cloud Storage, Azure and Vercel BlobUploadthing, through an official storage adapterStripe and Sentry, through official plugins
    1 product
    • Payload CMS
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ payloadcms.com/docs/database/overview

      Currently, Payload officially supports the following Database Adapters: MongoDB with Mongoose Postgres with Drizzle SQLite with Drizzle

      Source ↗ payloadcms.com/docs/upload/storage-adapters

      Service Package Vercel Blob @payloadcms/storage-vercel-blob AWS S3 @payloadcms/storage-s3 Azure @payloadcms/storage-azure Google Cloud Storage @payloadcms/storage-gcs Uploadthing @payloadcms/storage-uploadthing R2 @payloadcms/storage-r2

      Source ↗ payloadcms.com/docs/plugins/overview

      These plugins are maintained by the Payload team and its contributors and are guaranteed to be stable and up-to-date. Form Builder MCP Multi-Tenant Nested Docs Redirects Search Sentry SEO Stripe Import/Export Ecommerce

  8. Databases — SQLite, libSQL, Cloudflare D1, PostgreSQLMedia storage — Cloudflare R2, AWS S3 or S3-compatible, local filesSign-in — GitHub, Google, Atmosphere (AT Protocol)
    1 product
    • EmDash
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ docs.emdashcms.com/concepts/architecture

      Storage: the local filesystem, Cloudflare R2, or any S3-compatible storage for media.

      Source ↗ docs.emdashcms.com/coming-from/astro

      Content stored in SQLite, libSQL, Cloudflare D1, or PostgreSQL

      Source ↗ docs.emdashcms.com/guides/authentication

      GitHub, Google, and the Atmosphere (AT Protocol) ship out of the box, and the same provider interface is open for third-party packages.

  9. GitHub, for content, auth and webhook deliveryAn email provider (Resend or SMTP) for sign-in and invite mail
    1 product
    • Pages CMS
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ pagescms.org/docs/guides/installing/github-app

      Pages CMS uses a GitHub App for repository access, user sign-in, webhook delivery, and installation-scoped repository operations.

      Source ↗ pagescms.org/docs/development/environment-variables

      EMAIL_PROVIDER resend or smtp .

      EMAIL_FROM Sender address for auth and invitation emails.

  10. GitHubKeystatic Cloud (auth and image hosting)
    1 product
    • Keystatic
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ keystatic.com/docs/configuration

      github to connect to a GitHub repository and read/write files to it

      Source ↗ keystatic.com/docs/cloud

      Keystatic Cloud simplifies authentication (GitHub) with your projects.

      Keystatic Cloud also offers opt-in products such as Cloud Images (an image storage, optimisation and delivery service)

  11. GitHub
    1 product
    • ZeroCMS
      Tested Checked
  12. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Decap CMS
      Not tested Undated

Tools for bringing existing content in.

  1. Storyblok CLIManagement APIMigration guides for Contentful, WordPress, AEM, Sitecore and Drupal
    1 product
    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/cms-migration

      Migrate from Contentful Migrate from WordPress Migrate from Adobe Experience Manager (AEM) Migrate from Sitecore Migrate from Drupal

      Use the Management API (or CLI or importer tools) to create stories, folders, references, and set correct metadata

  2. WordPress WXR file importWordPress.com OAuth importSelf-hosted WordPress import by URL
    1 product
    • EmDash
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.emdashcms.com/migration/content-import

      Upload a WordPress eXtended RSS (WXR) export file directly to the admin dashboard.

      For sites hosted on WordPress.com, connect via OAuth to import

      When you enter a URL, EmDash probes the site to detect WordPress and show available content

  3. Forestry migration, from its settings fileWordPress, as a guide around a third-party exporter
    1 product
    • TinaCMS
      Their own note on the Forestry importer is that the migration will not be perfect. Vendor documentation Checked
      8 quotes from 2 sources

      Source ↗ tina.io/docs/forestry/migrate

      Then, run the migration command: Copy npx @tinacms/cli@latest init This will ask you a few questions. When it asks you if you want to migrate your forestry folder please answer y for yes.

      This will migrate your content from Forestry to TinaCMS. It will create a tina/config.{ts,js} that will contain the setup for Tina as well as the schema for your content. However, this migration will not be perfect.

      This migration tool takes each section in your .forestry/settings.yaml file and turns it into a TinaCMS collection . If one or more templates are defined in the section, it will create a TinaCMS template for each front matter template.

      TinaCMS will use the label field in the .forestry/settings.yaml file as the name of the collection.

      Framework-Specific Guides Overview Migrating From WordPress Gatsby Migrating an existing Gatsby blog to TinaCMS NextJS Querying Tina Content in NextJS Internationalization with NextJS+Tina Using Drafts with Visual Editing Hybrid Approach Docusaurus Markdown to MDX migration guide

      Source ↗ tina.io/docs/guides/converting-wordpress-to-tina

      This guide is a walkthrough using a WordPress to Markdown converter , which is recommended for most use cases where you want to migrate your content from WordPress to Tina. This guide focuses on transferring content and media only and will not include page styling.

      Use wordpress-export-to-markdown to convert your WordPress content into Markdown.

      Other conversion options that are not covered in this guide include: Using the WordPress Rest API - best for extracting the pure html for page or post content in JSON format Using the WPGraphQL plugin - best for cases where you want to query and extract specific data and content

  4. CLI dataset import (NDJSON)
    1 product
    • Sanity
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ sanity.io/docs/content-lake/importing-data

      The recommended way of importing data is to use the Command Line Interface

      You can run sanity datasets import --help for a quick summary of syntax and options.

      Import using the CLI The Sanity import tool operates on newline-delimited JSON (NDJSON) files.

      This guide outlines details for importing documents, including images and files, into a dataset.

  5. Import and export plugin for CSV and JSON
    1 product
    • Payload CMS
      Batch hooks remap a foreign system's field names on the way in; migrating media is a custom script against the Local API. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ payloadcms.com/docs/plugins/import-export

      Install the plugin using any JavaScript package manager like pnpm , npm , or Yarn : 1 pnpm add @payloadcms/plugin-import-export

      Collection-level hooks let you intercept each batch of documents before it is written (to file on export, or to the database on import) and after it has been written. Hooks fire once per batch and work for both csv and json formats.

      format string Either csv or json to determine the shape of data exported

      File storage - Create an import document in the imports collection with an uploaded file Local API - Create an import document

      When importing from or exporting to a foreign system, column names rarely match your Payload field names. Use the batch before hooks to rename keys on the way in or out.

      Source ↗ payloadcms.com/…/how-to-migrate-from-wordpress-to-payload

      To migrate your media, we’re going to use a custom script (below) that accesses the local Payload API and creates media elements for us.

  6. Netlify/Decap CMS drop-in config compatibility
    1 product
    • Sveltia CMS
      Existing Netlify/Decap configs work with a one-line script swap. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/migration/netlify-decap-cms

      In some casual use cases, Sveltia CMS can be used as a drop-in replacement for Netlify/Decap CMS with just a one-line code update.

      Source ↗ sveltiacms.app/en/docs/successor-to-netlify-cms

      The vast majority of existing configurations work out of the box

  7. strapi import (restores strapi export archives)
    1 product
    • Strapi
      strapi import restores archives produced by strapi export — configuration, entities, relations, assets, schemas — and requires source and target schemas to match. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/features/data-management

      The Data Management feature can be used to import, export, or transfer data. Data Management is CLI-based only, but is partly configured in the admin panel.

      Source ↗ docs.strapi.io/cms/features/data-management/import

      The strapi import command is part of the Data Management feature and used to import data from a file or directory.

      By default, the strapi import command imports data from an encrypted and compressed tar.gz.enc file which includes:

      the project configuration, entities: all of your content, links: relations between your entities, assets: files stored in the uploads folder, schemas, the metadata.json file.

      The archive follows the same structure as the one produced by strapi export

      The source and target schemas must match to successfully use strapi import , meaning all content types must be identical.

  8. Nothing
    5 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/…/introduction-to-syncing

      In the Syncing section of our Developer documentation, we cover: Git — Learn how to get your website files from your Git Repository onto CloudCannon Direct Upload — Learn how to upload your website files from local storage to CloudCannon Syncing Errors — Learn how to resolve Syncing Errors when CloudCannon detects that incoming changes conflict with recently saved content

      Source ↗ cloudcannon.com/…/create-a-site-with-direct-upload

      Uploading files through a web browser is a quick way to get a website live on CloudCannon. When creating a new site: Select Upload a folder or Upload a zip file

      Source ↗ cloudcannon.com/website-migration

      Our migration team can help you migrate your website to CloudCannon, using any static site generator. We'll handle all the technical aspects, so you can focus on creating engaging content.

      How a migration works 1 Choose a static site generator

      Website migrations Starting at 3000 USD / per project

    • Decap CMS
      Tested Checked
    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked

What the product's own AI tools or agents can do.

  1. An agent

    A proper agent you can hand tasks to.

    2 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 1 source

      Source ↗ zerocms.io/features/ai-content-agent

      The ZeroCMS AI agent reads your content collections, understands your schema, and has access to every file in your repo. Ask it to write a post, update a tagline, or find all draft entries.

      More than a writing assistant. The agent can create, edit, organize, and audit content across your entire site. If you can do it in Zero's editor, you can ask the agent to do it for you.

    • Sanity
      Agent Actions edit a document's fields. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/docs/agent-actions/introduction

      Agent Actions know about your content model, which lets them map content accurately to your documents and fields.

      can walk through your document fields and make changes.

  2. AI-assisted tools

    For example buttons that rewrite, summarize or translate.

    4 products
    • Payload CMS
      Announced on the quote-only enterprise tier. Vendor claim Checked
      7 quotes from 2 sources

      Source ↗ payloadcms.com/enterprise/enterprise-ai

      From translations to dynamic image generation and an intelligent writing assistant, Payload’s AI toolset is thoughtfully engineered to accompany your efforts, not replace them.

      your desired language is just two clicks—and milliseconds—away, translated seamlessly by your preferred LLM (large language model).

      Let AI augment your content, not drive it. Highlight different text and receive alternate suggestions, or rewrite copy effortlessly.

      01 Break the language barrier If you have a document in English, or any other language, your desired language is just two clicks—and milliseconds—away, translated seamlessly by your preferred LLM (large language model). COMING SOON 02 From ideas to imagery

      COMING SOON 03 Meet your (literal) ghostwriter Let AI augment your content, not drive it.

      Schedule time with us What we'll talk about: Dedicated engineering support Demo of enterprise features, including visual editing and AI

      Source ↗ payloadcms.com/enterprise

      Enterprise AI From translations to dynamic image generation and an intelligent writing assistant, Payload’s AI toolset is thoughtfully engineered to accompany your efforts, not replace them.

    • Storyblok
      Point tools — translation, alt text and SEO. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      Storyblok's AI features assist with content creation and management needs, including translations, alt text, and SEO.

    • Strapi
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Feature Description Content-Type Builder AI chat assistant that helps design content-type structures, explain existing schemas, and plan data models. Uses your existing content types as context.

      Internationalization Automatically translates content from the default locale to all other configured locales when you save an entry. Media Library Generates alternative text, captions, and descriptions for uploaded images. Credits and data handling

    • Sveltia CMS
      The in-product AI is field translation. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      With the help of AI, you can translate any text field from another locale without leaving the Content Editor

  3. None
    6 products
    • CloudCannon
      Vendor claim Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/ai-info

      CloudCannon manages and hosts static websites. The platform centres on three things: visual editing, hosting and performance, and low maintenance.

      Source ↗ cloudcannon.com/ai-llm-cms

      Your tools. Your models. Your data. CloudCannon projects are local-first. Clone the repo and work on your own machine with whatever AI tooling you prefer — Cursor, Claude Code, GitHub Copilot, a locally hosted model, or something you built yourself.

    • Decap CMS
      Tested Checked
    • EmDash
      Agent-ready through the MCP server; ships no first-party AI feature of its own. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/ai-tools

      You can ask Claude, ChatGPT, or other tools to draft posts, update pages, manage media, search your content

      EmDash has a built-in MCP server that lets AI assistants work directly with your site's content.

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • TinaCMS
      Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ tina.io/pricing

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1

      Source ↗ tina.io/roadmap

      MCP Server We're working on some ways to leverage AI in the content creation process.

      Source ↗ tina.io/docs/vibe-coding

      AI coding assistants work best with TinaCMS when you stay in control. This guide shows how to collaborate with AI as a partner, not a pilot.

      1.1 Use an AI-Integrated IDE AI works best when it lives in your editor. For seamless inline assistance, we recommend Visual Studio Code (with GitHub Copilot ) or Cursor .

What is being passed to the AI tools or agents as context.

  1. Content and code

    Your entries and the site's own code.

    1 product
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/ai-content-agent

      It reads your repo, your schemas, and your existing content before you type a word.

      Explores files like a teammate The agent can browse your content collections, read existing entries, and cross-reference related files to produce content that fits your site

      Source ↗ zerocms.io

      ZeroCMS reads your existing Zod schemas and Astro components so you never maintain separate configs.

  2. Your content

    Your entries.

    3 products
    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/agent-actions/introduction

      Agent Actions know about your content model, which lets them map content accurately to your documents and fields.

    • Storyblok
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      AI Translate will handle all text-based content fields. AI Translate will not handle asset metadata (for example, captions or copyright).

      AI Translations will only generate translations for fields that have been marked as translatable with the Translate toggle.

      Source ↗ storyblok.com/docs/api/management/stories/ai-translate

      This endpoint returns the story content, translated by AI.

    • Strapi
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Automatically translates content from the default locale to all other configured locales when you save an entry.

      Source ↗ docs.strapi.io/cms/features/internationalization

      AI-powered internationalization only works one way, keeping the default locale content as the unique source of truth.

  3. The prompt only

    Only the text you send it.

    6 products
    • CloudCannon
      The product has no built-in AI, so this follows from that. Vendor claim Checked
    • Decap CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • EmDash
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
    • Keystatic
      The product has no built-in AI, so this follows from that. Tested Checked
    • Pages CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • TinaCMS
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
  4. Undisclosed

    The vendor does not say what the AI sees.

    2 products
    • Payload CMS
      Vendor claim Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/enterprise/enterprise-ai

      Let AI augment your content, not drive it. Highlight different text and receive alternate suggestions, or rewrite copy effortlessly.

    • Sveltia CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      With the help of AI, you can translate any text field from another locale without leaving the Content Editor, making it easier to manage multilingual content.

      Anthropic: Claude Haiku 4.5 DeepSeek: DeepSeek-V4-Flash Google: Gemini 3.5 Flash-Lite Mistral AI: Mistral Small 4 OpenAI: GPT-5.6 Luna

      The field(s) will be automatically translated. Note that the Translation button on the pane header only translates empty fields, while in-field Translation buttons override any filled text.

Whether you can create custom skills the AI can use.

  1. Yes
    2 products
    • ZeroCMS
      Tested and documented Checked
      1 quote from 1 source

      Source ↗ zerocms.io/features/ai-content-agent

      Skills Reusable workflows you define Build custom skills for your team's specific needs

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/…/ai-assist-working-with-instructions

      when you create a new instruction, it will only be visible to you by default. select the make visible to all studio members switch to share it with other studio users.

  2. No
    10 products
    • CloudCannon
      Only an agent can be given skills, so this follows from the level. Vendor claim Checked
    • Decap CMS
      Only an agent can be given skills, so this follows from the level. Tested Checked
    • EmDash
      Only an agent can be given skills, so this follows from the level. Vendor documentation Checked
    • Keystatic
      Only an agent can be given skills, so this follows from the level. Tested Checked
    • Pages CMS
      Only an agent can be given skills, so this follows from the level. Tested Checked
    • Payload CMS
      Only an agent can be given skills, so this follows from the level. Vendor claim Checked
    • Storyblok
      Only an agent can be given skills, so this follows from the level. Vendor documentation Checked
    • Strapi
      Only an agent can be given skills, so this follows from the level. Vendor documentation Checked
    • Sveltia CMS
      Only an agent can be given skills, so this follows from the level. Vendor documentation Checked
    • TinaCMS
      Only an agent can be given skills, so this follows from the level. Vendor documentation Checked

Does the product offer an MCP server?

  1. Reads and writes

    An agent can read and write content.

    6 products
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/features/mcp-server

      Zero's remote MCP server lets Claude, Claude Code, ChatGPT, Codex, or any MCP-compatible client connect directly to your site and manage content on your behalf

      Full capability Write, edit, publish, and more Read and write content, browse collections, create new entries, edit existing ones, run quality checks, search across your site.

      It can create, edit, and publish exactly what you can, and nothing more.

    • EmDash
      A server that reads, writes and publishes. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ docs.emdashcms.com/guides/ai-tools

      EmDash has a built-in MCP server that lets AI assistants work directly with your site's content.

      Source ↗ docs.emdashcms.com/reference/mcp-server

      Create, update, delete, publish, unpublish, schedule, unschedule, duplicate, and restore content.

    • Payload CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/docs/plugins/mcp

      In your Payload admin panel, navigate to MCP → API Keys, create a new key, and toggle the individual capabilities on for each collection, global, tool, prompt, and resource you want that key to be able to use.

      Determines whether the model can find, create, update, and delete documents in the collection.

      Tools allow you to extend MCP capabilities beyond basic CRUD operations. Use them when you need to perform complex queries, aggregations, or business logic that isn't covered by the standard collection operations.

    • Sanity
      The server can write and publish documents, not only read. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sanity.io/docs/ai/mcp-server

      With the MCP server, agents can go beyond code generation and perform advanced content management operations in your Sanity projects.

      Agents can execute GROQ queries, manage releases, and patch documents with full awareness of your schema, eliminating the need to manually supply context.

      Publish one or more draft documents to make them live

    • Storyblok
      The hosted server exposes the Management API only, not the read-only Content Delivery API. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/libraries/mcp-server

      Storyblok's MCP server exposes the Management API and makes it available to any MCP-compatible AI client.

      The server exposes the Management API only. It can't read published content through the Content Delivery API.

    • Strapi
      Off until it is enabled in the server configuration file. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/strapi-mcp-server

      Before first use, the Strapi MCP server must be: enabled through the server configuration file and authenticated with Admin tokens created in the admin panel connected to your AI client.

      Option Type Default Description enabled Boolean false Enable or disable the MCP server.

      The MCP server exposes a set of content management tools to AI clients such as Claude Desktop, Claude Code, Cursor, or any MCP-compatible tool.

      Collection types generate up to 8 tools: 5 for CRUD operations and 3 for Draft & Publish actions: Tool Action Permission required Description list Read read List entries with pagination, sorting, and filtering

  2. None
    6 products
    • CloudCannon
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ cloudcannon.com/ai-info

      Git providers: GitHub, GitLab, Bitbucket AI development tooling: Cursor, Claude Code, GitHub Copilot, and self-hosted models. Because CloudCannon projects are plain files in Git, AI agents can read and edit them directly without negotiating with a CMS layer.

      Source ↗ cloudcannon.com/documentation/developer-reference

      Platform # The tools for working with the CloudCannon backend programmatically — the HTTP API, the SDK, and the CLI — plus the permissions that control what your team can do. Browse Platform CLI — manage CloudCannon from the terminal TypeScript SDK — a typed client for the API API — manage organizations, projects, sites, and builds over HTTP Permissions — control what your team members can do

    • Decap CMS
      Tested Checked
    • Keystatic
      Tested Checked
    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Manage content and media right in your GitHub repository. No database, no API, no extra backend.

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/working-with-ai

      While we don’t have our own MCP server yet, we provide an official Agent Skill and `llms.txt` to help AI agents understand the structure and syntax of the Sveltia CMS configuration.

    • TinaCMS
      Vendor claim Checked
      1 quote from 1 source

      Source ↗ tina.io/roadmap

      MCP Server We're working on some ways to leverage AI in the content creation process.

How an agent connects to the MCP server.

  1. Remote
    Remote
    You can pass the client an URL to connect to.
    6 products
    • ZeroCMS
      Tested and documented Checked
      1 quote from 1 source

      Source ↗ zerocms.io/features/mcp-server

      In your MCP-compatible tool, add https://mcp.zerocms.io as the MCP server address. ZeroCMS will prompt you to authorize the connection

    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/reference/mcp-server

      The server uses the Streamable HTTP transport in stateless mode.

    • Payload CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/docs/plugins/mcp

      claude mcp add --transport http Payload http://127.0.0.1:3000/api/mcp

      Our recommended approach to make your server available for most MCP clients is to use the mcp-remote package via npx.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/ai/mcp-server

      The Sanity MCP server is hosted on Sanity's own infrastructure on https://mcp.sanity.io.

    • Storyblok
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/libraries/mcp-server

      The server is a hosted, stateless HTTP endpoint available at `https://mcp.storyblok.com/mcp`.

    • Strapi
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.strapi.io/cms/features/strapi-mcp-server

      The MCP server uses the Streamable HTTP transport protocol. Any MCP-compatible client can connect by pointing to the /mcp endpoint with a Bearer token in the Authorization header.

  2. None
    6 products
    • CloudCannon
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • Decap CMS
      There is no MCP server, so this follows from that. Tested Checked
    • Keystatic
      There is no MCP server, so this follows from that. Tested Checked
    • Pages CMS
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • Sveltia CMS
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • TinaCMS
      There is no MCP server, so this follows from that. Vendor claim Checked

How an agent authenticates to the MCP server.

  1. None
    6 products
    • CloudCannon
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • Decap CMS
      There is no MCP server, so this follows from that. Tested Checked
    • Keystatic
      There is no MCP server, so this follows from that. Tested Checked
    • Pages CMS
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • Sveltia CMS
      There is no MCP server, so this follows from that. Vendor documentation Checked
    • TinaCMS
      There is no MCP server, so this follows from that. Vendor claim Checked
  2. OAuthAPI key
    OAuth
    The user can authorize the agent to access their account. Works with most tools such as Claude or Cursor, including their mobile apps.
    API key
    The agent carries a key you issue.
    3 products
    • EmDash
      Sign-in is OAuth or a personal access token minted in the admin. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/reference/mcp-server

      OAuth 2.1 Authorization Code + PKCE

      Long-lived ec_pat_* tokens created in the admin panel.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/ai/mcp-server

      The Sanity MCP server uses OAuth by default to perform operations on your behalf. You may instead provide an API token by setting the Authorization header.

    • Storyblok
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/libraries/mcp-server

      All clients connect to `https://mcp.storyblok.com/mcp`. We recommend authenticating with OAuth.

      Use a personal access token when you need a static credential, such as scripted or non-interactive use, or a client without OAuth support.

  3. API key
    API key
    The agent carries a key you issue.
    2 products
    • Payload CMS
      An administrator mints keys in the admin panel. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/docs/plugins/mcp

      Replace the default Bearer-token / API-key auth with a completely custom access strategy.

      In your Payload admin panel, navigate to MCP → API Keys, create a new key, and toggle the individual capabilities on for each collection, global, tool, prompt, and resource you want that key to be able to use.

      Payload adds an API key collection that allows admins to manage MCP capabilities.

    • Strapi
      Each client connects with an Admin token created in the admin panel and pasted into its config. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/strapi-mcp-server

      The MCP server authenticates requests using Admin tokens. Each MCP session is scoped to the permissions of the token used to connect: Create a new Admin token

      Before first use, the Strapi MCP server must be: enabled through the server configuration file and authenticated with Admin tokens created in the admin panel connected to your AI client.

      Create a new Admin token (see Creating an Admin token on the Admin tokens feature page). Copy the token value. You will need it when configuring the AI client.

  4. OAuth
    OAuth
    The user can authorize the agent to access their account. Works with most tools such as Claude or Cursor, including their mobile apps.
    1 product
    • ZeroCMS
      Each person authorizes the connection with their own account from inside their AI client, and the agent then acts as them. Tested and documented Checked
      4 quotes from 3 sources

      Source ↗ mcp.zerocms.io/.well-known/oauth-authorization-server

      "authorization_endpoint":"https://mcp.zerocms.io/oauth/authorize","token_endpoint":"https://mcp.zerocms.io/oauth/token","token_endpoint_auth_methods_supported":["none"],"response_types_supported":["code"],"grant_types_supported":["authorization_code","refresh_token"],"code_challenge_methods_supported":["S256"],"scopes_supported":["openid","profile","email","offline_access"]

      Source ↗ mcp.zerocms.io/.well-known/oauth-protected-resource

      "resource":"https://mcp.zerocms.io","authorization_servers":["https://mcp.zerocms.io"],"scopes_supported":["openid","profile","email","offline_access"],"token_types_supported":["Bearer"]

      Source ↗ zerocms.io/features/mcp-server

      User-authorized Agents act as you, not as a bot When you connect a client, you authorize it to act on your behalf. The agent inherits your site access and permissions.

      as the MCP server address. ZeroCMS will prompt you to authorize the connection — just accept the access request while logged into your Zero account. That's it. The client is ready to read and write your content immediately.

Whether you choose which model runs.

  1. Yes
    4 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 2 sources

      Source ↗ zerocms.io/features/ai-content-agent

      ZeroCMS supports: GPT-5.6 Luna (default), GPT-5.6 Sol, Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5, Claude Haiku 4.5, and Gemini 3 Flash.

      Source ↗ zerocms.io/changelog

      Zero picks a capable default model for you, and you can switch to your preferred one when starting a conversation.

    • Payload CMS
      Vendor claim Checked
      1 quote from 1 source

      Source ↗ payloadcms.com/enterprise/enterprise-ai

      your desired language is just two clicks—and milliseconds—away, translated seamlessly by your preferred LLM (large language model).

    • Storyblok
      A choice of AI model, or a connected provider of your own. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      AI Customization allows you to customize your API integration by using your own credentials, choosing your preferred model, and adding fine-grained configurations.

    • Sveltia CMS
      You choose the translation service. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      Select a translation service from the dropdown menu and paste your API key when prompted.

  2. No
    7 products
    • CloudCannon
      The product has no built-in AI, so this follows from that. Vendor claim Checked
    • Decap CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • EmDash
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
    • Keystatic
      The product has no built-in AI, so this follows from that. Tested Checked
    • Pages CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • Sanity
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/…/install-and-configure-sanity-ai-assist

      To be able to write structured content, we're using the largest language models.

      Source ↗ sanity.io/blog/sanity-ai-assist-announcement

      We're constantly evaluating the latest and greatest to ensure Sanity AI Assist uses the most efficient and performant LLM available.

    • TinaCMS
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
  3. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Strapi
      No choice of the underlying AI model is documented. Not tested Undated

How AI usage is charged.

  1. None
    6 products
    • CloudCannon
      The product has no built-in AI, so this follows from that. Vendor claim Checked
    • Decap CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • EmDash
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
    • Keystatic
      The product has no built-in AI, so this follows from that. Tested Checked
    • Pages CMS
      The product has no built-in AI, so this follows from that. Tested Checked
    • TinaCMS
      The product has no built-in AI, so this follows from that. Vendor documentation Checked
  2. In the planMetered
    In the plan
    Covered by the plan price.
    Metered
    Charged by use.
    2 products
    • ZeroCMS
      Tested and documented Checked
      3 quotes from 2 sources

      Source ↗ zerocms.io/features/ai-content-agent

      Every plan includes a monthly credit allowance that resets each billing cycle.

      Usage is metered per AI call based on tokens processed and the model used.

      Source ↗ zerocms.io/pricing

      Every plan includes a monthly credit quota that resets each billing cycle. If you run out of your quota, you can buy new credit packs (valid for a year) or enable automatic top-ups.

    • Strapi
      Sold with the Growth plan only, and listed as not yet available on Enterprise. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Strapi AI includes 1,000 credits per month on the Growth plan, and 10 free credits during the free trial. Strapi AI is not available on Enterprise plans.

      When your credits run out, you can keep using Strapi AI, with overages billed monthly.

      Source ↗ strapi.io/pricing-cms

      Additional credits: +$1.50 per 100 credits - 1,000 credits / month 1,000 credits / month Not yet available Not yet available

      Growth $45 per month Buy now Everything in Community, plus... Includes 3 seats (+$15/month/seat) Strapi AI NEW Live Preview Releases Content History Basic Support

      Everything in Growth, plus... SSO Review Workflows Audit Logs Strapi AI COMING SOON SOC 2 report Standard Support

  3. Your own key
    Your own key
    You supply a model provider key and pay them.
    1 product
    • Sveltia CMS
      You supply your own API key. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      Select a translation service from the dropdown menu and paste your API key when prompted.

      Source ↗ sveltiacms.app/en/docs/privacy

      These are “bring your own key” (BYOK) features that are entirely optional. You provide your own API keys for these services

  4. In the planMeteredYour own key
    In the plan
    Covered by the plan price.
    Metered
    Charged by use.
    Your own key
    You supply a model provider key and pay them.
    1 product
    • Storyblok
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      AI Customization allows you to customize your API integration by using your own credentials, choosing your preferred model, and adding fine-grained configurations.

      Usage of Storyblok's AI features consumes AI credits. The number of initial AI credits available per space depends on your pricing plan.

      Source ↗ storyblok.com/legal/ai-terms-and-conditions

      over the included quota will result in additional charges for additional AI Credit packages

      Storyblok may offer the option for certain Customers to also connect their own AI provider to the Storyblok Services. In such cases AI services are solely provided by the Customer's chosen AI provider under a direct agreement between the Customer and that AI provider.

  5. Undisclosed
    Undisclosed
    The vendor does not publish what the AI costs.
    1 product
    • Payload CMS
      Vendor claim Checked
      2 quotes from 1 source

      Source ↗ payloadcms.com/enterprise/enterprise-ai

      Powered by DALL-E, your prompts are transformed into captivating images

      translated seamlessly by your preferred LLM

  6. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Sanity
      Not tested Undated

Whether your content is or can be used to train models.

  1. No

    The terms forbid it, for every provider in the chain.

    3 products
    • ZeroCMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ zerocms.io/privacy

      Zero does not use your chat conversations, repository content, or AI interactions to train any AI models. Our AI subprocessors (Anthropic, OpenAI, Google) are contractually prohibited from using your data for model training.

    • Sanity
      Sanity's AI Terms require every AI integration to be configured not to train on input data. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/legal/tos-ai

      verifies that all its generative ai technology partner integrations can be configured to not use input data to train ai models

      all configurations explicitly prohibit or disable such training activity on all data transferred to third party ai providers

    • Storyblok
      Storyblok's AI Terms forbid it; with a customer-connected AI provider, that provider's own terms govern instead. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/legal/ai-terms-and-conditions

      Input is not used to train AI Features or the underlying AI provided by the AI Providers.

      Storyblok may offer the option for certain Customers to also connect their own AI provider to the Storyblok Services. In such cases AI services are solely provided by the Customer's chosen AI provider under a direct agreement between the Customer and that AI provider.

  2. Not prohibited

    The terms neither allow training nor forbid it.

    3 products
    • Payload CMS
      The terms let Payload use Submitted Data to improve the Service, and say nothing about training either way. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/cloud-terms

      Customer agrees that Payload may use Submitted Data as necessary to make available the Service, perform its obligations hereunder, and improve the Service

      Customer agrees that Payload may also use and exploit in any manner on a worldwide, irrevocable, perpetual, royalty-free, fully paid-up basis, any: (a) aggregated non-personally identifiable information related to any usage of the Service to operate and improve Payload Technology

      “Submitted Data” means any data Customer integrates, or uses in connection with, the Service.

    • Strapi
      The terms grant a licence over customer content and say nothing about training; the AI docs promise only non-retention, describe the processing as Strapi-managed and name no model. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ strapi.io/enterprise-terms

      Customer, on its own behalf and on behalf of its Users, grants Strapi a non-exclusive, sub-licensable, transferable, worldwide, royalty-free right and license to use or process Customer Content but as necessary to perform hereunder or exercise rights granted hereunder, including to verify compliance with Subscription Parameters.

      Source ↗ strapi.io/privacy

      Improving Strapi: Testing features, interacting with feedback platforms and questionnaires, managing landing pages, heat mapping our site, traffic optimization and data analysis and research, including profiling and the use of machine learning and other techniques over your data and in some cases using third parties to do this.

      Source ↗ docs.strapi.io/cms/usage-information

      Strapi AI features process requests through Strapi-managed infrastructure. Temporary metadata and content snippets exist only for the duration of each request. Strapi never stores unpublished content or credentials outside your instance.

    • Sveltia CMS
      Sveltia defers to each provider's policy; the docs warn a free-tier provider may use submitted data. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/privacy

      For third-party services, please refer to their respective privacy policies.

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      API input and output may be used to improve their products. As their terms state, do not send sensitive or confidential information while using the free tier.

  3. Does not apply
    6 products
    • CloudCannon
      There is no built-in AI, so there is no provider to train on anything. Does not apply
    • Decap CMS
      There is no built-in AI, so there is no provider to train on anything. Does not apply
    • EmDash
      There is no built-in AI, so there is no provider to train on anything. Does not apply
    • Keystatic
      There is no built-in AI, so there is no provider to train on anything. Does not apply
    • Pages CMS
      There is no built-in AI, so there is no provider to train on anything. Does not apply
    • TinaCMS
      There is no built-in AI, so there is no provider to train on anything. Does not apply

Whether the product can generate images using AI.

  1. Yes
    2 products
    • ZeroCMS
      Tested and documented Checked
      2 quotes from 2 sources

      Source ↗ zerocms.io/features/image-generation

      Type a prompt, pin up to three existing images for style reference, and ZeroCMS generates a production-ready image, placed directly into your content field. No Figma, no Midjourney, no upload dance.

      Source ↗ zerocms.io/features/ai-content-agent

      Ask it to generate a hero image, a feature illustration, or any other visual. It creates the image and drops it into the right field — no separate tool, no manual upload.

    • Sanity
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/…/install-and-configure-sanity-ai-assist

      AI Assist can create assets for images configured with a prompt field.

  2. No
    9 products
    • CloudCannon
      Vendor documentation Checked
      7 quotes from 1 source

      Source ↗ cloudcannon.com/…/what-is-a-file-input

      There are three types of File input: File Document Image

      You can upload a file by dragging and dropping it from your local storage over the File input, or by clicking the Add file button at the top right of the input and selecting the Upload a new file option.

      You can select an existing file by selecting the Select existing files option.

      Alternatively, you can link to an externally hosted file by pasting the file URL into the text field of the File input.

      The Image input provides an editing interface for uploading image files to your repository or DAM and browsing existing assets.

      For Image inputs, CloudCannon may prompt you to crop or resize your image when you upload or select one.

      CloudCannon may also create additional copies of an image of different sizes when you upload or select an image using Image input.

    • Decap CMS
      Tested Checked
    • EmDash
      Images are uploaded through the admin UI, not generated. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/ai-tools

      The MCP transport can't carry binary uploads. To add a new image, upload the bytes via the admin UI

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • Payload CMS
      Announced on the enterprise tier and badged coming soon by Payload's own page, so nothing generates an image today. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ payloadcms.com/enterprise/enterprise-ai

      COMING SOON 02 From ideas to imagery Powered by DALL-E, your prompts are transformed into captivating images, dispatching of the tedious and expensive pursuit of licensed imagery—while ushering in original assets with SEO value baked-in.

      Source ↗ payloadcms.com/enterprise

      Enterprise AI From translations to dynamic image generation and an intelligent writing assistant, Payload’s AI toolset is thoughtfully engineered to accompany your efforts, not replace them.

    • Strapi
      Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Strapi AI helps content managers design content structures, translate content, and generate asset metadata from the admin panel.

      See Admin panel configuration > Strapi AI for all configuration options. Available features

      Feature Description Content-Type Builder AI chat assistant that helps design content-type structures, explain existing schemas, and plan data models. Uses your existing content types as context.

      Internationalization Automatically translates content from the default locale to all other configured locales when you save an entry. Media Library Generates alternative text, captions, and descriptions for uploaded images. Credits and data handling

      Once enabled and connected, an AI client can create, read, update, delete, publish, and unpublish entries directly through Strapi's Content Manager, all gated by Admin token permissions.

      Source ↗ docs.strapi.io/cms/features/media-library

      Generate AI captions and alt texts automatically on upload! Enabling this option will turn on AI‑powered metadata generation

    • Sveltia CMS
      Image support is search-and-insert of existing stock photos; there is no generative image feature. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/integrations/stock-photos

      This allows content creators to easily search for and insert high-quality images into their content without leaving the CMS interface.

      Currently, Sveltia CMS supports the following free stock photo providers: Lorem Picsum Pexels Pixabay Unsplash

    • TinaCMS
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ tina.io/docs/reference/types/image

      A dedicated file input that stores the URL or path of an uploaded image. It supports external media library integration , but also repo-based media configurations . Images can be uploaded to the image component with drag-and-drop actions, or with the dedicated media manager that comes with the CMS.

      Source ↗ tina.io/docs/reference/media/overview

      Note: Only Repo-based Media or an External Media Provider can be configured, but not both

      Source ↗ tina.io/pricing

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1

  3. Not tested

    We did not run this. It is not a claim that the product lacks it.

    1 product
    • Storyblok
      Not tested Undated

AI features beyond the rows above.

  1. Knowledge — brand voice, terminology and strategy the agent loads when relevantGuidelines — standing rules, site-wide or scoped to one collectionWeb search with citations while writingPDF and image input — a brief, screenshot or mockup the agent works fromPer-user and per-organization AI credit capsUndo for AI edits, from stored content checkpoints
    1 product
    • ZeroCMS
      Tested and documented Checked
      9 quotes from 4 sources

      Source ↗ zerocms.io/features/ai-content-agent

      Knowledge Brand and style reference it can load on demand Add brand voice guides, product terminology, or content strategy docs as knowledge entries. The agent pulls them in when the task calls for it.

      Guidelines Standing instructions it always follows Set rules like 'always use American English' or 'our tone is direct and never corporate' and the agent applies them to every interaction, automatically.

      The agent follows site-wide guidelines out of the box, but you can extend it with custom skills, knowledge entries, and collection-specific rules.

      Search the web Ask it to research a topic, pull in current stats, or fact-check a claim while writing. It searches the web and cites its sources.

      Attach a PDF brief, a screenshot, or a design mockup, and the agent works from it directly.

      Source ↗ zerocms.io/features/access-management

      AI cost control Limit AI credits at any level Set a credit cap for your whole organization, or dial it down per user.

      Source ↗ zerocms.io/pricing

      member roles Per-user AI credit limits

      Source ↗ zerocms.io/changelog

      Zero automatically takes snapshots before AI edits, so you can always undo if something goes wrong.

      Zero takes snapshots of content before the AI makes changes so you can go back to the previous versions if something goes wrong.

  2. Translation of content into many languagesAlt text generated for images in the asset managerSEO tag generationDrafting and improving article content with AI
    1 product
    • Storyblok
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ storyblok.com/docs/manuals/ai-assistance

      AI Translations generates professional-level translations of content in multiple languages.

      AI Alt Text generates accessibility text for images in the Storyblok asset manager.

      The AI SEO app helps you generate SEO tags for your application using AI.

      The Ideation Room feature in Storyblok enables drafting and improving potential articles.

  3. Building a content model from a natural-language descriptionContent structure extracted from a design image, a Figma project or codeAlt text, captions and tags generated for uploaded imagesEntries translated into every locale when the source is saved
    1 product
    • Strapi
      Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ docs.strapi.io/cms/ai/for-content-managers

      Feature Description Content-Type Builder AI chat assistant that helps design content-type structures, explain existing schemas, and plan data models. Uses your existing content types as context.

      Internationalization Automatically translates content from the default locale to all other configured locales when you save an entry. Media Library Generates alternative text, captions, and descriptions for uploaded images.

      Source ↗ docs.strapi.io/cms/features/content-type-builder

      Strapi AI adds an assistant that helps you create or edit content types with natural language.

      You can also use the button at the bottom of the chat window to import code from an existing Strapi or front-end application, import a Figma project, or attach an image to extract the content structure from a design.

      Source ↗ strapi.io/ai

      AI Media Library Automatically generate alt-text, captions, and tags to save hours of manual work, boost accessibility, and improve SEO

  4. Generate document content from instructionsTransform and rewrite existing contentGenerate images from a prompt field
    1 product
    • Sanity
      Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ sanity.io/…/install-and-configure-sanity-ai-assist

      Write reusable instructions in natural human language to a document-aware AI assistant that can handle chores and repetitive tasks

      AI Assist can create assets for images configured with a prompt field.

      Source ↗ sanity.io/docs/agent-actions/introduction

      Agent Actions use the concept of instructions to describe what tasks you want them to perform.

      Generate draft documents with new content.

      When you need to modify existing documents, Transform can walk through your document fields and make changes.

  5. AI field translation via Google NMT and LLM providers
    1 product
    • Sveltia CMS
      Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/ui/content-editor

      A Translate button is provided to translate all or specific text-type fields using a third-party translation service

      Source ↗ sveltiacms.app/en/docs/integrations/translations

      Currently, the following services are supported: Neural Machine Translation (NMT) Google: Cloud Translation Large Language Models (LLMs) Anthropic: Claude Haiku 4.5

  6. Chunking entries into vector embeddings for RAG
    1 product
    • Payload CMS
      Vendor claim Checked
      5 quotes from 1 source

      Source ↗ payloadcms.com/enterprise/ai-framework

      The first CMS built for RAG Payload is the only CMS that puts retrieval-augmented generation (RAG) on easy mode, giving you complete control over how your content is chunked and converted into vector embeddings.

      How it works Payload enables RAG (Retrieval-Augmented Generation) by adding vector indexes directly into your existing database. You control every step of the process, from converting your document from JSON to text to defining the chunking strategy.

      Step 1 When you save a document, Payload executes your chunking strategy, breaking the document into semantic chunks. Chunk using whichever method is appropriate for your content. You are in full control.

      Step 2 Based on the AI adapter you're using, Payload then creates vector embeddings for each chunk and stores them directly in your database. No additional database needed.

      Step 3 Your database now contains vector embeddings created from your content, and they are automatically kept in sync as your content changes.

  7. Nothing
    6 products
    • CloudCannon
      They ship open-source agent skills — Astro migration, plus standalone configuration, snippets and visual-editing skills — but these run in your own coding agent, not in CloudCannon. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ cloudcannon.com/ai-llm-cms

      Your tools. Your models. Your data. CloudCannon projects are local-first. Clone the repo and work on your own machine with whatever AI tooling you prefer — Cursor, Claude Code, GitHub Copilot, a locally hosted model, or something you built yourself.

      CloudCannon's agent-skills repo is an open-source set of AI coding agent skills that automate the process of migrating Astro projects to CloudCannon. You install the skills into your project, open it in an agent-compatible IDE, and ask the agent to handle the migration

      Point an AI agent at a CloudCannon project and it sees everything. Templates, content files, configuration, styles, build pipelines — all sitting in a Git repository, all readable as plain text.

      Source ↗ cloudcannon.com/open-source

      The standalone skills ( cloudcannon-configuration , cloudcannon-snippets , cloudcannon-visual-editing ) are useful when you only need one piece

    • Decap CMS
      Tested Checked
    • EmDash
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/ai-tools

      You can ask Claude, ChatGPT, or other tools to draft posts, update pages, manage media, search your content

    • Keystatic
      Tested Checked
    • Pages CMS
      Tested Checked
    • TinaCMS
      They document working alongside coding agents such as Copilot and Cursor, but those run in your editor, not in TinaCMS. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ tina.io/docs/vibe-coding

      AI coding assistants work best with TinaCMS when you stay in control. This guide shows how to collaborate with AI as a partner, not a pilot.

      1.1 Use an AI-Integrated IDE AI works best when it lives in your editor. For seamless inline assistance, we recommend Visual Studio Code (with GitHub Copilot ) or Cursor .

      Source ↗ tina.io/pricing

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1

The most recent price range published by the vendor.

  1. Free
    4 products
    • EmDash
      Open source and self-hosted; the cost is your own hosting. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ emdashcms.com

      Open source CMS for Astro, brought to you by Cloudflare

      Source ↗ github.com/emdash-cms/emdash

      EmDash runs on Cloudflare (D1 + R2 + Workers) or any Node.js server with SQLite.

    • Pages CMS
      Pages CMS is entirely free — the hosted app, a Vercel deploy and self-hosting alike; there is no paid tier. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Is Pages CMS free? Yes, Pages CMS is 100% free, whether you want to use the online version , deploy it for free on Vercel , or self-host it.

    • Payload CMS
      The hosted service takes new projects from enterprise teams only; everyone else self-hosts. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ payloadcms.com/get-started

      Self-hosted Free Payload is open source and MIT licensed. Deploy it anywhere you can run a Node.js app — for free, forever.

      Enterprise customers can unlock dedicated support, hosting, and advanced features like SSO and visual editing. Explore Docs Explore Docs Talk to Sales Talk to Sales

      Roadmap influence Dedicated Support Enterprise Features Get a Demo Get a Demo

      Can I host my app elsewhere? Yes. Payload remains a self-hosted solution, so you can bring your app to any hosting provider you prefer. Vercel and Cloudflare both offer one-click hosting solution for Payload apps via the links above.

      Source ↗ payloadcms.com/new

      Cloud / New Project Login Not Allowed Project creation is only available for Enterprise teams. Return Home

    • Sveltia CMS
      The CMS is free; the maintainer floats an optional paid cloud version in the future but does not offer one. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/intro

      It’s open source and free for personal and commercial use.

      Source ↗ sveltiacms.app/en/docs/roadmap

      We may offer an affordable cloud version in the future since self-hosting the CMS can be a hassle. However, we will not charge for the CMS itself.

  2. $15/user/month
    1 product
    • Sanity
      The only published paid tier is per seat; the free plan and the quote-only plan sit outside this range. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sanity.io/pricing

      $15 per seat / month try for free includes: up to 50 user seats

      $0 forever get started for free includes: up to 20 user seats

      custom pricing contact sales request a demo

  3. $15–$100/site/month
    1 product
    • ZeroCMS
      By design
  4. $49–$300/month
    1 product
    • CloudCannon
      Both plans also show a higher price when billed monthly; a cheaper partner-only plan sits below this range. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ cloudcannon.com/pricing

      Standard Recommended $55 / month (USD) $49 / month (USD) Paid annually For small teams who want to use our core features.

      Team $350 / month (USD) $300 / month (USD) Paid annually For teams with more advanced editing workflows.

      Enterprise Custom Custom For large organizations with advanced compliance and security requirements. Book a call with us

      Are you an Agency or Freelancer? Join the CloudCannon Partner Program and get access to the Lite plan for your clients. Lite Partners Only $10 / month (USD) A pay-as-you go plan for smaller clients.

  5. Free, or $10/month
    1 product
    • Keystatic
      The published figure is the Keystatic Cloud Pro base per team; extra editors are billed per seat above three. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      Keystatic Cloud Pro starts at $10/month. Adding beyond 3 users to a team costs $5/month per user.

      Creating a Keystatic Cloud account is free. You can create as many teams and projects as needed.

  6. Free, or $29–$299/site/month
    1 product
    • TinaCMS
      The page opens on annual-billed figures, which are lower than the monthly ones recorded here. Vendor documentation Checked
      15 quotes from 1 source

      Source ↗ tina.io/pricing

      All prices are per-project and in USD

      Plan Comparison Free $0 Forever Team $29/month Team Plus $49/month Business

      $299/month Enterprise Custom Annual Billing $290/year $490/year $2,990/year Custom

      Additional Users $9/user $15/user $18/user Custom User Limit 2 10 20 Unlimited Unlimited

      Monthly Annually All prices are per-project and in USD

      Team For growing teams $24 / month $290 billed annually (save $58)

      Business For premium support $249 / month $2,990 billed annually (save $598)

      Free $0 Forever Includes 2 users, 2 roles, and community support. Start Free

      Start Free Monthly Annually All prices are per-project and in USD

      Team For growing teams $24 / month $290 billed annually (save $58) Start Team Plan Includes: Includes: 3 Users 2 Roles Team Support Up to 10 Users $90/additional seat per year

      Team Plus For bigger teams $41 / month $490 billed annually (save $98) Start Team Plan Includes: Includes: 5 Users 2 Roles Team Support Up to 20 Users $150/additional seat per year Editorial Workflow AI Features (Coming Soon)

      Business For premium support $249 / month $2,990 billed annually (save $598) Start Business Plan Includes: Includes: 20 Users 3 Roles (Beta) Business Support No User Limit $180/additional seat per year Editorial Workflow AI Features (Coming Soon) API (Beta)

      Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow AI Features (Coming Soon) API (Beta) GitHub Enterprise Support SSO

      Annual Billing $290/year $490/year $2,990/year Custom Included Users 2 3 5 20 Custom Additional Users $9/user $15/user $18/user Custom User Limit 2 10 20 Unlimited Unlimited Roles 2 2 2 3 Custom

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1 Repositories Documents Unlimited Unlimited Unlimited Unlimited Unlimited

  7. Free, or $35–$450/site/month
    1 product
    • Strapi
      The hosted plans, at the monthly prices the page shows; the self-hosted Growth plan is priced separately. Vendor documentation Checked
      14 quotes from 3 sources

      Source ↗ strapi.io/pricing-cloud

      Find the hosting plan that works for you Monthly Yearly • save up to 17% CMS Cloud Starter $35 per project / month

      Best value Pro $90 per project / month Sign up 1M API requests

      Business $450 per project / month Sign up 10M API requests 1,000 GB asset storage

      Need custom limits? Go Business+ Everything in Pro, plus… 1 extra environments included Daily backups Uptime SLA (99.9%) Contact sales

      API requests - per project Additional API requests: +$1,50 per 25k 100,000 / month

      Source ↗ docs.strapi.io/cloud/getting-started/usage-billing

      Strapi Cloud offers 3 plans: Starter, Pro, and Business (see Pricing page ).

      Billing is based on the usage of your Strapi Cloud projects. Project plans and addons are either billed monthly or yearly, depending on your billing cycle, while overages are billed monthly.

      Overages are charged monthly, according to the following rates: Feature Rate API Requests $1.50 / 25k requests Asset Bandwidth $30.00 / 100GB Asset Storage $0.60 / GB per month

      Source ↗ strapi.io/pricing-cms

      Growth $45 per month Buy now Everything in Community, plus... Includes 3 seats (+$15/month/seat)

      Try Growth features for 30 days on your self-hosted project for free. No credit card required.

      Community Free Forever Get Started Plan features Open-Source under MIT License Role Based Access Control REST & GraphQL API Powerful Content Management Infinite Customization Capabilities Unlimited Usage (Entries, API calls, etc.) Community Support

      Additional CMS Seats Unlimited Unlimited $15 / seat $15 / seat Add-on Add-on

      Enterprise Let's talk Contact sales Everything in Growth, plus... SSO Review Workflows Audit Logs

      Strapi AI ✨ Additional credits: +$1.50 per 100 credits - 1,000 credits / month 1,000 credits / month

  8. Free, or $99–$349/month
    1 product
    • Storyblok
      The monthly-billed rate for the two published paid tiers; the free Starter plan and the quote-only Premium and Elite plans sit outside this range. Vendor documentation Checked
      6 quotes from 1 source

      Source ↗ storyblok.com/pricing

      Monthly price if billed monthly: $99.00 /mo Monthly price if billed annually: $90.75 /mo Includes 5 team member seats, add more

      Monthly price if billed monthly: $349.00 /mo Monthly price if billed annually: $319.91 /mo Includes 15 team member seats

      Starter Limited plan for testing and personal projects. Monthly price if billed monthly: Free

      Premium Custom Contact Sales Elite Custom Contact Sales

      Spaces (Projects) 1 1 1 Custom Custom

      Up to 500k AI credits $20.00 /month per 200k AI credits

  9. Free, or €19/month
    1 product
    • Decap CMS
      Pro, a single-site plan, is a fixed price billed monthly in EUR. Vendor documentation Checked
      8 quotes from 2 sources

      Source ↗ decapcms.org/turbo

      Pro For single-site teams €19 / month

      All prices are in EUR, billed monthly, tax included.

      Decap Turbo is a paid layer on top of it

      Try the real product before paying anything

      Most popular Pro For single-site teams

      €6/additional seat €10/additional site

      Enterprise Agencies and orgs running many sites

      Source ↗ decapcms.org

      It is free today and will remain free for everyone, always.

What the price is charged per.

  1. Free
    Free
    No paid plan.
    3 products
    • EmDash
      Open source and self-hosted; the cost is your own hosting. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ emdashcms.com

      Open source CMS for Astro, brought to you by Cloudflare

      Source ↗ github.com/emdash-cms/emdash

      EmDash runs on Cloudflare (D1 + R2 + Workers) or any Node.js server with SQLite.

    • Pages CMS
      Pages CMS is entirely free — the hosted app, a Vercel deploy and self-hosting alike; there is no paid tier. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      Is Pages CMS free? Yes, Pages CMS is 100% free, whether you want to use the online version , deploy it for free on Vercel , or self-host it.

    • Sveltia CMS
      The CMS is free; the maintainer floats an optional paid cloud version in the future but does not offer one. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sveltiacms.app/en/docs/intro

      It’s open source and free for personal and commercial use.

      Source ↗ sveltiacms.app/en/docs/roadmap

      We may offer an affordable cloud version in the future since self-hosting the CMS can be a hassle. However, we will not charge for the CMS itself.

  2. Free tierFeature tiersPer seatPer sitePer usageQuoted
    Free tier
    A free plan you can keep using.
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • Strapi
      The free tier is the self-hosted Community edition; Strapi Cloud's three published plans are all paid, and bill per project with metered usage on top. Vendor documentation Checked
      14 quotes from 3 sources

      Source ↗ strapi.io/pricing-cms

      Community Free Forever Get Started Plan features Open-Source under MIT License Role Based Access Control REST & GraphQL API Powerful Content Management Infinite Customization Capabilities Unlimited Usage (Entries, API calls, etc.) Community Support

      Try Growth features for 30 days on your self-hosted project for free. No credit card required.

      Growth $45 per month Buy now Everything in Community, plus... Includes 3 seats (+$15/month/seat)

      Additional CMS Seats Unlimited Unlimited $15 / seat $15 / seat Add-on Add-on

      Enterprise Let's talk Contact sales Everything in Growth, plus... SSO Review Workflows Audit Logs

      Strapi AI ✨ Additional credits: +$1.50 per 100 credits - 1,000 credits / month 1,000 credits / month

      Source ↗ strapi.io/pricing-cloud

      Find the hosting plan that works for you Monthly Yearly • save up to 17% CMS Cloud Starter $35 per project / month

      Best value Pro $90 per project / month Sign up 1M API requests

      Business $450 per project / month Sign up 10M API requests 1,000 GB asset storage

      Need custom limits? Go Business+ Everything in Pro, plus… 1 extra environments included Daily backups Uptime SLA (99.9%) Contact sales

      API requests - per project Additional API requests: +$1,50 per 25k 100,000 / month

      Source ↗ docs.strapi.io/cloud/getting-started/usage-billing

      Strapi Cloud offers 3 plans: Starter, Pro, and Business (see Pricing page ).

      Billing is based on the usage of your Strapi Cloud projects. Project plans and addons are either billed monthly or yearly, depending on your billing cycle, while overages are billed monthly.

      Overages are charged monthly, according to the following rates: Feature Rate API Requests $1.50 / 25k requests Asset Bandwidth $30.00 / 100GB Asset Storage $0.60 / GB per month

  3. Free tierFeature tiersPer seatPer siteQuoted
    Free tier
    A free plan you can keep using.
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • TinaCMS
      Every plan carries one project, and the three middle tiers publish a price per extra editor, so the bill multiplies by sites and by people at once. Vendor documentation Checked
      9 quotes from 1 source

      Source ↗ tina.io/pricing

      Free $0 Forever Includes 2 users, 2 roles, and community support. Start Free

      Start Free Monthly Annually All prices are per-project and in USD

      Team For growing teams $24 / month $290 billed annually (save $58) Start Team Plan Includes: Includes: 3 Users 2 Roles Team Support Up to 10 Users $90/additional seat per year

      Team Plus For bigger teams $41 / month $490 billed annually (save $98) Start Team Plan Includes: Includes: 5 Users 2 Roles Team Support Up to 20 Users $150/additional seat per year Editorial Workflow AI Features (Coming Soon)

      Business For premium support $249 / month $2,990 billed annually (save $598) Start Business Plan Includes: Includes: 20 Users 3 Roles (Beta) Business Support No User Limit $180/additional seat per year Editorial Workflow AI Features (Coming Soon) API (Beta)

      Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow AI Features (Coming Soon) API (Beta) GitHub Enterprise Support SSO

      Plan Comparison Free $0 Forever Team $29/month Team Plus $49/month Business

      Annual Billing $290/year $490/year $2,990/year Custom Included Users 2 3 5 20 Custom Additional Users $9/user $15/user $18/user Custom User Limit 2 10 20 Unlimited Unlimited Roles 2 2 2 3 Custom

      Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects 1 1 1 1 1 Repositories Documents Unlimited Unlimited Unlimited Unlimited Unlimited

  4. Free tierFeature tiersPer seatPer usageQuoted
    Free tier
    A free plan you can keep using.
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • Storyblok
      A free Starter plan, published paid plans that bill per seat with metered usage on top, and two quote-only enterprise plans. Vendor documentation Checked
      5 quotes from 1 source

      Source ↗ storyblok.com/pricing

      Starter Limited plan for testing and personal projects. Monthly price if billed monthly: Free

      Monthly price if billed monthly: $99.00 /mo Monthly price if billed annually: $90.75 /mo Includes 5 team member seats, add more

      Spaces (Projects) 1 1 1 Custom Custom

      Up to 500k AI credits $20.00 /month per 200k AI credits

      Premium Custom Contact Sales Elite Custom Contact Sales

  5. FreeFree tierFeature tiersPer seatPer siteQuoted
    Free
    No paid plan.
    Free tier
    A free plan you can keep using.
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • Decap CMS
      The open-source CMS is free; the paid tiers, seats, sites and the quoted Enterprise plan are all Decap Turbo. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ decapcms.org

      It is free today and will remain free for everyone, always.

      Source ↗ decapcms.org/turbo

      Decap Turbo is a paid layer on top of it

      Try the real product before paying anything

      Most popular Pro For single-site teams

      €6/additional seat €10/additional site

      Enterprise Agencies and orgs running many sites

  6. Feature tiersPer seatQuotedPer usage
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • CloudCannon
      Unlimited sites and repositories on the Lite, Standard, Team and Enterprise plans; bandwidth is metered against a per-plan allowance, with overages billed in the month they accrue. Vendor documentation Checked
      12 quotes from 2 sources

      Source ↗ cloudcannon.com/pricing

      All plan features Monthly Yearly Monthly Yearly Standard Team Enterprise $55 / month (USD) $49 / month (USD) $350 / month (USD) $300 / month (USD) Custom Custom Paid annually For small teams who want to use CloudCannon's core features. Paid annually For teams with more advanced editing workflows. For large organizations with advanced compliance and security requirements.

      Standard Recommended $55 / month (USD) $49 / month (USD) Paid annually For small teams who want to use our core features. Start 21-day trial Start 21-day trial Standard plan includes: Unlimited sites Connect as many repositories as you like, and create as many sites as you like. 3 users Users are any person you share a site or organization with; add more for $10/month per user.

      Team $350 / month (USD) $300 / month (USD) Paid annually For teams with more advanced editing workflows. Start 21-day trial Start 21-day trial Team plan includes: Unlimited sites Connect as many repositories as you like, and create as many sites as you like. 15 users Users are any person you share a site or organization with; add more for $10/month per user.

      Enterprise Custom Custom For large organizations with advanced compliance and security requirements. Book a call with us Book a call with us Enterprise plan includes: Unlimited sites

      Lite Partners Only $10 / month (USD) A pay-as-you go plan for smaller clients. Unlimited sites and basic features included. Learn about the Partner Program

      User or site share $10 / person Add additional users on your Lite, Standard or Team plan, including client sharing.

      Bandwidth $15 / 100 GB Extend your bandwidth as needed with a 100GB bandwidth package. Lite includes 20GB bandwidth Standard includes 110GB bandwidth Team includes 700GB bandwidth

      Overages are only charged when you exceed the usage limits on your plan. Overages will be charged in the same month they're accrued for.

      User roles and permissions Clearly define access and permissions for your users. Default permissions Custom permissions Custom permissions • Custom permissions Define your user groups with custom permissions and exceptions. 10 Custom Groups Unlimited Custom Groups

      Enterprise plan includes: Unlimited sites Connect as many repositories as you like, and create as many sites as you like.

      Sites We don't charge per site or repository. Unlimited Unlimited Unlimited

      Source ↗ cloudcannon.com/partner-program

      Lite plan includes: Unlimited sites Connect as many repositories as you like, and create as many sites as you like.

  7. Per siteFeature tiersQuoted
    Feature tiers
    Price steps that unlock features.
    Quoted
    A tier with no published price.
    1 product
    • ZeroCMS
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ zerocms.io/pricing

      Solo For individuals managing content on their own. $15 /site/month

      Everything in Team, plus Require approvals before publishing

      Multiple client sites? Volume pricing and one login to manage them all. Talk to us

      Feature Solo Team Business Content & editing Team members 1 Up to 10 Up to 20

  8. Free tierPer seat
    Free tier
    A free plan you can keep using.
    1 product
    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      Creating a Keystatic Cloud account is free. You can create as many teams and projects as needed.

      Keystatic Cloud Pro starts at $10/month. Adding beyond 3 users to a team costs $5/month per user.

  9. FreeQuoted
    Free
    No paid plan.
    Quoted
    A tier with no published price.
    1 product
    • Payload CMS
      The hosted service takes new projects from enterprise teams only; everyone else self-hosts. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ payloadcms.com/get-started

      Self-hosted Free Payload is open source and MIT licensed. Deploy it anywhere you can run a Node.js app — for free, forever.

      Enterprise customers can unlock dedicated support, hosting, and advanced features like SSO and visual editing. Explore Docs Explore Docs Talk to Sales Talk to Sales

      Roadmap influence Dedicated Support Enterprise Features Get a Demo Get a Demo

      Can I host my app elsewhere? Yes. Payload remains a self-hosted solution, so you can bring your app to any hosting provider you prefer. Vercel and Cloudflare both offer one-click hosting solution for Payload apps via the links above.

      Source ↗ payloadcms.com/new

      Cloud / New Project Login Not Allowed Project creation is only available for Enterprise teams. Return Home

  10. Not checked

    We did not settle this. It is not a claim that the product lacks it.

    1 product
    • Sanity
      Not checked Undated

What costs extra on top of the plan price.

  1. Nothing
    1 product
    • Pages CMS
      Nothing costs extra: the product is free and email collaborators are not paid GitHub seats. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org

      Yes, Pages CMS is 100% free, whether you want to use the online version , deploy it for free on Vercel , or self-host it.

      Invite users via email, no other account needed.

  2. AI credits beyond the monthly quota
    1 product
    • ZeroCMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ zerocms.io/pricing

      AI credits power all AI features in Zero — the built-in AI agent, skills that run as audits, and pre-publish checks. Every plan includes a monthly credit quota that resets each billing cycle. If you run out of your quota, you can buy new credit packs (valid for a year) or enable automatic top-ups.

      Need more AI credits? Buy credit packs anytime. They're valid for a year, and the price per credit drops as the pack grows.

      Credits are metered on actual AI usage and the model used — some models are more expensive, or consume more tokens, than others.

  3. Editor seats beyond the Cloud free tier's three users
    1 product
    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      The free plan allows for up to 3 users per team.

      Adding beyond 3 users to a team costs $5/month per user.

  4. Editor seats beyond the plan's allowance
    1 product
    • TinaCMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ tina.io/pricing

      Up to 10 Users $90/additional seat per year

      Included Users 2 3 5 20 Custom Additional Users $9/user $15/user $18/user Custom

      Additional Users $9/user $15/user $18/user Custom User Limit 2 10 20 Unlimited Unlimited

  5. Third-party media storage or DAM, if configured
    1 product
    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/media

      Sveltia CMS currently supports the following external media storage providers: Amazon S3 and S3-compatible providers: Backblaze B2 Cloudflare R2 DigitalOcean Spaces Scaleway Object Storage Supabase Storage Azure Blob Storage Cloudinary Uploadcare

  6. Your own hosting, database and media storageA paid Cloudflare plan for sandboxed plugins
    1 product
    • EmDash
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ github.com/emdash-cms/emdash

      EmDash depends on Dynamic Workers to run secure sandboxed plugins. Dynamic Workers are currently only available on paid accounts.

      EmDash runs on Cloudflare (D1 + R2 + Workers) or any Node.js server with SQLite.

  7. Custom/granular rolesPriority support
    1 product
    • Decap CMS
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ decapcms.org/turbo

      Custom/granular roles — €19/mo add-on Included

      Priority support add-on — €99/mo per org Included

  8. Hosting for the Next.js appA database you provideFile storage and a CDNAn email provider for auth mail
    1 product
    • Payload CMS
      Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ payloadcms.com/docs/production/deployment

      But it's important to remember that most Payload projects will also need a database, file storage, an email provider, and a CDN.

      Payload can be deployed anywhere that Next.js can run - including Vercel, Netlify, SST, DigitalOcean, AWS, and more. Because it's open source, you can self-host it.

      Payload can be used with any Postgres database or MongoDB-compatible database including AWS DocumentDB or Azure Cosmos DB. Make sure your production environment has access to the database that Payload uses.

      If you are using Payload to manage file uploads, you need to consider where your uploaded files will be permanently stored.

      Source ↗ payloadcms.com/docs/email/overview

      This will allow Payload to send auth-related emails for things like password resets, new user verification, and any other email sending needs you may have.

  9. Additional editor seatsBandwidth packages beyond the plan allowanceExtra custom domainsOne-off website migration services
    1 product
    • CloudCannon
      Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ cloudcannon.com/pricing

      Extend your plan Users Add users and shares as you need them. User or site share $10 / person Add additional users on your Lite, Standard or Team plan, including client sharing.

      Bandwidth $15 / 100 GB Extend your bandwidth as needed with a 100GB bandwidth package. Lite includes 20GB bandwidth Standard includes 110GB bandwidth Team includes 700GB bandwidth

      Custom domains $2 / month Add an additional domain or subdomain to your plan. Lite includes 1 custom domain Standard includes 5 custom domains

      Website migration Starting at $3000 per project (USD) Learn more about a migration Need help migrating your website?

  10. Editor seats beyond the plan's allowanceSingle sign-on, as a paid add-onMetered API requests, bandwidth and asset storageExtra environments, charged per environment per monthStrapi AI credits beyond the plan's monthly allowanceOffline licensing, as a paid add-onPremium support and advisorySelf-hosting requires your own server (CPU, RAM, disk)
    1 product
    • Strapi
      Vendor documentation Checked
      11 quotes from 3 sources

      Source ↗ strapi.io/pricing-cms

      Growth $45 per month Buy now Everything in Community, plus... Includes 3 seats (+$15/month/seat)

      Additional CMS Seats Unlimited Unlimited $15 / seat $15 / seat Add-on Add-on

      Single Sign-On Add-on $150 /month (+$50/month/seat) Authenticate with Okta, Active Directory, or multiple other SAML 2.0 or OAuth2 providers.

      Premium Support & Concierge Advisory ADD-ON Offline licensing ADD-ON

      Strapi AI ✨ Additional credits: +$1.50 per 100 credits - 1,000 credits / month 1,000 credits / month

      Source ↗ strapi.io/pricing-cloud

      Additional environments - - +$60 per environment / month, or $600 billed yearly

      API requests - per project Additional API requests: +$1,50 per 25k 100,000 / month

      Asset storage (in GB) - per environment Additional asset storage: +$0,60 per GB

      Asset bandwidth (in GB) - per project Additional bandwidth: +$30 per 100 GB

      Source ↗ docs.strapi.io/cms/deployment

      Your Strapi applications can be deployed on traditional hosting servers or your preferred hosting provider.

      Hardware specifications for your server (CPU, RAM, storage): Hardware Recommended Minimum CPU 2+ cores 1 core Memory 4GB+ 2GB Disk 32GB+ 8GB

  11. Not checked

    We did not settle this. It is not a claim that the product lacks it.

    2 products
    • Sanity
      Not checked Undated
    • Storyblok
      Not checked Undated

Are plans offered for particular kinds of customers?

  1. AgenciesEnterpriseNon-profitsOpen source
    1 product
    • Strapi
      The discounts for open-source and non-profit projects are applied on application rather than published as a plan. Vendor documentation Checked
      7 quotes from 4 sources

      Source ↗ strapi.io/pricing-cms

      Enterprise Let's talk Contact sales Everything in Growth, plus... SSO Review Workflows Audit Logs

      Source ↗ strapi.io/pricing-cloud

      Strapi for Non-Profits and Open Source Strapi is offering significant Strapi Cloud discounts to qualifying Open Source and Non-Profit organizations.

      Strapi for Partners Apply to become an approved agency, technology partner, or professional services partner.

      Source ↗ strapi.io/discounts

      Open Source projects and Non-Profits that meet the above criteria can fill out this form to express their interest in the special discount

      After verification, eligible organizations will receive a unique discount code to be applied during the purchase process.

      Source ↗ strapi.io/partner-program

      Agencies & System Integrators You design, build, and implement Strapi-powered experiences for clients.

      Grow your revenue Earn discounts up to 10% on Strapi subscriptions for your clients, unlock co-marketing support, and access partner demo licenses

  2. AgenciesEnterpriseNon-profits
    1 product
    • CloudCannon
      Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ cloudcannon.com/partner-program

      Partner Users $10/month per Partner user. That’s it. Get universal access to all your clients’ accounts

      the option for clients to add their own payment card and pay directly, and custom branding on each client’s CloudCannon dashboard.

      Source ↗ cloudcannon.com/pricing

      Enterprise Custom Custom For large organizations with advanced compliance and security requirements. Book a call with us

      Source ↗ cloudcannon.com/non-profit

      CloudCannon supports charities that are non-government, non-commercial, non-academic, non-political in nature, and have no religious affiliation.

      To apply for a non-profit discount please follow the steps below: Create a CloudCannon account Contact us and include the following:

  3. EnterpriseEducationNon-profits
    1 product
    • Storyblok
      Premium and Elite are quote-only; nonprofits and educational institutions get a discount. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/pricing

      Premium & Elite Plans Custom plans for organizations with multiple editorial teams

      Discount for nonprofits & educational institutions We offer discounts for educational institutions and non-profit organizations

  4. StartupsNon-profitsEnterprise
    1 product
    • Sanity
      Startup and non-profit programmes, and a quote-only Enterprise plan. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sanity.io/pricing

      the sanity startup program offers 1-year free access to sanitys growth plan for early-stage startups

      do you have a non-profit plan yes, we offer a non-profit plan for eligible organizations

      enterprise for organizations with complex security, support, and performance needs custom pricing

  5. AgenciesEnterprise
    1 product
    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/turbo

      Enterprise Agencies and orgs running many sites

  6. Enterprise
    2 products
    • Payload CMS
      Vendor documentation Checked
      7 quotes from 4 sources

      Source ↗ payloadcms.com/get-started

      Self-hosted Free Payload is open source and MIT licensed. Deploy it anywhere you can run a Node.js app — for free, forever.

      Enterprise Deploy anywhere — self-hosted or with Payload. Includes dedicated support plus features like SSO, visual editing, and more.

      Self-hosted or with Payload Unlimited custom domains White-labeled email service Roadmap influence

      Source ↗ payloadcms.com/enterprise

      Dedicated engineering support Demo of enterprise features, including visual editing and AI Custom solutions to extend Payload Influence over the Payload roadmap

      Source ↗ payloadcms.com/partners

      Our partner program is limited to the 30 most qualified agencies that successfully build great products with Payload.

      Source ↗ payloadcms.com/become-a-partner

      Shared roadmap Feature requests from your agency related to Payload core will be placed higher in our roadmap.

      Referrals, not just logos Our select partners are based on a deliberate criteria, and include a logo placement on our site and within enterprise proposals.

    • TinaCMS
      Vendor documentation Checked
      7 quotes from 4 sources

      Source ↗ tina.io/pricing

      Plan Comparison Free $0 Forever Team $29/month Team Plus $49/month Business

      $299/month Enterprise Custom Annual Billing $290/year $490/year $2,990/year Custom Included Users 2 3 5 20 Custom

      Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow

      Source ↗ tina.io/enterprise

      Enterprise Ready with TinaCMS Advanced security, global performance, compliance, and dedicated support. Tina Enterprise gives large teams the control and reliability needed to scale content with confidence

      Source ↗ tina.io/partners

      Build with a TinaCMS partner. Find a vetted agency or freelance developer or become one. Find a partner Become a partner

      Why become a partner? Co-marketing opportunities A Certified Partner badge Free TinaCloud licence for your own website Technical assistance and priority feature requests

      Source ↗ tina.io/agencies

      Let's talk! Interested in using TinaCMS for your agency? We'd love to chat! Contact Us

  7. Agencies
    1 product
    • ZeroCMS
      Vendor documentation Checked
      10 quotes from 3 sources

      Source ↗ zerocms.io/pricing

      Founder, Luceli For agencies Agencies

      studios Multiple client sites? Volume pricing and one login to manage them all.

      Feature Solo Team Business

      Solo For individuals managing content on their own.

      Team Most popular For teams that collaborate on content together.

      Business For larger teams that need priority support.

      Early partners Limited spots Publish regularly on Astro? Three months free for frequent feedback.

      Source ↗ zerocms.io/features/multi-site

      an agency, how should we add client sites?

      often easiest to create a separate organization in ZeroCMS for each client and add their site(s) there.

      Source ↗ zerocms.io/early-partners

      Who is the partner program for? Teams and businesses who publish content regularly on an Astro site.

  8. None
    4 products
    • EmDash
      No agency, enterprise or other named plan — there is no commercial offering. Vendor documentation Checked
    • Keystatic
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/docs/cloud

      Free vs Pro plans Creating a Keystatic Cloud account is free. You can create as many teams and projects as needed. The free plan allows for up to 3 users per team. If you need more than 3 users on a given team, you'll need to upgrade that specific team to Pro.

      A Pro plan only affects the one team it's applied to. Pro features Besides allowing you to add more than 3 users to a team, Keystatic Cloud Pro also offers the following features:

    • Pages CMS
      There are no paid plans at all, so none is aimed at agencies, enterprise or any other audience. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org

      Yes, Pages CMS is 100% free, whether you want to use

      It's MIT licensed through and through, feel free to extend it as you see fit.

    • Sveltia CMS
      There are no paid plans of any kind, so none is aimed at agencies, enterprise or any other audience. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/intro

      It’s open source and free for personal and commercial use.

The licence on the code you run.

  1. MIT

    Use it for anything, including commercially.

    7 products
    • Decap CMS
      By design
    • EmDash
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Payload CMS
      By design
    • Sanity
      By design
    • Sveltia CMS
      By design
  2. Proprietary

    No source to read or run.

    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  3. Apache 2.0

    Permissive, with an explicit patent grant.

    1 product
    • TinaCMS
      By design
  4. Open core

    An open core with proprietary features gated inside it.

    1 product
    • Strapi
      By design

Whether the vendor also offers it as a hosted service.

  1. Hosted product

    The vendor runs a hosted product alongside whatever code is public.

    10 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Decap CMS
      By design
    • Keystatic
      By design
    • Pages CMS
      By design
    • Payload CMS
      By design
    • Sanity
      By design
    • Storyblok
      By design
    • Strapi
      By design
    • TinaCMS
      By design
  2. No hosted product

    There is no service to sign up for — the code is the whole thing.

    2 products
    • EmDash
      By design
    • Sveltia CMS
      By design

How you get your content out of the product.

  1. Already yours

    The content is already files in your repository.

    7 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/…/introduction-to-syncing

      All changes made in CloudCannon are automatically committed to your Git Repository

      Source ↗ cloudcannon.com/…/what-is-the-cloudcannon-configuration-file

      This key determines the Source Folder for your website's files relative to the root of your Git repository.

      source : / paths : uploads : public/uploads static : public collections_config : pages : path : pages

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/intro

      Content is stored in your Git repository alongside your code for easier versioning

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/installation-astro

      You will find your new post inside the src/content/posts directory

    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs

      It edits files in your repository directly.

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/data-output

      Content in Sveltia CMS is stored in static files

    • TinaCMS
      The content files leave with the repository. Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ tina.io/docs/integration/frameworks

      Tina's default "basic editor" works in a wide variety of frameworks. It reads/writes file-based content (Markdown, MDX, JSON, etc).

      Source ↗ tina.io/docs/faq

      Any changes that are saved by your editors will be committed to the configured branch in your GitHub repository.

      Source ↗ tina.io/docs/frameworks/astro

      save, and watch changes persist to your local content files

  2. Structured export

    A dump of the content with its model.

    5 products
    • EmDash
      A backup downloads all content and the model as one JSON file. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.emdashcms.com/guides/backups

      the Download backup button generates a fresh backup and downloads it as a JSON file.

      Collection and field definitions (your content model)

    • Payload CMS
      You hold the database outright; the official plugin exports documents as CSV or JSON. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ payloadcms.com/docs/plugins/import-export

      There are four possible ways that the plugin allows for exporting documents, the first two are available in the admin UI from the list view of a collection: Direct download - Using a POST to /api/exports/download and streams the response as a file download File storage - Goes to the exports collection as an uploads enabled collection

      JSON format preserves the exact structure of your data, including: Nested objects and arrays Rich text (Lexical) structures with numeric properties Relationship references All field types in their native format

      format string Either csv or json to determine the shape of data exported

      Source ↗ payloadcms.com/docs/getting-started/what-is-payload

      Direct DB access and ownership with migrations, transactions, and proper indexing across MongoDB and Postgres.

      Source ↗ payloadcms.com/docs/plugins/overview

      Payload maintains a set of Official Plugins that solve for some of the common use cases. These plugins are maintained by the Payload team and its contributors and are guaranteed to be stable and up-to-date. Form Builder MCP Multi-Tenant Nested Docs Redirects Search Sentry SEO Stripe Import/Export Ecommerce

    • Sanity
      A dataset exports as a gzipped tarball. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/cli-reference/cli-datasets

      Export a dataset to a local gzipped tarball. Assets returning 401, 403, or 404 are excluded from the export.

    • Storyblok
      Stories and components back up to your own S3. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/docs/concepts/backups

      Safeguard your Storyblok data and components by configuring automatic backups to your AWS S3 bucket.

    • Strapi
      One command exports the entries, the uploads and the schemas together. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/data-management/export

      By default, the strapi export command exports data as an encrypted and compressed tar.gz.enc file which includes: the project configuration, entities: all of your content, links: relations between your entities, assets: files stored in the uploads folder, schemas,

      The exported .tar archive contains a flat structure of numbered JSON lines files arranged in folders for each exported resource:

How you get your images and files out of the product.

  1. Already yours

    Committed beside the content.

    7 products
    • ZeroCMS
      Tested Checked
    • CloudCannon
      Vendor documentation Checked
      3 quotes from 3 sources

      Source ↗ cloudcannon.com/…/adjusting-the-uploads-path

      Setting this key to true will make CloudCannon use relative paths for uploaded files, which are relative to the file being edited rather than the repository root.

      Source ↗ cloudcannon.com/…/what-is-the-cloudcannon-configuration-file

      source : / paths : uploads : public/uploads static : public collections_config : pages : path : pages

      Source ↗ cloudcannon.com/…/introduction-to-assets-and-dams

      Assets are typically stored in a Digital Asset Management (DAM) or dedicated folder within your Git Repository

    • Decap CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/docs/configure-decap-cms

      Media files will be stored in the repo under images/uploads

    • Keystatic
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/docs/fields/image

      Images will be stored on your local file system or GitHub repository.

    • Pages CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/docs/configuration/media

      input * Repository path where files are stored (e.g. src/media).

    • Sveltia CMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sveltiacms.app/en/docs/media

      the built-in internal media storage that saves files directly in your Git repository

    • TinaCMS
      Assets live in the repo, but their references can carry Tina's own CDN host. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ tina.io/docs/reference/media/repo-based

      TinaCMS has a built-in Repository (git) based media storage option . Alternatively, you can connect your CMS to an external media storage provider.

      Repo-based media keeps your assets alongside your content, meaning you can track changes and roll back versions for both code and media

      Source ↗ tina.io/docs/reference/media/external/authentication

      otherwise your assets will still be prefixed with https://assets.tina.io as if you were still using repo based media

  2. Your own bucket

    Stored in storage you own, so the URLs keep working.

    2 products
    • EmDash
      The media binaries stay in the bucket you hold and the backup carries only metadata. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ docs.emdashcms.com/guides/backups

      Media binaries — the actual files live in your storage bucket (R2, S3, or local); a backup carries their metadata so references stay intact

    • Payload CMS
      Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ payloadcms.com/docs/upload/storage-adapters

      Service Package Vercel Blob @payloadcms/storage-vercel-blob AWS S3 @payloadcms/storage-s3 Azure @payloadcms/storage-azure Google Cloud Storage @payloadcms/storage-gcs Uploadthing @payloadcms/storage-uploadthing R2 @payloadcms/storage-r2

      To serve files, enable the R2.dev subdomain or connect a custom domain to your bucket in the Cloudflare dashboard, then pass that public URL to generateFileURL .

      disablePayloadAccessControl: true — bypasses Payload's file proxy so URLs point directly to your public R2 domain

  3. Bulk export

    Downloadable as a set, and the URLs break when you leave.

    3 products
    • Sanity
      The dataset export includes the asset binaries as a set. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/docs/cli-reference/cli-datasets

      Export a dataset to a local gzipped tarball. Assets returning 401, 403, or 404 are excluded from the export.

    • Storyblok
      Built-in backups store only asset references; the files themselves come out as a set via a Management API script or the Storyblok Assets Backup tool. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/docs/concepts/backups

      Backups in Storyblok do not include story versions, presets, space settings, or actual assets. Only asset references are stored.

      To back up assets, consider creating a script with the Management API or refer to the Storyblok Assets Backup tool for guidance.

    • Strapi
      Assets kept on the instance leave broken URLs behind. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ docs.strapi.io/cms/features/data-management/export

      By default, the strapi export command exports data as an encrypted and compressed tar.gz.enc file which includes: the project configuration, entities: all of your content, links: relations between your entities, assets: files stored in the uploads folder, schemas,

      Media such as images consist of the file (asset) and the entity in the database. If you use the --exclude flag to remove assets, the database records are still included, and could render as broken links.

The company behind the product.

  1. A community project
    1 product
    • Sveltia CMS
      By design
  2. CloudCannon Limited
    1 product
    • CloudCannon
      By design
  3. Cloudflare, Inc.
    1 product
    • EmDash
      By design
  4. Neatbit Oy
    1 product
    • ZeroCMS
      By design
  5. PM, poslovni mediji d.o.o.
    1 product
    • Decap CMS
      By design
  6. Payload CMS, Inc.
    1 product
    • Payload CMS
      By design
  7. Ronan Berder
    1 product
    • Pages CMS
      By design
  8. SSW
    1 product
    • TinaCMS
      By design
  9. Sanity
    1 product
    • Sanity
      By design
  10. Storyblok GmbH
    1 product
    • Storyblok
      By design
  11. Strapi, Inc.
    1 product
    • Strapi
      By design
  12. Thinkmill Labs Pty Ltd
    1 product
    • Keystatic
      By design

Significant events in the product's history such as changes of ownership or renames.

  1. None
    5 products
    • ZeroCMS
      Vendor documentation Checked
      6 quotes from 3 sources

      Source ↗ zerocms.io

      Now in early access Add a CMS to your Astro site without changing a thing Zero is a Git-based, AI-native CMS you can connect to an existing Astro site in less than 10 minutes.

      2026 ZeroCMS. All rights reserved. Proudly built in Finland

      Source ↗ zerocms.io/changelog

      Changelog Stay up to date with the latest features, improvements, and fixes. July 14, 2026 New AI models added

      December 14, 2025 Connect external AI agents to Zero You can now connect your own AI agents and tools like Claude, ChatGPT, Cursor, Claude Code etc. to ZeroCMS through its remote MCP server.

      Source ↗ zerocms.io/privacy

      PRIVACY POLICY This Privacy Notice for Neatbit Oy

      Neatbit Oy 2753488-9 Helsinki, Finland

    • CloudCannon
      Founded in 2013 in New Zealand by Mike Neumegen and George Phillips; the CMS was built as an original product. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/company

      History CloudCannon was founded in 2013, with the goal of providing a better way for non-technical teams to edit static sites without involving a developer. Out of this need, the CloudCannon CMS was born.

      Mike worked for a number of small New Zealand start-ups before cofounding CloudCannon with George. He is based in San Francisco.

      Source ↗ cloudcannon.com/ai-info

      Company name: CloudCannon Founded: 2013 Founders: Mike Neumegen and George Phillips Origin: New Zealand. The team is now distributed across New Zealand, Europe, and the United States.

    • EmDash
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ github.com/emdash-cms/emdash

      EmDash is a full-stack TypeScript CMS based on Astro; the spiritual successor to WordPress

      EmDash is what WordPress would look like if you started from scratch with today's tools.

      Source ↗ emdashcms.com

      The spiritual successor to WordPress: an open source, agent-ready, full-stack CMS for Astro

      EmDash is an open source CMS built on Astro from Cloudflare.

    • Keystatic
      Vendor documentation Checked
    • Pages CMS
      Vendor documentation Checked
  2. 5 events
    1 product
    • TinaCMS
      1. TinaCMS was launched by Forestry.io as an open-source site editing toolkit for React sites, on Gatsby and Next.js. Source ↗
      2. A licence based on Fair Source v0.9 shipped in the repository, limiting use to five users, two roles and 500 documents per website. Source ↗
      3. The carve-out was removed from the root LICENSE. Source ↗
      4. The move to full open source under Apache-2.0 was announced. Source ↗
      5. TinaCMS was acquired by SSW, an Australian software development company and long-time customer, from a team of four developers. Source ↗
      Vendor documentation Checked
      13 quotes from 9 sources

      Source ↗ tina.io/blog/announcing-tinacms

      By Scott Gallant October 16, 2019 Today, we’re excited to announce TinaCMS : an open-source site editing toolkit for React-based sites (Gatsby and Next.js).

      Source ↗ tina.io/about

      Initially launched as an open-source project by Forestry.io, TinaCMS was developed to create a more flexible, inline-editing CMS experience that was also Git-backed.

      Source ↗ api.github.com/repos/tinacms/tinacms/commits/efd56e76

      "commit":{"author":{"name":"Kelly Davis","email":"kldavis4@users.noreply.github.com","date":"2023-02-07T15:09:10Z"}

      Source ↗ raw.githubusercontent.com/…/LICENSE

      All software that resides under the "packages/@tinacms/datalayer/" and the "packages/@tinacms/graphql/" directories (the "Tina Data Layer"), is licensed under the license defined in "packages/@tinacms/datalayer/LICENSE".

      Source ↗ raw.githubusercontent.com/…/LICENSE

      This license is based on the Fair Source License, version 0.9, with explanatory changes to the Use Limitation.

      Use Limitation: 5 users, 2 roles, and 500 documents per website

      Source ↗ api.github.com/repos/tinacms/tinacms/commits/35177e82

      "commit":{"author":{"name":"Scott Gallant","email":"scottgallant@users.noreply.github.com","date":"2023-09-07T17:20:40Z"}

      Source ↗ github.com/tinacms/tinacms/commit/35177e82

      @@ -1,12 +1,4 @@ 1 - Copyright (c) 2023-present Forestry.io Holdings Inc. 2 - 3 - Portions of the TinaCMS software are licensed as follows:

      5 - * All software that resides under the "packages/@tinacms/datalayer/" and the "packages/@tinacms/graphql/" directories (the "Tina Data Layer"), is licensed under the license defined in "packages/@tinacms/datalayer/LICENSE".

      Source ↗ tina.io/blog/Tinacms-is-now-fully-open-source

      By James O'Halloran November 20, 2023 TL;DR TinaCMS is now fully open-source and easier to self-host.

      We're excited to announce that TinaCMS's Self-hosted Backend is now open-source, under the Apache 2.0 license!

      Source ↗ tina.io/blog/Tina-Joins-SSW

      By Scott Gallant May 14, 2024 I’m excited to share that Tina has been acquired by SSW , an Australian software development company and long-time Tina customer.

      Before the acquisition we were operating on a tight budget and a skeleton crew of just four developers.

  3. 3 events
    1 product
    • Strapi
      1. In July 2020 — no day is stated — the Enterprise Edition put paid features in an ee/ directory under a separate non-MIT licence, making the project open core. Source ↗
      2. Strapi 5 re-architected the content layer around a new document API. Source ↗
      3. Strapi Cloud, the hosted service, withdrew its free plan for new signups, and gave the remaining free projects until that September to upgrade or go. Source ↗
      Vendor documentation Checked
      15 quotes from 8 sources

      Source ↗ strapi.io/…/announcing-changes-to-the-strapi-enterprise-plans

      In July 2020, we introduced Strapi Enterprise Edition , an extension of the Strapi open source project (Community Edition, under MIT License)

      an extension of the Strapi open source project (Community Edition, under MIT License) to bring more value to customers running Strapi in production while making Strapi, Inc financially sustainable through an open core business model.

      Strapi Cloud is a fully managed, composable, and collaborative platform to boost your team velocity

      Source ↗ raw.githubusercontent.com/strapi/strapi/main/LICENSE

      If you are accessing or using any component of the software that resides under an "ee/" directory, then you are deemed to be using our “Enterprise Edition” of the software and you understand and agree that the software is not licensed under the "MIT Expat" license as set forth below

      If (a) you are not accessing or using the software that resides under an “ee/” directory and therefore you are only accessing or using our “Community Edition” of the Software and (b) you have no registered account on our cloud offering, then we are providing you the software under the "MIT Expat" license as set forth below.

      Source ↗ github.com/strapi/strapi/commits/v5.0.0

      Commits on Sep 18, 2024 v5.0.0 alexandrebodin committed ce84fad

      Source ↗ github.com/strapi/strapi/releases/tag/v5.0.0

      V5: add Document ID by @Marc-Roig in #18303

      feat: Document Service by @Marc-Roig in #18558

      Source ↗ docs.strapi.io/cms/api/document-service

      A document in Strapi 5 is an API-only concept which represents all the variations of content (for different locales, for the draft and published versions) for a given entry found in the Content Manager.

      This new identifier is used internally in Strapi 5 to manage relationships, publishing, localization, and version history, as all possible variations of a content entry are now grouped under a single

      Source ↗ strapi.io/…/developer-experience-improvements-strapi-5

      This API conceptually shifts how content is handled and structured at the API level, giving developers more flexibility and control over content variations without adding complexity for end users in the admin panel.

      Source ↗ strapi.io/blog/bye-2024-hello-2025-a-year-in-review

      September 2024 Strapi 5 General Availability — The big moment! Strapi 5 went live with groundbreaking improvements for developers and content teams

      Source ↗ strapi.io/…/we-re-removing-the-free-plan-from-strapi-cloud

      July 1st, 2026 : Free plan removed from new signups September 1, 2026 : All existing free projects will be deleted

      When we launched the Free plan last year, the intention was simple: lower the barrier to entry and let anyone try Strapi Cloud without any upfront commitment.

      If you currently have a free project, you will have until September 1, 2026 to either upgrade to a paid plan or delete your project.

  4. 3 events
    1 product
    • Payload CMS
      1. Relicensed from a paid proprietary licence to MIT, and made free. Source ↗
      2. Payload 3.0 re-architected the product from an Express and React single-page app onto the Next.js App Router. Source ↗
      3. Payload joined Figma, which committed to keeping the open-source core. Source ↗
      Vendor documentation Checked
      8 quotes from 4 sources

      Source ↗ payloadcms.com/posts/blog/open-source

      Blog / May 24, 2022 Payload is now completely free and open source

      Starting immediately, we're moving to a completely open source and totally free MIT licensing model. From this point on, Payload is now completely free for projects of any shape or size.

      it didn't feel right that we were charging money for software that people were so openly contributing to and helping shape

      Source ↗ github.com/payloadcms/payload/releases/tag/v3.0.0

      View all tags denolfe released this 19 Nov 01:19

      This is a major release that includes a re-architecture of Payload from an Express + React Router SPA to the Next.js App Router + RSCs.

      Source ↗ payloadcms.com/…/payload-30-the-first-cms-that-installs-directly-into-any-nextjs-app

      Blog / November 19, 2024 Payload 3.0: The first CMS that installs directly into any Next.js app

      Source ↗ payloadcms.com/posts/blog/payload-is-joining-figma

      Blog / June 17, 2025 Payload is joining Figma! Author James Mikrut

      What doesn't change: Payload remains open source—with Figma’s full commitment to OSS

  5. 1 event
    1 product
    • Sveltia CMS
      1. Released in November 2022 as a successor to the then-stalled Netlify CMS. Source ↗
      Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sveltiacms.app/en/docs/successor-to-netlify-cms

      Sveltia CMS was born in November 2022, when the progress of Netlify CMS was stalled for more than six months.

      @kyoshino’s clients wanted to replace their Netlify CMS instances without much effort

  6. 1 event
    1 product
    • Decap CMS
      1. Netlify CMS was renamed Decap CMS and its ownership transferred from Netlify to its agency partner PM, poslovni mediji d.o.o. Source ↗
      Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ netlify.com/blog/netlify-cms-to-become-decap-cms

      we have decided to transfer ownership of Netlify CMS to one of our trusted agency partners, PM

      Netlify CMS will be rebranded as Decap CMS

      February 23, 2023 Min Kim Product Marketing Manager

      Source ↗ decapcms.org/privacy

      This website is operated by PM, poslovni mediji d.o.o., a company registered in Slovenia

  7. Not checked

    We did not settle this. It is not a claim that the product lacks it.

    2 products
    • Sanity
      Sanity has not been renamed; the Studio was rewritten for v3 in 2022 and is now on v6, but the platform's major transitions are not dated on one page. Not checked Undated
    • Storyblok
      A "Storyblok V2" generation shipped after the original release, but no single vendor page dates the platform's rewrites, so the timeline is unconfirmed. Not checked Undated

Where the company is based.

  1. United States
    4 products
    • EmDash
      By design
    • Payload CMS
      By design
    • Sanity
      By design
    • Strapi
      By design
  2. Australia
    2 products
    • Keystatic
      By design
    • TinaCMS
      By design
  3. Austria
    1 product
    • Storyblok
      By design
  4. Finland
    1 product
    • ZeroCMS
      By design
  5. New Zealand
    1 product
    • CloudCannon
      By design
  6. Singapore
    1 product
    • Pages CMS
      By design
  7. Slovenia
    1 product
    • Decap CMS
      By design
  8. Does not apply
    1 product
    • Sveltia CMS
      There is no company behind it. Does not apply

How you reach support.

  1. EmailDedicated contactSLA
    Dedicated contact
    A named contact or a shared channel.
    SLA
    A response time written into the contract.
    2 products
    • Decap CMS
      Email, dedicated and SLA support come with higher tiers; the entry tier (1 site, 1 seat) gets community support only. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ decapcms.org/turbo

      site variables Standard email support

      Custom/granular roles SSO/SAML Dedicated support & SLA

      1 site 1 seat Community support

    • Strapi
      The self-hosted Community edition gets no official support, only volunteers on Discord and GitHub Discussions; email starts at Basic Support, and response-time commitments with the Premium add-on. Vendor documentation Checked
      8 quotes from 1 source

      Source ↗ support.strapi.io/…/6650214304-understanding-strapi-support-coverage

      Strapi provides four levels of support: Community Support Basic Support Standard Support Premium Support

      CMS Self-Hosted Community Community (No Official Support) CMS Self-Hosted Growth Basic Support CMS Self-Hosted Enterprise Standard Support (Optional Premium Support Add-on)

      Community Support All users of the community platforms are expected to follow our Code of Conduct Available through: Discord: https://discord.strapi.io GitHub Discussions: https://github.com/strapi/strapi/discussions Coverage includes: No coverage provided, community volunteers may be able to assist you

      Basic Support Available through: Email: support@strapi.io (self-hosted customers) Customer Portal: https://portal.usepylon.com/strapi

      Shared Slack channel (dedicated channel integrated with Strapi's helpdesk, giving direct access to support engineers)

      Concierge Advisory , a 90-day advisory program with a dedicated Implementation Manager for new and existing customers

      Premium Support includes Service Level Agreements (SLAs) with response time guarantees based on ticket priority

      Level 0 (P0 Critical): Response within 1 business day Level 1 (P1 High): Response within 2 business days

  2. EmailLive chatDedicated contact
    Dedicated contact
    A named contact or a shared channel.
    1 product
    • CloudCannon
      Support is by in-app chat or email, at standard and priority levels. Vendor documentation Checked
      6 quotes from 2 sources

      Source ↗ cloudcannon.com/pricing

      Support Receive prompt responses from our support and engineering teams. Standard support Priority support Dedicated support Git Syncing

      Standard support Get support from our team via in-app chat or email.

      Priority support Priority responses from our team via in-app chat or email.

      Dedicated support Dedicated Slack channel with direct access to our engineering team.

      Uptime SLA Service Level Agreement to guarantee uptime on your site.

      Source ↗ cloudcannon.com/enterprise

      Your questions are our top priority, and our Support Team and engineers are ready to help in a dedicated Slack channel.

  3. Live chatDedicated contact
    Dedicated contact
    A named contact or a shared channel.
    1 product
    • Storyblok
      Support rises by tier — Core, then Advanced, then Priority — with the top tiers adding a dedicated Customer Success Manager. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ storyblok.com/pricing

      do not hesitate and chat with us using our live-chat

      Support Services Core Core Core Advanced Priority

      Dedicated Customer Success Manager --- Not available --- Not available --- Not available Yes Yes

  4. EmailDedicated contact
    Dedicated contact
    A named contact or a shared channel.
    1 product
    • TinaCMS
      support@tina.io takes account inquiries; Discord is the named channel below Enterprise. The 99.9% figure is an uptime SLA, not a response-time commitment. Vendor documentation Checked
      9 quotes from 3 sources

      Source ↗ tina.io/pricing

      Roles 2 2 2 3 Custom Community Support Premium Support Business Support Dedicated Account Manager SSO

      Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit

      $0 Forever Includes 2 users, 2 roles, and community support.

      Source ↗ tina.io/docs/support

      On This Page Community support Priorized Support Enterprise Support Account Inquiries

      Support is provided via our Community Discord Server (Please use the #help channel). Bugs/feature-requests can be filed directly in the TinaCMS GitHub repo

      The Tina team provides prioritized Discord support to individuals on a paid plan.

      To learn more about our Enterprise Support Plans, check out our Enterprise Page

      For any account-related inquiries — including organization deletion — please contact support@tina.io

      Source ↗ tina.io/enterprise

      Uptime SLAs 99.9% server uptime with swift communications

  5. Dedicated contactSLA
    Dedicated contact
    A named contact or a shared channel.
    SLA
    A response time written into the contract.
    1 product
    • Sanity
      Free and lower tiers get community support; named support with an SLA comes as a paid upgrade, and dedicated support is a paid add-on. Vendor documentation Checked
      2 quotes from 2 sources

      Source ↗ sanity.io/pricing

      support & services community support included included included dedicated support not included - add-on included

      Source ↗ sanity.io/enterprise

      support + slas named support, onboarding, 24/7 incident response

  6. Dedicated contact
    Dedicated contact
    A named contact or a shared channel.
    1 product
    • Payload CMS
      Dedicated engineering support belongs to the enterprise offering, which is reached by talking to sales. Vendor claim Checked
      3 quotes from 2 sources

      Source ↗ payloadcms.com/get-started

      Enterprise customers can unlock dedicated support, hosting, and advanced features like SSO and visual editing.

      Build with Payload enterprise Get dedicated engineering support from Payload engineers and advanced features for your next big thing.

      Source ↗ payloadcms.com/talk-to-us

      Talk with our Sales team. What we'll talk about: Dedicated engineering support Demo of enterprise features Custom solutions to extend Payload Influence over the Payload roadmap

  7. Email
    1 product
    • ZeroCMS
      Vendor documentation Checked
      1 quote from 1 source

      Source ↗ zerocms.io/pricing

      Support Email support Priority support From early users

  8. Community only
    3 products
    • EmDash
      Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ emdashcms.com

      Join the Discord to chat with the team and community, or open an issue on GitHub.

      EmDash is an open source CMS built on Astro from Cloudflare.

      Source ↗ github.com/emdash-cms/emdash

      EmDash is in beta preview. We welcome contributions, feedback, plugins, themes, and ideas.

    • Pages CMS
      Community help only — documentation, a Discord channel and GitHub issues; there is no paid support tier. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org

      First, make sure to check the documentation . You can also ask for help in the Discord channel . Otherwise, post your issue on GitHub .

    • Sveltia CMS
      Community help only — GitHub Discussions; the maintainer offers paid consulting, but there is no product support tier. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ sveltiacms.app/en/support

      you can post questions on the Discussions page of our GitHub repository.

      Please do not contact the maintainer for free support. Your emails will not be answered.

      Looking for dedicated support by an experienced developer? Maintainer @kyoshino is available for hire

  9. Not checked

    We did not settle this. It is not a claim that the product lacks it.

    1 product
    • Keystatic
      Keystatic's documentation and Keystatic Cloud plan pages do not describe any support channel or response commitment, free or paid. Not checked Undated

Where the vendor's own service processes data.

  1. Elsewhere
    2 products
    • Keystatic
      Governed by Australian privacy law; the policy commits to no specific region. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/privacy-policy

      Such cloud and online services and third party providers may be located in Australia or overseas

      we do so in accordance with the Australian Privacy Principles.

    • Pages CMS
      The hosted app's privacy policy names only Singapore, the operator's location. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org/privacy

      Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located.

      Country refers to: Singapore

  2. USElsewhere
    2 products
    • CloudCannon
      CloudCannon's own servers are in California, with access from New Zealand. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ cloudcannon.com/terms

      8.7. You agree that we may store Content (including any Personal Information) in secure servers in California (AWS US West 1) and may access that Content (including any Personal Information) in California (AWS US West 1) and New Zealand from time to time.

      8.5. While we will take standard industry measures to back up all Content stored using the Service, you agree to keep a separate back-up copy of all Content uploaded by you onto the Service.

    • Payload CMS
      Content sits in a database you run; the company is in the United States and reserves the right to use service providers in other countries. Vendor documentation Checked
      7 quotes from 3 sources

      Source ↗ payloadcms.com/privacy

      This means that, if you use the Service, your personal information will necessarily be accessed and processed in the U.S.

      We are a U.S.-based company and many of our service providers, advisers, partners or other recipients of data are also based in the U.S.

      It may also be provided to recipients in other countries outside Europe.

      Source ↗ payloadcms.com/docs/production/deployment

      Payload can be deployed anywhere that Next.js can run - including Vercel, Netlify, SST, DigitalOcean, AWS, and more. Because it's open source, you can self-host it.

      But it's important to remember that most Payload projects will also need a database, file storage, an email provider, and a CDN.

      Payload can be used with any Postgres database or MongoDB-compatible database including AWS DocumentDB or Azure Cosmos DB. Make sure your production environment has access to the database that Payload uses.

      Source ↗ payloadcms.com/docs/database/overview

      Payload is designed to interact with your database through a Database Adapter, which is a thin layer that translates Payload's internal data structures into your database's native data structures.

  3. Your choice
    Your choice
    You pick the region.
    1 product
    • Strapi
      A hosted project is pinned to a region chosen when it is created and cannot be moved afterwards. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ docs.strapi.io/cloud/getting-started/deployment

      Region Choose the geographic location of the servers where your Strapi application is hosted. Selected region can either be US (East), Europe (West) or Asia (Southeast).

      However, the hosting region can only be chosen during the creation of the project (see Project Settings ).

      Source ↗ docs.strapi.io/cloud/projects/settings

      the chosen hosting region for your Strapi Cloud project, meaning the geographical location of the servers where the project and its data and resources are stored. The hosting region is set at project creation (see Project creation ) and cannot be modified afterwards.

  4. EUUSElsewhereYour choice
    Your choice
    You pick the region.
    1 product
    • Storyblok
      Hosted on AWS, with selectable data residency in the EU (Germany), the US and Canada, or Australia. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ storyblok.com/trust-center

      Flexible Data Residency Supported by AWS data centers in North America (US & Canada), Europe (Germany), and Australia.

  5. EUUSYour choice
    Your choice
    You pick the region.
    1 product
    • Sanity
      The backend runs in an EU region (Belgium); content may be stored in the EU/EEA, the US, or a customer-specified region. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ sanity.io/security

      uploaded content will be stored in the eu/eea, the us, or in regions where sanity has an operational footprint, specific by customer

      our backend systems currently run across three data centers in a single eu region (belgium)

  6. EUElsewhere
    1 product
    • Decap CMS
      Decap Turbo's controller is in Slovenia (EU); its sub-processors Supabase and Paddle may process data in other jurisdictions. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ decapcms.org/turbo/privacy

      We are the controller for the personal data we collect about users of Decap Turbo

      on infrastructure operated by Supabase or Paddle in other jurisdictions

      Source ↗ decapcms.org/turbo/terms

      a company registered in Slovenia

  7. EUUSElsewhere
    1 product
    • ZeroCMS
      Servers in the Netherlands. Data may also be transferred to and processed in third-party facilities in the US and other countries, under Standard Contractual Clauses. Vendor documentation Checked
      7 quotes from 1 source

      Source ↗ zerocms.io/privacy

      Our servers are located in the Netherlands

      Please be aware that regardless of your location, your information may be transferred to, stored by, and processed by us in our facilities and in the facilities of the third parties with whom we may share your personal information

      including facilities in the United States and other countries.

      If you are a resident in the European Economic Area (EEA), United Kingdom (UK), or Switzerland, then these countries may not necessarily have data protection laws or other similar laws as comprehensive as those in your country.

      For credit purchases and automatic top-ups, we share your workspace identifier, credit amount, and transaction type with Stripe as payment metadata.

      Our AI subprocessors (Anthropic, OpenAI, Google) are contractually prohibited from using your data for model training.

      We have implemented measures to protect your personal information, including by using the European Commission’s Standard Contractual Clauses for transfers of personal information between our group companies and between our third-party providers and us.

  8. US
    1 product
    • TinaCMS
      Content lives in your GitHub repository, which stays the source of truth; TinaCloud keeps indexes of it on servers in the United States, and reserves any other country where they maintain facilities. Vendor documentation Checked
      4 quotes from 3 sources

      Source ↗ tina.io/docs/tinacloud

      To deploy your site to production, you'll need to connect Tina to a hosted backend. This won't act as the source of truth for your data, but only to interface with your repo-based datastore.

      The Data Layer contains indexes of your Markdown and JSON files, ensuring low latency when fetching content. The Data Layer is synced up with your GitHub repository to ensure the indexes represent the source of truth.

      Source ↗ tina.io/docs/tinacloud/overview

      Once connected, your project's editors will be able to save content directly to its GitHub repository, entirely from within your site.

      Source ↗ tina.io/privacy-notice

      We store data on servers in the U.S. or any other country in which Tina.io or its affiliates, subsidiaries, agents, or contractors maintain facilities.

  9. Does not apply
    2 products
    • EmDash
      Nobody hosts it, so there is no service processing anything. Does not apply
    • Sveltia CMS
      Nobody hosts it, so there is no service processing anything. Does not apply

Whether the vendor documents GDPR compliance.

  1. Yes
    7 products
    • ZeroCMS
      Data controller for EEA residents, with an appointed EEA representative (Neatbit Oy, Helsinki) and Standard Contractual Clauses for transfers. Vendor documentation Checked
      6 quotes from 1 source

      Source ↗ zerocms.io/privacy

      If you are located in the EU or UK, this section applies to you.

      The General Data Protection Regulation (GDPR) and the UK GDPR require us to explain the legal bases we rely on to process your personal information.

      If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your Member State data protection authority

      If you are a resident in the European Economic Area, we are the “data controller” of your personal information. We have appointed Neatbit Oy to be our representative in the EEA.

      Neatbit Oy 2753488-9 Helsinki, Finland

      We have implemented measures to protect your personal information, including by using the European Commission’s Standard Contractual Clauses for transfers of personal information between our group companies and between our third-party providers and us.

    • CloudCannon
      A processor for your personal data, with EU Standard Contractual Clauses and a UK addendum — though the clauses are opt-in: CloudCannon pre-signs them and you countersign and return a copy. Vendor documentation Checked
      7 quotes from 1 source

      Source ↗ cloudcannon.com/gdpr

      for the purposes of EU/UK Data Protection Laws: i. you act as the Data Controller; and ii. we act as the Data Processor

      We will comply with all Applicable Data Protection Laws that apply to our Processing of Personal Data on your behalf

      this Addendum includes Standard Contractual Clauses (as defined below), which are pre-signed by us.

      you would like to opt in to the Standard Contractual Clauses, please complete the necessary details, countersign the Standard Contractual Clauses, and return a counter-signed copy to us at privacy@cloudcannon.com

      the EU Standard Contractual Clauses approved by the European Commission under Commission Implementing Decision (EU) 2021/914 of 4 June 2021 as set out in Schedule 2

      to the Cloud Cannon EU Standard Contractual Clauses applies where the Data Subject is subject to UK Data Protection Laws. UK Addendum.pdf

      We have appointed a data protection officer who can be contacted at privacy@cloudcannon.com

    • Decap CMS
      Decap Turbo acts as GDPR controller, states data-subject rights, and relies on Standard Contractual Clauses for transfers. Vendor documentation Checked
      3 quotes from 1 source

      Source ↗ decapcms.org/turbo/privacy

      We are the controller for the personal data we collect about users of Decap Turbo

      we rely on appropriate safeguards recognized under EU/UK data protection law, such as Standard Contractual Clauses or an applicable adequacy decision

      Complain to your local data protection authority (in Slovenia, the Information Commissioner)

    • Payload CMS
      Stated legal bases, appointed EU and UK representatives, and standard-form contracts for transfers out of Europe. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ payloadcms.com/privacy

      European Representative . Pursuant to Article 27 of the General Data Protection Regulation (GDPR), Payload CMS, Inc. has appointed European Data Protection Office (EDPO) as its GDPR Representative in the EU.

      UK Representative . Pursuant to Article 27 of the UK GDPR, Payload CMS, Inc. has appointed EDPO UK Ltd as its UK GDPR representative in the UK.

      Our legal bases for processing In respect of each of the purposes for which we use your personal information, the GDPR requires us to ensure that we have a “legal basis” for that use.

      appropriate safeguards, which are designed to give personal information effectively the same protection it has in Europe – for example, standard-form contracts approved by relevant authorize for this purpose

    • Sanity
      Sanity acts as a data processor on the customer's behalf, relying on Standard Contractual Clauses for transfers. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ sanity.io/security

      sanity.io is fully gdpr-compliant, and we handle our customers personal data with great care

      Source ↗ sanity.io/legal/privacy

      sanity is only a processor of data on behalf of the user and not the data controller

      appropriate safeguards for such personal data through use of the standard contractual clauses

    • Storyblok
      A processor under a Data Processing Agreement; also self-certified under the EU-US Data Privacy Framework. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ storyblok.com/trust-center

      Storyblok is fully compliant with GDPR and other applicable privacy laws.

      We are also self-certified under the EU-U.S. Data Privacy Framework.

      Source ↗ storyblok.com/legal/dpa

      Storyblok shall process Customer Data solely in accordance with documented instructions from Customer, including to provide the Storyblok Services

    • Strapi
      A processor for the content you put into Strapi, with a GDPR representative in Paris. Vendor documentation Checked
      5 quotes from 3 sources

      Source ↗ strapi.io/privacy

      If you are a registered customer of Strapi, we act as the ‘ data controller ’ of personal data about you and your use of Strapi, but as the ‘ data processor ’ of personal data in the information you put into Strapi (like information about your users, etc.).

      Pursuant to Article 27 of the General Data Protection Regulation (GDPR), Strapi has appointed Data Protection Office (DPO) as its GDPR representative in the EU.

      Writing to DPO at Strapi Solutions, 128 rue de la Boétie, 75008 Paris, France

      Source ↗ strapi.io/cloud-legal

      Strapi Cloud Legal Policies Strapi Cloud Terms of Service Strapi Cloud Policies Service Levels Strapi Data Processing Addendum

      Source ↗ strapi.io/pricing-cloud

      Community Support GDPR & SOC 2 compliance Free updates for upcoming features

  2. No
    3 products
    • Keystatic
      The policy invokes the Australian Privacy Principles and consent. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ keystatic.com/privacy-policy

      we do so in accordance with the Australian Privacy Principles.

      By opting-in, you consent to us collecting, holding, analysing and using the data

    • Pages CMS
      The hosted app's privacy policy is a generic template with no transfer safeguards; transfers rest on consent. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ pagescms.org/privacy

      This Privacy Policy has been created with the help of the Privacy Policy Generator .

      Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.

    • TinaCMS
      The April 2021 privacy notice names no legal basis, transfer mechanism or EEA representative, while a Chinese-language enterprise page claims full GDPR compliance. Vendor documentation Checked
      10 quotes from 4 sources

      Source ↗ tina.io/privacy-notice

      Tina.io Privacy Notice Last Modified: April 16, 2021 Welcome and thank you for your interest in SSW USA

      To comply with contractual and legal obligations and requirements; . Enable you to communicate and share files with users you designate; . To fulfill any other purpose for which you provide personal information; and . For any other lawful purpose, or other purpose that you consent to.

      Data Retention We will retain your personal information for the length of time needed to fulfill the purposes outlined in this Privacy Notice unless a longer retention period is required or permitted by law.

      We store data on servers in the U.S. or any other country in which Tina.io or its affiliates, subsidiaries, agents, or contractors maintain facilities.

      Nevada Residents Chapter 603A of the Nevada Revised Statutes permits a Nevada resident to opt out of future sales of certain covered information that a website operator has collected or will collect about the resident.

      For additional inquiries about this Privacy Notice, please send us an email at info@ssw.com.au or contact us at: Level 1, 81/91 Military Rd St Neutral Bay, NSW 2089 Australia

      Source ↗ tina.io/terms-of-service

      1.7 Service Location The Service is controlled and operated from facilities in the United States. Tina.io makes no representations that the Service is appropriate or available for use in other locations.

      Source ↗ tina.io/security

      All of our data is hosted on Amazon Web Services (AWS) databases. These databases are all located in the United States.

      Our Information Security Program follows the criteria set forth by the SOC 2 Framework.

      Source ↗ tina.io/zh/enterprise

      统一身份认证 支持主流身份提供商(IdP),兼容SAML和OIDC协议。 合规性保障 积极推进SOC 2认证,全面符合GDPR规范。 高可用性承诺

  3. Does not apply
    2 products
    • EmDash
      Nobody hosts it, so there is no service processing anything. Does not apply
    • Sveltia CMS
      Nobody hosts it, so there is no service processing anything. Does not apply

Named security and compliance attestations.

  1. ISO 27001Another attestation
    1 product
    • Storyblok
      ISO 27001 and TISAX; also self-certified under the EU-US Data Privacy Framework. Vendor documentation Checked
      2 quotes from 1 source

      Source ↗ storyblok.com/trust-center

      Adheres to ISO 27001 , TISAX and industry standards for data security and compliance.

      We are also self-certified under the EU-U.S. Data Privacy Framework.

  2. SOC 2
    3 products
    • CloudCannon
      SOC 2 Type 2; the report is released through their trust centre on request. Vendor documentation Checked
      3 quotes from 2 sources

      Source ↗ cloudcannon.com/security

      CloudCannon has achieved SOC 2 Type 2 certification , signifying our ongoing commitment to enhancing data security, and ensuring the protection of your valuable information.

      You can request access to CloudCannon's SOC 2 and other security documents through our Trust Center:

      Source ↗ cloudcannon.com/terms

      must not use the Website or the Service to process (including to transmit or store) any Personal Information that is regulated by: a. the Payment Card Industry Data Security Standard; b. HIPAA unless and until you have entered into a separate business associate agreement with us; and/or c. CCPA unless and until you have entered into a separate CCPA data processing agreement with us.

    • Sanity
      SOC 2 Type 2, covering the security principle. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ sanity.io/security

      sanity.io is a soc 2 type 2 certified provider. our soc 2 examination covers the security principle in the trust services criteria

    • Strapi
      SOC 2 Type 2, audited by a third party with no noted exceptions; the report is available on request through their trust centre. Vendor documentation Checked
      4 quotes from 2 sources

      Source ↗ strapi.io/security

      SOC 2 certified GDPR compliant No credit card required Create a project

      Source ↗ strapi.io/…/introducing-faster-deployments-and-soc-2-certification

      Strapi Achieves SOC 2® Type 2 Certification We’re happy to announce that Strapi has achieved SOC 2® Type 2 certification.

      For SOC 2 Type 2 certification, they monitored and verified the effectiveness of our controls over a period of time. Vanta, the third party we worked with, issued a final report with 0 noted exceptions.

      Our SOC 2® report is available upon request via our trust center

  3. None
    6 products
    • ZeroCMS
      Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ zerocms.io/privacy

      HOW DO WE KEEP YOUR INFORMATION SAFE? We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information we process.

      Source ↗ zerocms.io/pricing

      Compare all 40 features across plans Hide the full feature comparison Feature Solo Team Business

      Git All content in Git GitHub integration Branch switching Support Email support Priority support

      Everything in Team, plus Require approvals before publishing Priority support

      Pricing Early partners Changelog Privacy Policy support@zerocms.io

    • Decap CMS
      Decap Turbo's privacy policy describes security measures but claims no ISO 27001, SOC 2 or other audited certification. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ decapcms.org/turbo/privacy

      We use appropriate technical and organizational measures to protect your data, including encryption in transit, access controls

    • Keystatic
      The privacy policy's security section names no certification. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ keystatic.com/privacy-policy

      We take all reasonable steps to ensure that your personal information is treated securely and in accordance with this

    • Pages CMS
      No SOC 2, ISO 27001 or other audited certification is named in the privacy policy. Vendor documentation Checked
      1 quote from 1 source

      Source ↗ pagescms.org/privacy

      The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure

    • Payload CMS
      The security page names no audit or attestation. Vendor documentation Checked
      5 quotes from 2 sources

      Source ↗ payloadcms.com/security

      Security at Payload Security isn't just a feature—it's foundational to what Payload does as an open-source solution.

      Optimizing Security in your Payload Environment Payload provides a comprehensive range of security features designed to safeguard your data effectively.

      01 Single Sign-On (SSO) SSO integrates with any SAML or OAuth 2.0 identity provider, and meets the requirements the highest enterprise security standards. 02 Authentication Payload's user Auth is built on secure, HttpOnly cookies to protect from MITM (Man in the Middle) and XSS (cross site scripting) attacks.

      03 Access Control Deep access control down to the field level allows for granular management of data access and modification rights. 04 CSRF Prevention Cross-Site Request Forgery (CSRF) prevention will verify the authenticity of each request to your API to prevent a malicious action. 05 Cross Origin Resource Sharing You can determine a whitelist array of URLS to allow CORS requests from

      Source ↗ payloadcms.com/enterprise/audit-logs

      Audit Logs Payload provides unparalleled visibility into every change within the platform over time, meeting the most demanding compliance requirements. Schedule a Demo Schedule a Demo Enterprise-grade security compliance

    • TinaCMS
      The security page says the programme follows SOC 2 criteria, which is not the same as holding an audited report. Vendor documentation Checked
      4 quotes from 1 source

      Source ↗ tina.io/security

      My TinaCloud Security Organizational Security Information Security Program We have an Information Security Program in place that is communicated throughout the organization.

      Our Information Security Program follows the criteria set forth by the SOC 2 Framework. SOC 2 is a widely known information security auditing procedure created by the American Institute of Certified Public Accountants.

      Third-Party Audits Our organization undergoes independent third-party assessments to test our security and compliance controls.

      All of our services are hosted with Amazon Web Services (AWS). They employ a robust security program with multiple certifications. For more information on our provider

  4. Does not apply
    2 products
    • EmDash
      Nobody hosts it, so there is no service processing anything. Does not apply
    • Sveltia CMS
      Nobody hosts it, so there is no service processing anything. Does not apply

Commits to the default branch in the last 90 days.

  1. No public repository
    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  2. 0
    1 product
    • Pages CMS
      Read from GitHub Checked
  3. 1,165
    1 product
    • Sanity
      Read from GitHub Checked
  4. 164
    1 product
    • TinaCMS
      Read from GitHub Checked
  5. 395
    1 product
    • Payload CMS
      Read from GitHub Checked
  6. 46
    1 product
    • Keystatic
      Read from GitHub Checked
  7. 499
    1 product
    • Strapi
      Read from GitHub Checked
  8. 53
    1 product
    • Decap CMS
      Read from GitHub Checked
  9. 784
    1 product
    • Sveltia CMS
      Read from GitHub Checked
  10. 840
    1 product
    • EmDash
      Read from GitHub Checked

When the npm package last published a stable version, or the latest GitHub release where there is no package.

  1. No public repository
    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  2. 2026-06-08
    1 product
    • Pages CMS
      Read from GitHub Checked
  3. 2026-08-26
    1 product
    • Keystatic
      Read from GitHub Checked
  4. 2026-09-10
    1 product
    • Decap CMS
      Read from GitHub Checked
  5. 2026-09-14
    1 product
    • TinaCMS
      Read from GitHub Checked
  6. 2026-09-15
    1 product
    • EmDash
      Read from GitHub Checked
  7. 2026-09-16
    1 product
    • Strapi
      Read from GitHub Checked
  8. 2026-09-17
    1 product
    • Sanity
      Read from GitHub Checked
  9. 2026-09-18
    1 product
    • Payload CMS
      Read from GitHub Checked
  10. 2026-09-19
    1 product
    • Sveltia CMS
      Read from GitHub Checked

Stars on the public repository.

  1. No public repository
    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  2. 12,426
    1 product
    • EmDash
      Read from GitHub Checked
  3. 13,801
    1 product
    • TinaCMS
      Read from GitHub Checked
  4. 19,392
    1 product
    • Decap CMS
      Read from GitHub Checked
  5. 2,400
    1 product
    • Keystatic
      Read from GitHub Checked
  6. 2,855
    1 product
    • Sveltia CMS
      Read from GitHub Checked
  7. 4,010
    1 product
    • Pages CMS
      Read from GitHub Checked
  8. 44,851
    1 product
    • Payload CMS
      Read from GitHub Checked
  9. 6,323
    1 product
    • Sanity
      Read from GitHub Checked
  10. 73,205
    1 product
    • Strapi
      Read from GitHub Checked

Open issues on the public repository.

  1. No public repository
    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  2. 1,167
    1 product
    • Payload CMS
      Read from GitHub Checked
  3. 185
    1 product
    • Keystatic
      Read from GitHub Checked
  4. 218
    1 product
    • Sanity
      Read from GitHub Checked
  5. 300
    1 product
    • EmDash
      Read from GitHub Checked
  6. 464
    1 product
    • TinaCMS
      Read from GitHub Checked
  7. 47
    1 product
    • Sveltia CMS
      Read from GitHub Checked
  8. 556
    1 product
    • Strapi
      Read from GitHub Checked
  9. 596
    1 product
    • Decap CMS
      Read from GitHub Checked
  10. 70
    1 product
    • Pages CMS
      Read from GitHub Checked

Weekly downloads of the product's npm package.

  1. No public repository
    3 products
    • ZeroCMS
      By design
    • CloudCannon
      By design
    • Storyblok
      By design
  2. 13,111
    1 product
    • Decap CMS
      Read from GitHub Checked
  3. 146,273
    1 product
    • Strapi
      Read from GitHub Checked
  4. 15,798
    1 product
    • Sveltia CMS
      Read from GitHub Checked
  5. 24,521
    1 product
    • EmDash
      Read from GitHub Checked
  6. 44,046
    1 product
    • TinaCMS
      Read from GitHub Checked
  7. 582,150
    1 product
    • Payload CMS
      Read from GitHub Checked
  8. 696,452
    1 product
    • Sanity
      Read from GitHub Checked
  9. 94,787
    1 product
    • Keystatic
      Read from GitHub Checked
  10. Does not apply
    1 product
    • Pages CMS
      Does not apply

Available for products with a public repository. A product is considered active when it has at least 10 commits in 90 days and has gotten a new release within the last 12 months.

  1. Moving

    Above both thresholds.

    8 products
    • Decap CMS
      Our judgement
    • EmDash
      Our judgement
    • Keystatic
      Our judgement
    • Payload CMS
      Our judgement
    • Sanity
      Our judgement
    • Strapi
      Our judgement
    • Sveltia CMS
      Our judgement
    • TinaCMS
      Our judgement
  2. Maintenance mode

    Alive, but not moving by either measure.

    1 product
    • Pages CMS
      Our judgement
  3. Does not apply
    3 products
    • ZeroCMS
      There is no public repository, so there are no numbers to read. Does not apply
    • CloudCannon
      There is no public repository, so there are no numbers to read. Does not apply
    • Storyblok
      There is no public repository, so there are no numbers to read. Does not apply

The kinds of site the product suits, in our opinion.

ZeroCMS

  • Documentation
  • Marketing sites
  • Blogs
  • Agency multi-site

CloudCannon

  • Marketing sites
  • Blogs
  • Agency multi-site

Decap CMS

  • Blogs
  • Marketing sites
  • Documentation

EmDash

  • Marketing sites
  • Blogs

Keystatic

  • Marketing sites
  • Blogs
  • Documentation

Pages CMS

  • Blogs
  • Marketing sites
  • Documentation

Payload CMS

  • Marketing sites
  • Agency multi-site
  • Ecommerce

Sanity

  • Marketing sites
  • Ecommerce
  • Agency multi-site

Storyblok

  • Marketing sites
  • Ecommerce
  • Agency multi-site

Strapi

  • Marketing sites
  • Ecommerce
  • Agency multi-site

Sveltia CMS

  • Blogs
  • Marketing sites
  • Documentation

TinaCMS

  • Marketing sites
  • Blogs
  • Documentation

Who should pick it, in our opinion.

ZeroCMS

  • Astro sites already on GitHub using content collections
  • Docs and marketing sites built from MDX components
  • Writers who publish without touching Git
  • Agencies running several Astro client sites
  • Teams that want AI agents in their content

CloudCannon

  • Agencies running many client sites
  • Marketing teams who edit on the page
  • Teams using Astro alongside Hugo, Jekyll or Eleventy
  • Organizations that need SOC 2 or SAML SSO
  • Teams with developers wanting to own the CMS config

Decap CMS

  • Static sites that want a free Git-based editor
  • Teams committed to open source and self-hosting
  • Projects already on GitHub, GitLab or Bitbucket
  • Editors who tolerate a separate preview pane

EmDash

  • Astro sites that want a database-backed CMS
  • Teams migrating a WordPress site to Astro
  • Developers who drive content with AI agents
  • Sites needing instant SSR updates, no rebuild
  • Self-hosters on Cloudflare Workers or Node

Keystatic

  • Astro sites whose content stays in the repo
  • Developers comfortable configuring the CMS in code
  • Solo owners and small content teams
  • Sites that read content through astro:content
  • Teams wanting an MIT, self-hostable CMS

Pages CMS

  • Static GitHub sites that want a free editor
  • Solo owners and small content teams
  • Editors invited without a GitHub account
  • Projects happy to review on GitHub

Payload CMS

  • Teams with TypeScript developers on hand
  • Teams with developer time but limited budget
  • Projects mixing site content and application data
  • Organizations that must own the database
  • Astro sites already fetching from an API

Sanity

  • Structured-content teams publishing to many channels
  • Developers who model content in code
  • Marketers who edit on a live preview of the page
  • Enterprises needing SAML SSO and custom roles
  • Astro sites already fetching content from an API

Storyblok

  • Enterprise teams wanting visual editing on a headless API
  • Marketers who edit on a live preview of the page
  • Multi-market sites needing strong localization
  • Astro sites already fetching content from an API
  • Teams that need SAML SSO and ISO 27001

Strapi

  • Teams that need a content API more than a site editor
  • Organizations that must self-host and own the database
  • Projects mixing site content and application data
  • Content teams needing staged review and an audit trail
  • Astro sites already fetching from a REST or GraphQL API

Sveltia CMS

  • Sites migrating off Netlify or Decap CMS
  • Multilingual static sites needing real i18n
  • Static blogs and marketing sites on Git
  • Developers wanting a no-build, drop-in editor
  • Small teams comfortable with Git-host accounts

TinaCMS

  • Astro sites wanting visual editing today
  • Developers who want the CMS in their repo
  • Teams whose editors have no GitHub account
  • Small teams on one site at a time

What the product does well, in our opinion.

ZeroCMS

  • Preview is your real Astro site
  • Nothing added to your repository
  • Eight built-in content checks, custom ones in prose
  • Your Zod schemas are the schema
  • AI agent with custom skills
  • Editors need no GitHub account or seat
  • MCP server for external agents

CloudCannon

  • On-page visual editing for marketers
  • SOC 2 Type 2, SAML SSO and enforced MFA
  • Client access with no account at all
  • Per-collection and per-folder permissions
  • Free staging and branch sites
  • GitHub, GitLab and Bitbucket, self-hosted included
  • Thirteen years in market

Decap CMS

  • Backends for six git hosts, self-hosted included
  • Drafts, review and a pull request per entry
  • Custom widgets and editor components
  • Content stays as plain files in your repo
  • Free and MIT-licensed, with no vendor lock-in
  • Hosted Decap Turbo tier, priced per seat and site

EmDash

  • Edits appear instantly via SSR, no rebuild
  • Real-site draft preview, updated as you type
  • Content served through Astro Live Collections
  • WordPress import built in
  • REST API and a full content CLI
  • MCP server reads, writes and publishes
  • MIT licensed and self-hostable

Keystatic

  • Content flows through astro:content
  • Reads Markdoc, MDX, YAML and JSON
  • Branch and pull-request workflow on GitHub
  • Stale edits are blocked, not overwritten
  • Local mode edits files with no account
  • Reference, object and block fields in forms
  • MIT licensed and self-hostable

Pages CMS

  • Email editors need no GitHub seat
  • Free and MIT-licensed, hosted or self-hosted, no paid tier
  • Only a .pages.yml is added to the repo
  • Schema-driven forms with block and union fields
  • Content and media stay as files in your repo

Payload CMS

  • Content model is TypeScript you own
  • REST, GraphQL and a direct Node API
  • Versions with diffs and one-click restore
  • Field-level access control on the free tier
  • Document locking warns the second editor
  • Official MCP server that reads and writes
  • MIT licensed and self-hostable

Sanity

  • Real-time collaborative editing
  • Official Astro integration with visual editing
  • Agent Actions and a remote MCP server
  • Forms honor references, unions and nested blocks
  • GROQ querying, full HTTP API and webhooks
  • AI terms forbid training on your content
  • Version history with one-click restore

Storyblok

  • Official Astro SDK and Content Layer loader
  • Strong multi-locale translation workflow
  • On-page visual editing via the Storyblok Bridge
  • ISO 27001, SAML SSO with SCIM, EU data residency
  • Field-level roles and staged approval workflows
  • Management API, webhooks and a remote MCP server
  • Field-level comments with reply and resolve

Strapi

  • Review stages you define, with per-stage role gates
  • Field-level permissions, free in the Community edition
  • Audit log covering sign-ins, roles and content changes
  • First-party MCP server that writes and publishes
  • REST and GraphQL that both read and write content
  • Version history with restore, and scheduled releases
  • Open core, self-hostable, with an MIT-licensed core

Sveltia CMS

  • Drop-in replacement for Netlify/Decap config
  • Linked-locale i18n with in-editor machine translation
  • No build step, adapter or dependency
  • GitHub, GitLab, Gitea and Forgejo, self-hosted included
  • In-editor commit history and signed commits on GitHub
  • Custom fields, editor components and preview templates
  • Free and MIT-licensed, no vendor lock-in

TinaCMS

  • On-page visual editing of your real Astro site
  • Blocks with a visual template picker
  • Editors need no GitHub account
  • Local editing with no account at all
  • Editor is served from your own site
  • Typed GraphQL API over your content
  • Apache-2.0, with a self-hostable backend

Where the product falls short, in our opinion.

ZeroCMS

  • Only file-backed content collections are editable
  • GitHub only
  • No free tier or self-hosted option
  • No SOC 2, SAML SSO or in-product audit log
  • Young product with early access
  • No HTTP API, webhooks or custom field widgets
  • Astro only

CloudCannon

  • No visual editing or preview for server-rendered Astro
  • Server-only components do not redraw in the preview
  • Visual editing needs per-component setup
  • Every field has to be described twice
  • No in-product version history
  • No AI in the product
  • No content checks

Decap CMS

  • No Astro integration; MDX is raw text only
  • GitHub login needs access to your whole org
  • Preview is Decap's own render, not your site
  • Direct backends need a repo seat per editor
  • Concurrent edits silently overwrite
  • Collection roles, SSO and multi-site are paid Turbo tiers
  • No AI, HTTP API, webhooks or in-editor history

EmDash

  • Content lives in a database, not your repo
  • Whole site goes SSR, on Astro 6 or later
  • You run the app, database and storage
  • Beta preview, and a young project
  • Roles are instance-wide, not per collection
  • No review diff, comments or content checks
  • Ships no AI of its own

Keystatic

  • No rendered live preview for Astro
  • Reshapes your content and reformats files on save
  • Needs a Node host, an adapter and React in your repo
  • Editors need GitHub write access unless you use Cloud
  • The content model is declared twice
  • GitHub is the only Git host
  • Experimental by its own description

Pages CMS

  • Every save commits; no drafts or review diff
  • No preview of the rendered site
  • Concurrent or upstream edits discard unsaved work
  • No Astro integration; MDX is raw-only
  • No configurable roles, SSO or approvals
  • GitHub only; no AI, API or webhooks
  • Content model is declared again in config

Payload CMS

  • You run a second Next.js app, database and storage
  • Nothing renders an Astro preview for you
  • You map Payload's model to Astro, blocks and types
  • No webhooks; you write the hook that triggers a rebuild
  • A custom loader you write replaces your collections
  • Astro gets a repo example, not docs or a preview helper
  • SSO, AI and workflows are enterprise-only

Sanity

  • Content lives in Sanity's cloud, not your repo
  • Visual editing needs SSR on a preview site you host
  • SaaS only, with no self-hosted or local mode
  • Adds SDK, config, routes and schema to your repo
  • You map Portable Text blocks to Astro components
  • SSO and custom roles are Enterprise
  • No built-in approval workflow or content checks

Storyblok

  • Content lives in Storyblok, not your repo
  • You map Storyblok blocks to Astro components
  • You build and host the preview site yourself
  • Published plans include one space; more is quote-only
  • SSO, scheduling, workflows and extended audit log are paid
  • SaaS only, with no self-hosted option
  • No built-in content checks

Strapi

  • Astro support is community-maintained, not first-party
  • Review, audit, history, releases and SSO are paid tiers
  • Nothing renders an Astro preview for you
  • No first-party Astro loader; the community one is an RC
  • Self-hosting means a Node app, database and storage
  • Schema changes need a redeploy, never on a live instance
  • No diff of what changed before you publish

Sveltia CMS

  • Preview is Sveltia's own render, not your site
  • Concurrent edits can silently overwrite
  • No Astro integration; MDX and Markdoc unsupported
  • Beta, no hosted option; you run the OAuth gateway
  • Every editor needs a Git-host account and seat
  • No roles, SSO, SAML or multi-site management
  • Content model is declared again in config.yml

TinaCMS

  • Your Astro content collections go unused
  • Visual editing needs an adapter and per-page setup
  • One project per subscription, plus per-seat fees
  • Drafts and review are paid; otherwise every save deploys
  • Commits are bot-authored until each editor opts in
  • No diff or comments in the product; review happens on GitHub
  • GitHub is the only shipped Git host

No aspect mentions “”.

Search reads every row label, explanation and shown answer, at every depth. If it is not here, we did not record it. Try a shorter word.

75% — best answer on three of the area's four ranked aspects Not enough data to grade
Done reading?

Now give your collections an editor.

Connect your Astro repo and Zero turns every collection into a form your team can edit. 14-day free trial.