KeystoneJS and TinaCMS are both open-source headless CMS options for developers, but they store and edit content very differently. KeystoneJS (MIT-licensed,…
Best for KeystoneJS: KeystoneJS suits developers building data-driven applications who want a database-backed GraphQL API and auto-generated admin UI, with zero licensing cost regardless of team size.
Best for TinaCMS: TinaCMS suits teams publishing Markdown/MDX content via static site generators like Next.js, Astro, Hugo, or Jekyll who want non-technical editors to make visual, in-context edits that commit directly to Git.
At a Glance
KeystoneJS
TinaCMS
Primary category
CMS
CMS
Rating
Not documented
Not documented
Pricing model
Open Source
freemium
Starting price
Free
Free (self-hosted); TinaCloud from $24/month
Free plan
Not documented
Yes
Free trial
Not documented
Not documented
Platforms
Web
Web
Team collaboration
Not documented
Not documented
AI features
Not documented
Not documented
Public API
Yes
Yes
Key Differences
Content Storage Model
KeystoneJS: KeystoneJS persists content in a database, with schema migrations handled automatically via Prisma.
TinaCMS: TinaCMS stores content directly in a Git repository as Markdown, MDX, JSON, or YAML, preserving full version history.
KeystoneJS: KeystoneJS auto-generates a customizable admin UI with a rich text WYSIWYG editor from your schema.
TinaCMS: TinaCMS offers visual, in-context editing where authors edit live pages directly, with changes synced back to Git.
In-context editing lets non-technical authors see exactly what they're publishing as they edit.
Pricing Model
KeystoneJS: KeystoneJS is entirely free and open source under MIT, with no pricing plans at all.
TinaCMS: TinaCMS is freemium: Tina Cloud is free for 2 users, then Team is $24/month, Team Plus (with editorial workflow) is $41/month, Business is $249/month, and Enterprise is custom.
Total cost scales differently as a team grows past the free tier.
Auto-Generated API
KeystoneJS: KeystoneJS generates a full GraphQL API with pagination, sorting, filtering, and CRUD operations from your schema.
TinaCMS: TinaCMS auto-generates a GraphQL API that lets any frontend query and mutate Git-backed content.
Both offer schema-driven GraphQL, but query against different underlying stores (database vs. Git files).
Maintainer & Governance
KeystoneJS: KeystoneJS is maintained by Thinkmill, an Australian consultancy, since the project's first commit in 2013, with 250+ contributors.
TinaCMS: TinaCMS was originally launched by Forestry.io and has been maintained by SSW, an Australian software consultancy, since SSW acquired the project in 2024.
Project maintainership affects long-term update cadence and roadmap direction.
Feature-by-Feature
Content Model & Editing
Feature
KeystoneJS
TinaCMS
Content storage backend
Available
Available
Visual, in-context editing
Unavailable
Available
Auto-generated admin UI
Available
Not documented
Full version history via Git
Not documented
Available
API & Developer Experience
Feature
KeystoneJS
TinaCMS
Auto-generated GraphQL API
Available
Available
Self-hostable backend without vendor cloud
Available
Available
Documented framework integrations
Not documented
Available
Field/operation-level access control
Available
Available
Pricing & Support
Feature
KeystoneJS
TinaCMS
Free tier / free to use
Available
Available
Paid editorial workflow
Not documented
Available
Custom Enterprise support
Available
Available
Pricing Compared
Starting price reflects the lowest paid tier, not the full cost for every team size or usage level.
KeystoneJS
Open Source — Free N/A
TinaCMS
Free — $0 forever
Team — $24/month monthly (or $290/year)
Team Plus — $41/month monthly (or $490/year)
Business — $249/month monthly (or $2,990/year)
Enterprise — Custom contact sales
Pros & Cons
KeystoneJS
Pros
Completely free, open-source, self-hosted with no licensing fees
GraphQL API and admin UI generated automatically from schema
Strong TypeScript support and Prisma-based migrations
Fine-grained, code-defined access control
Backed by an experienced consultancy (Thinkmill) with enterprise delivery history
Cons
No official managed hosting offering from the Keystone project
Requires Node.js and database operational expertise to self-host
Smaller ecosystem and plugin marketplace than Strapi or WordPress
GraphQL-first design has a learning curve for teams used to REST
Migration from older Keystone (v5/Express/MongoDB) versions requires significant rework
TinaCMS
Pros
Content stays in the team's own Git repository rather than a proprietary vendor database, avoiding lock-in
Free self-hosted option with no user limits for teams comfortable managing their own infrastructure
Strong fit for JAMstack and static-site workflows already using Next.js or Gatsby
Editorial workflow and role-based access make it viable for larger content teams via TinaCloud
Cons
Primarily built for React-based frameworks, so it is a weaker fit for non-React stacks
Requires developer setup to define the content schema before non-technical editors can use it
Free TinaCloud tier is capped at two users, so most real teams need a paid plan
Git-based content model has a learning curve for editors unfamiliar with version control concepts
Recent ownership change following the SSW acquisition introduces some uncertainty about the open-source project's long-term roadmap
Use Cases
Choose KeystoneJS: KeystoneJS suits developers building data-driven applications who want a database-backed GraphQL API and auto-generated admin UI, with zero licensing cost regardless of team size.
Choose TinaCMS: TinaCMS suits teams publishing Markdown/MDX content via static site generators like Next.js, Astro, Hugo, or Jekyll who want non-technical editors to make visual, in-context edits that commit directly to Git.
Need both: There's no typical scenario for combining them on one project since both are alternative headless CMS backends for the same content layer. A larger organization might run KeystoneJS for an internal data-driven app and TinaCMS for its Git-based marketing blog, but that's operating two separate systems rather than integrating them.
KeystoneJS
Custom application backends — Development teams use KeystoneJS to build backends for web and mobile applications with a generated GraphQL API.
Content-driven websites — Teams build static and dynamic marketing sites and blogs powered by Keystone's content model and admin UI.
Multi-channel content distribution — Organizations use Keystone's GraphQL API to distribute content across web, mobile and other channels from one source.
TinaCMS
JAMstack marketing sites with a Git-based workflow — Development teams building marketing or documentation sites on Next.js or Gatsby use TinaCMS to let content editors update copy without needing to write Markdown by hand or use a separate database-backed CMS.
Documentation sites with reviewable content changes — Teams maintaining developer documentation use TinaCMS's Git-backed storage so content edits go through the same pull-request review process as code changes.
Agencies building client-editable static sites — Agencies use TinaCMS and TinaCloud to hand off statically generated sites to clients who need to edit copy and images themselves without touching code or a GitHub account.
Frequently Asked Questions
How does content storage differ between KeystoneJS and TinaCMS?
KeystoneJS stores content in a database, with migrations handled automatically via Prisma. TinaCMS stores content directly in your Git repository as Markdown, MDX, JSON, or YAML, giving full version history.
Is KeystoneJS free while TinaCMS is not?
KeystoneJS is entirely free under the MIT license with no pricing plans. TinaCMS is freemium: Tina Cloud is free for 2 users, with paid Team plans starting at $24/month for more users and features.
Which offers visual, in-context editing?
TinaCMS offers visual, in-context editing where authors edit live pages with changes synced to Git. KeystoneJS instead provides an auto-generated, form-based admin UI with a rich text editor.
Do both generate a GraphQL API automatically?
Yes. Both KeystoneJS and TinaCMS auto-generate a GraphQL API from your schema or content structure, though they query different underlying stores (database vs. Git).
Who maintains each project today?
KeystoneJS is maintained by Thinkmill, an Australian consultancy, since 2013. TinaCMS was originally built by Forestry.io and has been maintained by SSW, another Australian software consultancy, since SSW acquired the project in 2024.
Can either be self-hosted without paying for a cloud service?
Yes. KeystoneJS is fully self-hostable under its MIT license. TinaCMS's Apache-2.0 backend can also be self-hosted on any Express-compatible platform as an alternative to the hosted Tina Cloud service.