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.
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. Read moreShow less
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
AI-native, Git-based CMS driven by your own Astro schemas.
Connect a GitHub repository and Zero reads your Astro Zod schemas and .astro components to generate the editor — no plugins, no config, nothing added to your repository. Editors work against a live preview of the real site, and every publish lands as a clean commit. An AI agent works in the editor, and eight content checks run on demand or as a pre-publish gate.
Strengths
Preview is your real Astro site
Nothing added to your repository
Eight built-in content checks, custom ones in prose
Git-based CMS with a visual editor over your built site.
CloudCannon connects to a Git repository and lays a visual editor over the built site, so editors change the rendered page rather than a form. It hosts the build and the editing app itself and syncs every change back to the repository as a commit. Astro is one of the frameworks it builds, and its component and data editing is configured through files you add to the repo.
Strengths
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
Limitations
No visual editing or preview for server-rendered Astro
Server-only components do not redraw in the preview
Open-source, Git-based CMS that edits a static site through a self-hosted admin panel.
Decap is a single-page admin app you add to your own site at /admin, configured in a YAML file and committing straight to your Git host through an OAuth backend. It edits the Markdown and data files already in the repository, which Astro reads back through astro:content. Formerly Netlify CMS, it is community-maintained and framework-agnostic.
Strengths
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
Limitations
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
Open-source, Astro-only CMS from Cloudflare that stores content in a database and ships an MCP server for AI agents.
EmDash is Cloudflare's Astro-only CMS: it stores content in a database on Cloudflare's platform rather than in Git, and deploys to your own Cloudflare account. It wires into Astro directly and ships an MCP server so AI agents can read and write content. It is MIT-licensed and young.
Open-source, Git-based CMS for Astro, Next.js and Remix, configured in your repository and editing Markdown, YAML and JSON files.
Keystatic is configured in a TypeScript file in your repository and edits the Markdown, YAML and JSON already sitting there. A local mode runs the editor against those files with no account at all; Keystatic Cloud adds hosted GitHub auth and image storage. Astro reads the content back through astro:content, but the content model is declared twice.
Strengths
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
Limitations
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
Open-source, Git-based CMS that edits a GitHub repository's files through a hosted or self-hosted admin app.
Pages CMS edits the files in a GitHub repository through an admin app, configured in a YAML file in the repository. A free hosted app runs it with GitHub sign-in, or you can self-host the same app. It edits the Markdown, YAML and JSON already in the repository, which Astro reads back through astro:content.
Strengths
Email editors need no GitHub seat
Free and MIT-licensed, hosted or self-hosted, no paid tier
Headless CMS whose admin panel runs inside a Next.js app.
Payload installs into a Next.js app and stores content in a database you provide, giving a fully code-configured admin panel and a REST and GraphQL API over the content. It is self-hosted or run on Payload Cloud. Astro consumes the content over those APIs rather than through astro:content, and the content model lives in Payload, not the repository.
Strengths
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
Limitations
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
Headless CMS whose open-source, code-configured Studio edits content held in a hosted cloud store and delivered through APIs.
Sanity pairs an open-source, code-configured editing Studio with a hosted content store reached over APIs. Content lives in Sanity's cloud rather than your repository, and Astro fetches it at build or request time through the client. The Studio's schema, written in JavaScript, is the content model, and the free tier gives way to usage-based pricing as a project grows.
Strengths
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
Limitations
Content lives in Sanity's cloud, not your repo
Visual editing needs SSR on a preview site you host
Headless CMS delivered as a SaaS, edited through a block-based visual editor over its content API.
Storyblok is a hosted headless CMS built around a block-based visual editor that previews your site as editors work. Content lives in Storyblok's cloud and reaches Astro through its content API and an official Astro SDK. The content model is defined in Storyblok's interface, separate from the repository, and pricing scales by seats and usage.
Strengths
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
Limitations
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
Open-core headless CMS that runs as its own Node application.
Strapi runs as its own Node application against a database you provide, generating a REST and GraphQL API and an admin panel from a content model you define in its interface or in code. It is self-hosted or run on Strapi Cloud. Astro consumes the content over those APIs, and the enterprise features, including SSO, sit outside the open-source half.
Strengths
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
Limitations
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
Open-source, Git-based CMS that edits repository files through a self-hosted admin panel — a modern Svelte rewrite of Netlify/Decap CMS.
Sveltia is a client-side admin app you add to your own site, a modern Svelte rewrite of Netlify/Decap CMS that reads the same configuration. It commits directly to your Git repository through an OAuth backend and edits the files already there, which Astro reads back through astro:content. It is MIT-licensed with no hosted service of its own.
Strengths
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
Git-based CMS that serves its editor from your own repository.
Tina serves its own editor from your repository and keeps content as files, then queries those files back through a generated GraphQL client rather than astro:content. Visual editing works on Astro pages once an adapter and per-page wiring are in place. Editors sign in through Tina Cloud, so they need no GitHub account of their own.
Strengths
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
Limitations
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
April 28, 2026 EmDash is live A quick look at what EmDash is, what shipped in the first public release
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.
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
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.
Active
No end-of-life notice has been published.
all 12
ZeroCMS
Vendor documentation
Checked 3 quotes from 2 sources
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!
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.
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
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
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
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
Sveltia CMS focuses solely on content management without building your site
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
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
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
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
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
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.
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
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.
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.
We recommend configuring Source Editable Regions for standalone HTML-like files (i.e., files that contain HTML structure and templating, like .astro or .liquid
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
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
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.
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
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.
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
Sveltia CMS focuses solely on content management without building your site
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
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.
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.
Astro 2–7
1 product
Sanity
Vendor documentation
Checked 1 quote from 1 source
Astro 6 or later — upgrade first if you're on an older major
Whether the product supports editing Astro Starlight sites.
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
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
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?
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
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
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
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
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
Sveltia CMS focuses solely on content management without building your site
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
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
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.
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
Static
1 product
CloudCannon
By design
Output modes supported by the preview.
StaticServer-rendered
3 products
ZeroCMS
Tested and documented
Checked 2 quotes from 1 source
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
Server-rendered
2 products
EmDash
Vendor documentation
Checked 1 quote from 1 source
visual editing requires server-side rendering because draft mode depends on per-request cookie checking
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
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).
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.
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.
Headless Mode is ideal for Sites built and hosted externally or dynamic Sites that rely on server-side rendering.
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
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
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
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 .
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
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
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.
Nothing
1 product
ZeroCMS
Tested and documented
Checked 2 quotes from 2 sources
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.
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
fields Field definitions shown in the editor (e.g. [{name: title, type: string}]).
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
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.
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.
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
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
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
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.
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
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
/* 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'
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
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.
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.
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
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
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.
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
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
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.
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
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
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.
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
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.
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.
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
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
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
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.
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.
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.
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
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
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
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:
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
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
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.
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
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
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
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
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.
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.
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 )
No components
Nothing can be placed in the body.
1 product
Pages CMS
Tested
Checked
How the editor learns where your assets live.
Found in the project
The editor locates your asset folders itself.
1 product
ZeroCMS
Tested and documented
Checked 3 quotes from 1 source
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.
Declared in config
Upload and public paths are set in a CMS config.
9 products
CloudCannon
Vendor documentation
Checked 6 quotes from 2 sources
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.
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
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
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.
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
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
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
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)
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.
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
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.
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.
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).
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
Payload dynamically generates a beautiful, fully type-safe Admin Panel to manage your users and data.
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
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.
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.
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.
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
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
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
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)
Editor components are custom blocks that can be inserted into the content. Sveltia CMS includes built-in components and also allows for custom components.
Rich Text Embed Within rich-text fields , we have the option to embed custom components as a template.
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
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.
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.
Auto-generated from your Astro schema Supports frontmatter, YAML, and JSON files Date pickers, tag inputs, dropdowns, toggles Validation errors shown inline before publish
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
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.
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
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
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
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.
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
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.
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
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
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
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
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
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
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
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.
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
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.
As structure
Edited as fields, at any depth.
11 products
ZeroCMS
Tested and documented
Checked 3 quotes from 2 sources
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.
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
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
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
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
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
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
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).
Only the following types have dedicated list UIs built into the CMS... String field type Object field type Image field type
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.
Choosable
Adding an item offers the shapes the union allows.
all 12
ZeroCMS
Tested and documented
Checked 4 quotes from 2 sources
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
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.
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
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
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
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)
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
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
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
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
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.
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
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
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.
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
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
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
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.
Merged live
Edits from several people merge as they type.
3 products
ZeroCMS
Tested and documented
Checked 2 quotes from 1 source
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
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.
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
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
At this time, Sveltia CMS does not provide built-in features for handling merge conflicts or simultaneous edits.
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
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.
Blocked
The save is refused until you take the change.
2 products
CloudCannon
Vendor documentation
Checked 2 quotes from 1 source
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
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.
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
At this time, Sveltia CMS does not provide built-in features for handling merge conflicts or simultaneous edits.
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
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.
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
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.
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.
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
Community Support Premium Support Business Support Dedicated Account Manager SSO Editorial Workflow AI Assist Coming Soon Coming Soon Coming Soon Projects
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.
Translation workflow
Linked locales, plus tracking of what still needs translating.
1 product
Storyblok
Vendor documentation
Checked 2 quotes from 1 source
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
Linked locales
The product knows one entry is a translation of another.
6 products
Decap CMS
Vendor documentation
Checked 1 quote from 1 source
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
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
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
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.
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
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
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.
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
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
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
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
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
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
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
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.
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
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
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.
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
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.
In plain language
You write your own checks as written instructions.
1 product
ZeroCMS
Tested and documented
Checked 3 quotes from 1 source
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
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.
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
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.
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
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.
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
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
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:
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
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
preview (React component, optional): A React class component that defines how the field’s value is previewed in the CMS preview pane.
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
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
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.
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
The preview runs on Astro's actual dev server with HMR, and updates almost instantly as you type.
How your changes reach the preview.
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
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
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.
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
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.
As you type
5 products
ZeroCMS
Tested
Checked
CloudCannon
Vendor documentation
Checked 2 quotes from 2 sources
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.
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.
On save
1 product
Decap CMS
Tested
Checked
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.
Under ten seconds
6 products
ZeroCMS
Tested and documented
Checked 1 quote from 1 source
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
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.
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
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.
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.
Yes
5 products
ZeroCMS
Tested and documented
Checked 1 quote from 1 source
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
Shareable Previews Easily get to your preview on Netlify, Vercel, AWS, etc. This allows editors to easily share their site preview with other stakeholders.
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.
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
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.
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
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.
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
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.
an unpublished entry links to the deploy preview built for its pull request, so you can see a draft before it goes live.
Does not apply
2 products
Keystatic
Does not apply
Pages CMS
Does not apply
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.
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
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.
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.
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
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
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
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
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.
Do you support Git LFS? Unfortunately we do not support Git LFS at this time due to limitations with the GitHub API.
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
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.
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
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
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.
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
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
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.
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
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.
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
Storyblok delivers all assets via AWS CloudFront CDN .
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
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.
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
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.
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.
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
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
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
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
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
otherwise your assets will still be prefixed with https://assets.tina.io as if you were still using repo based media
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
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.
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
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
Breakpoint changes will only apply to new images, existing images will not be resized or have new sizes generated.
Optimized by Astro
Optimized by Astro
Astro's own astro:assets pipeline, at build time.
1 product
ZeroCMS
Tested
Checked
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
CloudCannon integrates with several DAM providers to store your images and documents outside your Git repository. Your editors can upload and select assets from
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.
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
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
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
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
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.
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.
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'
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
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
`settings.commit.templates` defines the default commit message format for content and media changes.
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
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.
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 .
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
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.
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.
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.
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
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.
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
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.
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
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
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.
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
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
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.
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.
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.
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
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.
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 .
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
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
Editorial Workflow currently only works with the GitHub and GitLab backends.
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
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.
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
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
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
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
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
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
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.
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
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 .
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
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
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
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.
Yes
5 products
EmDash
On Cloudflare Workers a cron trigger is required to release scheduled content. Vendor documentation
Checked 2 quotes from 1 source
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
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.
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
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.
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
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
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?
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
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
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.
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
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.
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?
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
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
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
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.
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
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
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
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
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
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.
No
Anyone who can edit can publish.
3 products
Keystatic
Tested
Checked
Pages CMS
Vendor documentation
Checked 1 quote from 1 source
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
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.
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
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
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
(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.
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
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 .
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
More limited collaborators scoped per repository; there are no configurable roles, and finer control is unreleased. Vendor documentation
Checked 3 quotes from 2 sources
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
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
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
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
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?
Yes
10 products
ZeroCMS
Tested and documented
Checked 2 quotes from 1 source
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
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
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
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
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
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
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
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.
provide the `repo` option with the format `owner/repo`
Can the CMS be branded with your own logo and colors?
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
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
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
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 .
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.
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
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.
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.
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
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
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
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
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.
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
No
The client sees the vendor's product.
2 products
ZeroCMS
Tested
Checked
Pages CMS
Tested
Checked
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?
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
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.
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.
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
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
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
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
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
Activities are created on update, create and delete actions in Storyblok for resources like stories, components, spaces, datasources and datasource entries.
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
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
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
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
Register for TinaCloud by navigating to the registration page . You can register with either an existing GitHub account or create a new TinaCloud account:
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.
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.
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
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
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.
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
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.
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
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
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.
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
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.
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.
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
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
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.
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.
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
It skips the more complicated process of setting up GitHub mode, while also allowing team members to edit content without needing a GitHub account.
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
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
"changesDescription": "Update Email Subject and Bodies for User invites",
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
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.
Yes
7 products
CloudCannon
Enterprise plan only. Vendor documentation
Checked 1 quote from 1 source
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.
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.
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
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
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
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
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
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
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
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
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
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.
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
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
Multi-factor authentication in CloudCannon uses a third-party authentication app.
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
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
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.
Your provider's
Whatever the sign-in provider enforces.
9 products
ZeroCMS
Tested
Checked
Decap CMS
Vendor documentation
Checked 1 quote from 1 source
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
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
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.
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
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
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.
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.
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
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
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.
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
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.
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
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.
No
2 products
ZeroCMS
Tested
Checked
Pages CMS
Vendor documentation
Checked 3 quotes from 2 sources
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.
GITHUB_APP_NAME GitHub App slug used in GitHub URLs.
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
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
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.
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
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
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
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.
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
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
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
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?
No
4 products
ZeroCMS
Tested and documented
Checked 2 quotes from 1 source
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.
No! Only the individual who sets up the TinaCloud project, linking it to a GitHub repository, requires GitHub.
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
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.
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?
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
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.
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).
(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.
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.
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
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
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.
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.
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
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?
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
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.
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
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
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
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
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
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).
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
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
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
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
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
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 .
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.
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
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.
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.
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
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
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
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
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.
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
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
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
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
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']
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
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.
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
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
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.
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?
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
The CloudCannon CLI manages your organizations, sites, builds, files, and form submissions from the terminal, and can generate CloudCannon configuration files for your site.
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
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
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
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.
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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.
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
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.
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.
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
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.
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.
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.
Netlify Deploy and view history of multiple Netlify sites directly inside your Sanity Studio.
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
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
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
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.
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
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
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
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)
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").
We currently have database adapters for the following database implementations: Vercel KV MongoDB
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
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.
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
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).
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
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
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
Currently, the following services are supported: Neural Machine Translation (NMT) Google: Cloud Translation Large Language Models (LLMs) Anthropic: Claude Haiku 4.5
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
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
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
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
CLI dataset import (NDJSON)
1 product
Sanity
Vendor documentation
Checked 4 quotes from 1 source
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.
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
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.
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.
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.
Nothing
5 products
ZeroCMS
Tested
Checked
CloudCannon
Vendor documentation
Checked 5 quotes from 3 sources
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
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
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.
An agent
A proper agent you can hand tasks to.
2 products
ZeroCMS
Tested and documented
Checked 2 quotes from 1 source
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
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
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
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
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
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
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.
Content and code
Your entries and the site's own code.
1 product
ZeroCMS
Tested and documented
Checked 3 quotes from 2 sources
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
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.
Yes
2 products
ZeroCMS
Tested and documented
Checked 1 quote from 1 source
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.
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?
Reads and writes
An agent can read and write content.
6 products
ZeroCMS
Tested and documented
Checked 3 quotes from 1 source
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
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
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
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
None
6 products
CloudCannon
Vendor documentation
Checked 2 quotes from 2 sources
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.
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
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.
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.
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.
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
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
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
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
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.
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
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.
Yes
4 products
ZeroCMS
Tested and documented
Checked 2 quotes from 2 sources
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
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
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.
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
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
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.
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.
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
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
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.
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
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
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.
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.
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
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.
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.
Yes
2 products
ZeroCMS
Tested and documented
Checked 2 quotes from 2 sources
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.
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
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
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
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.
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
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.
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.
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
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.
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
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.
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.
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
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.
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
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.
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.
Currently, the following services are supported: Neural Machine Translation (NMT) Google: Cloud Translation Large Language Models (LLMs) Anthropic: Claude Haiku 4.5
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.
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
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.
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
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 .
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.
Free
4 products
EmDash
Open source and self-hosted; the cost is your own hosting. Vendor documentation
Checked 2 quotes from 2 sources
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
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.
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
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.
$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
$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
$15–$100/site/month
1 product
ZeroCMS
By design
$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
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.
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
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
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
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
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
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
Strapi AI ✨ Additional credits: +$1.50 per 100 credits - 1,000 credits / month 1,000 credits / month
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
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
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
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
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)
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
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
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
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
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
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
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
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
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.
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.
Editor seats beyond the Cloud free tier's three users
1 product
Keystatic
Vendor documentation
Checked 2 quotes from 1 source
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.
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.
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
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?
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
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
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?
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
Dedicated engineering support Demo of enterprise features, including visual editing and AI Custom solutions to extend Payload Influence over the Payload roadmap
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
Enterprise For custom needs Custom Contact Sales Includes: Includes: Custom Users Custom Roles Enterprise Support No User Limit Variable user pricing Custom Editorial Workflow
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
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
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
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
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
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
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.
Already yours
Committed beside the content.
7 products
ZeroCMS
Tested
Checked
CloudCannon
Vendor documentation
Checked 3 quotes from 3 sources
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.
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
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
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
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.
A community project
1 product
Sveltia CMS
By design
CloudCannon Limited
1 product
CloudCannon
By design
Cloudflare, Inc.
1 product
EmDash
By design
Neatbit Oy
1 product
ZeroCMS
By design
PM, poslovni mediji d.o.o.
1 product
Decap CMS
By design
Payload CMS, Inc.
1 product
Payload CMS
By design
Ronan Berder
1 product
Pages CMS
By design
SSW
1 product
TinaCMS
By design
Sanity
1 product
Sanity
By design
Storyblok GmbH
1 product
Storyblok
By design
Strapi, Inc.
1 product
Strapi
By design
Thinkmill Labs Pty Ltd
1 product
Keystatic
By design
Significant events in the product's history such as changes of ownership or renames.
None
5 products
ZeroCMS
Vendor documentation
Checked 6 quotes from 3 sources
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
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.
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
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.
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
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).
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.
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".
@@ -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".
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 events
1 product
Strapi
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 ↗
Strapi 5 re-architected the content layer around a new document API.
Source ↗
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
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
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.
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
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.
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.
3 events
1 product
Payload CMS
Relicensed from a paid proprietary licence to MIT, and made free.
Source ↗
Payload 3.0 re-architected the product from an Express and React single-page app onto the Next.js App Router.
Source ↗
Payload joined Figma, which committed to keeping the open-source core.
Source ↗
Vendor documentation
Checked 8 quotes from 4 sources
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
This website is operated by PM, poslovni mediji d.o.o., a company registered in Slovenia
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.
United States
4 products
EmDash
By design
Payload CMS
By design
Sanity
By design
Strapi
By design
Australia
2 products
Keystatic
By design
TinaCMS
By design
Austria
1 product
Storyblok
By design
Finland
1 product
ZeroCMS
By design
New Zealand
1 product
CloudCannon
By design
Singapore
1 product
Pages CMS
By design
Slovenia
1 product
Decap CMS
By design
Does not apply
1 product
Sveltia CMS
There is no company behind it. Does not apply
How you reach support.
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
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
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
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
Your questions are our top priority, and our Support Team and engineers are ready to help in a dedicated Slack channel.
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
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
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
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
Uptime SLAs 99.9% server uptime with swift communications
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
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
Email
1 product
ZeroCMS
Vendor documentation
Checked 1 quote from 1 source
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
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
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
USElsewhere
2 products
CloudCannon
CloudCannon's own servers are in California, with access from New Zealand. Vendor documentation
Checked 2 quotes from 1 source
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
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.
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.
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
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 ).
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.
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
Flexible Data Residency Supported by AWS data centers in North America (US & Canada), Europe (Germany), and Australia.
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
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)
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
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
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.
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
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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.
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:
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
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
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
None
6 products
ZeroCMS
Vendor documentation
Checked 5 quotes from 2 sources
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.
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
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
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
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
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
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.
No public repository
3 products
ZeroCMS
By design
CloudCannon
By design
Storyblok
By design
0
1 product
Pages CMS
Read from GitHub
Checked
1,165
1 product
Sanity
Read from GitHub
Checked
164
1 product
TinaCMS
Read from GitHub
Checked
395
1 product
Payload CMS
Read from GitHub
Checked
46
1 product
Keystatic
Read from GitHub
Checked
499
1 product
Strapi
Read from GitHub
Checked
53
1 product
Decap CMS
Read from GitHub
Checked
784
1 product
Sveltia CMS
Read from GitHub
Checked
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.
No public repository
3 products
ZeroCMS
By design
CloudCannon
By design
Storyblok
By design
2026-06-08
1 product
Pages CMS
Read from GitHub
Checked
2026-08-26
1 product
Keystatic
Read from GitHub
Checked
2026-09-10
1 product
Decap CMS
Read from GitHub
Checked
2026-09-14
1 product
TinaCMS
Read from GitHub
Checked
2026-09-15
1 product
EmDash
Read from GitHub
Checked
2026-09-16
1 product
Strapi
Read from GitHub
Checked
2026-09-17
1 product
Sanity
Read from GitHub
Checked
2026-09-18
1 product
Payload CMS
Read from GitHub
Checked
2026-09-19
1 product
Sveltia CMS
Read from GitHub
Checked
Stars on the public repository.
No public repository
3 products
ZeroCMS
By design
CloudCannon
By design
Storyblok
By design
12,426
1 product
EmDash
Read from GitHub
Checked
13,801
1 product
TinaCMS
Read from GitHub
Checked
19,392
1 product
Decap CMS
Read from GitHub
Checked
2,400
1 product
Keystatic
Read from GitHub
Checked
2,855
1 product
Sveltia CMS
Read from GitHub
Checked
4,010
1 product
Pages CMS
Read from GitHub
Checked
44,851
1 product
Payload CMS
Read from GitHub
Checked
6,323
1 product
Sanity
Read from GitHub
Checked
73,205
1 product
Strapi
Read from GitHub
Checked
Open issues on the public repository.
No public repository
3 products
ZeroCMS
By design
CloudCannon
By design
Storyblok
By design
1,167
1 product
Payload CMS
Read from GitHub
Checked
185
1 product
Keystatic
Read from GitHub
Checked
218
1 product
Sanity
Read from GitHub
Checked
300
1 product
EmDash
Read from GitHub
Checked
464
1 product
TinaCMS
Read from GitHub
Checked
47
1 product
Sveltia CMS
Read from GitHub
Checked
556
1 product
Strapi
Read from GitHub
Checked
596
1 product
Decap CMS
Read from GitHub
Checked
70
1 product
Pages CMS
Read from GitHub
Checked
Weekly downloads of the product's npm package.
No public repository
3 products
ZeroCMS
By design
CloudCannon
By design
Storyblok
By design
13,111
1 product
Decap CMS
Read from GitHub
Checked
146,273
1 product
Strapi
Read from GitHub
Checked
15,798
1 product
Sveltia CMS
Read from GitHub
Checked
24,521
1 product
EmDash
Read from GitHub
Checked
44,046
1 product
TinaCMS
Read from GitHub
Checked
582,150
1 product
Payload CMS
Read from GitHub
Checked
696,452
1 product
Sanity
Read from GitHub
Checked
94,787
1 product
Keystatic
Read from GitHub
Checked
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.
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
Maintenance mode
Alive, but not moving by either measure.
1 product
Pages CMS
Our judgement
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