Open-source alternatives to Contentful: 4 headless CMS tools compared
Replacing a hosted CMS means owning the database, the upgrades and the media files, and on this page only one of the four candidates carries an OSI-approved licence. Directus is the first one to look at if your content already sits in a SQL database, and Payload if your team is already in Next.js and TypeScript.
What Contentful does, and why people look elsewhere
Contentful is a hosted headless CMS: a content model with typed fields, an editing interface, and REST and GraphQL APIs that any frontend reads.
- pricing by seats, records and API bandwidth
- content lives on the vendor's servers
- the content model format is proprietary
The candidates at a glance
| Project | Licence | Maintenance | Language | GitHub stars | Install | Best for |
|---|---|---|---|---|---|---|
| strapi/strapi | Custom licenceCustom licence: read the LICENSE file | Commits in the last six monthsLast push October 9, 2026 | TypeScript | 73,293 | Command documented | A development team that wants to hand an editor a working CMS quickly: define a content type and Strapi generates the REST and GraphQL endpoints plus an admin dashboard, with SQLite, PostgreSQL, MySQL or MariaDB behind it. |
| directus/directus | Custom licenceCustom licence: read the LICENSE file | Commits in the last six monthsLast push October 9, 2026 | TypeScript | 38,406 | See analysis | Teams whose content already lives in a SQL database and who want a Studio, REST and GraphQL endpoints and field-level permissions wrapped around their own schema, without copying data into a new store. |
| payloadcms/payload | MITPermissive: commercial use allowed | Commits in the last six monthsLast push October 2, 2026 | TypeScript | 45,087 | Command documented | Teams already writing TypeScript and Next.js who want the admin panel, the REST and GraphQL layer and the schema in the same repository as the front end, under MIT, with no vendor in the request path. |
| nocobase/nocobase | Custom licenceCustom licence: read the LICENSE file | Commits in the last six monthsLast push September 30, 2026 | TypeScript | 24,449 | See analysis | Teams building internal business systems on a relational database who want a WYSIWYG interface for people and a CLI plus skills for coding agents working on the same system, on MySQL 8, PostgreSQL or SQLite. |
Each alternative in detail
strapi/strapiš Strapi is the leading open-source headless CMS. Itās 100% JavaScript/TypeScript, fully customizable, and developer-first.
- Best for
- A development team that wants to hand an editor a working CMS quickly: define a content type and Strapi generates the REST and GraphQL endpoints plus an admin dashboard, with SQLite, PostgreSQL, MySQL or MariaDB behind it.
- What you give up
- The licence is a custom one GitHub cannot classify, and our analysis of Strapi says the terms for community and enterprise features differ, so a commercial product needs the LICENSE file read before use. Container deployment is on your side: the README states Strapi does not ship official Docker images, so you build your own from your project. Teams that already have a data model in an existing database, or that need strict schema migrations, meet friction in the Content-Type Builder.
- First install step
- Full setup guide
npx @strapi-community/dockerize@latest
directus/directusThe flexible backend for all your projects š° Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.
- Best for
- Teams whose content already lives in a SQL database and who want a Studio, REST and GraphQL endpoints and field-level permissions wrapped around their own schema, without copying data into a new store.
- What you give up
- The licence is MSCL 1.0, a source-available licence derived from the Fair Core License, with a free core tier and an Open Innovation Grant; our analysis of Directus says to check whether your organization falls under the grant thresholds and whether the AI and MCP features you plan to use are in the free tier or behind a commercial license. It is not a permissive OSI licence, and the CMS does not own the schema, so model changes stay your database's problem.
payloadcms/payloadPayload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.
- Best for
- Teams already writing TypeScript and Next.js who want the admin panel, the REST and GraphQL layer and the schema in the same repository as the front end, under MIT, with no vendor in the request path.
- What you give up
- It runs inside your Next.js app, so a team that is not on Next.js is out, and our analysis of Payload says to skip it if you need a CMS a non-developer can extend without touching code, or a library of ready-made plugins for basic needs. The database adapter has to be one of those listed for PAYLOAD_DATABASE in .env.example and your hosting target has to support it. Arriving from v2 means running the 3.0 migration guide.
- First install step
- Full setup guide
npx create-payload-app --example example_name
nocobase/nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.
- Best for
- Teams building internal business systems on a relational database who want a WYSIWYG interface for people and a CLI plus skills for coding agents working on the same system, on MySQL 8, PostgreSQL or SQLite.
- What you give up
- Our analysis of NocoBase says it does not suit teams that want a simple spreadsheet-style database view with no configuration, because the plugin architecture and data-model-driven approach add overhead that only pays off at moderate complexity. Node.js 22 has to be available in the target environment, and the database has to be one of those shown in docker-compose.yml. The licence is a custom one GitHub cannot classify, so read it before you commit.
What a reader searching Sanity or Storyblok is choosing between
Contentful is a hosted headless CMS: a content model with typed fields, an editing interface, and REST and GraphQL APIs that any frontend reads. The reasons people start looking elsewhere are narrow. Pricing is counted by seats, records and API bandwidth. The content sits on the vendor's servers. And the content model format is proprietary, so the shape of your content is written in a form only that platform reads. The same three reasons explain why a reader who searched for Sanity or Storyblok lands on a page like this one, because those products answer the same question from the hosted side.
The four candidates here answer it in four different ways, and the difference is who owns the schema.
Strapi gives you a content type builder and generates the API from it, so the CMS owns the model and the database follows. Directus runs the other way round: it wraps a SQL schema you already have, and the database owns the model. Payload puts the model in code inside a Next.js app, so the repository owns it. NocoBase is a data-model-driven platform with a WYSIWYG interface, aimed at internal business systems rather than a public content API.
Scope is worth stating plainly. This page covers those four and nothing else. It does not cover a documentation generator with a content layer, a page builder aimed at marketing sites, or a hosted-only successor, because none of those is a content-model CMS in the sense above. If you are coming from one of those categories, check for the specific object you need, because what a tool cannot do, such as visual page building, matters here more than the licence.
Which of the four owns the schema
A proprietary content model format is the thing that costs you when you leave, and these four put the model in four different places.
In Strapi the model is a content type you design in the Content-Type Builder, and the README states that every incoming request flows through a layered backend of Routes, Middleware, Controllers and Services. The type is the source of truth and the database follows it. Our analysis of Strapi records the other side of that choice: teams that already have a data model in an existing database, or that need strict schema migrations, find the Content-Type Builder friction rather than help.
In Directus the schema is already there. Its README says REST and GraphQL APIs are generated from your database schema with no configuration required, and the analysis adds field-level permissions that also apply to its MCP server. That is a different distribution of authority: engineers control schema and access, and non-technical teammates work in the Studio against live data. If you would rather the CMS own the schema, the analysis is direct about skipping Directus for that case.
In Payload the schema is TypeScript in your repository, which is why the analysis asks you to confirm your adapter is one of those listed for PAYLOAD_DATABASE in .env.example and that your hosting target supports it. Schema changes arrive as code review rather than as a dialog in a builder.
NocoBase separates data from the interface by design. Its README describes a data-model-driven approach where business data stays in standard relational structures, with usage and configuration modes you switch between in one click. The analysis also records when that design is the wrong one: a team that wants a spreadsheet-style view with no configuration.
Solo, small team, compliance, embedding
Solo. The shortest path to a running editor is Payload's create-payload-app scaffolder, which also ships a website template, or the global NocoBase CLI with its UI initialisation. Both assume a developer is present to hold the process.
Small team. Strapi is the middle path. Our analysis says it fits projects that need content APIs quickly without writing API code by hand while content editors get a visual interface, and its feature list covers what editors ask for first: Media Library, Draft & Publish, internationalization and granular roles and permissions.
Company with compliance needs. The licence is where this page gets uncomfortable. Payload is MIT. The other three are recorded as custom licences GitHub cannot classify, and Directus states its own terms plainly: MSCL 1.0, derived from the Fair Core License, source-available, with a free core tier, an Open Innovation Grant, and a commercial license for organizations above the grant thresholds that use advanced or enterprise features. Our analysis of Directus tells you to settle your own position against those thresholds before you build a plan around the tool. A policy that scans for OSI-approved identifiers leaves one option on this page.
Developer embedding it. Directus and NocoBase are the two built for machine callers. The Directus README lists custom endpoints, hooks, interfaces and modules, plus a native MCP server that any MCP-compatible agent can connect to, governed by the same access policies that apply to the team. NocoBase exposes MCP, HTTP APIs, a CLI and skills, and its README names Claude Code, Cursor, Codex, OpenCode and TRAE as agents it works with. Payload's answer is structural: query your database from server components without going through REST or GraphQL at all.
What self-hosting each one costs
The operational picture differs more than the feature lists do.
Strapi's container story is the awkward one. The README states that Strapi does not ship official Docker images and points to a community CLI tool that generates a Dockerfile and docker-compose.yml tailored to your project, so every environment you build is your own file. Underneath, you choose SQLite, PostgreSQL, MySQL or MariaDB. A managed option exists for teams that would rather not run the Node process themselves.
Directus keeps the database you chose years ago. Its README lists Postgres, MySQL, MariaDB, MS SQL, SQLite, OracleDB and CockroachDB, so the vendor question is already settled. The extra pieces show up in the deployment presets: the one-click Railway path provisions PostgreSQL, Redis and S3-compatible storage, which tells you a production install expects an object store for files and a cache alongside the database. Our analysis of Directus records no install command, so the setup path comes from its documentation.
Payload moves less of your own infrastructure if you let it, and more if you do not. The one-click paths in its README are explicit about the parts: on Vercel a Next.js front end, a Neon database and Vercel Blob for media, and on Cloudflare Workers, R2 for uploads and D1 for a globally replicated database. Media is a separate service either way.
NocoBase has the plainest prerequisites: Node.js 22 in the target environment, and MySQL 8, PostgreSQL or SQLite as shown in docker-compose.yml. Its release channels deserve a look before you pin a version, since v2.2.10, v2.3.0-beta.9 and v2.4.0-alpha.5 were all published on 2026-09-09 and 2026-09-10.
What editors will ask about on day one
Switching a CMS means answering editor questions, and the answers differ.
Drafts and publishing. Strapi's feature list names Draft & Publish as built in. Payload lists versions and drafts, which keeps prior versions of a page rather than a single boolean.
Rich text and layout. Payload ships a Lexical rich text editor, a block-based layout builder, conditional field logic and a customizable React admin. Strapi's answer is a plugin system and a customizable admin dashboard, so what your editors get depends on what you install.
Localization. Strapi lists internationalization as built in and Payload lists localization among its features, while Directus and NocoBase put the emphasis on the data layer and the Studio rather than on a translation workflow.
AI in the content store. Directus's README describes an AI Assistant embedded in the Studio that creates content, runs translations and takes action, plus a native MCP server for outside agents. NocoBase pushes the same idea into the system itself, describing AI employees with their own roles, field-level read and write permissions, audit logs and workflow integration. If the plan is to let agents write into the content store, that is the gap between a tool that exposes an API and a tool designed around one.
Bottom line
A team that has already decided to move and can live inside a Next.js codebase should start with Payload, the only OSI-approved licence on this page, and check the database adapter list before designing the model. A team whose content already sits in SQL and who does not want to migrate should read the Directus documentation first and settle the licence threshold question before anything else, because that is the one that can end the evaluation. Strapi is the pragmatic middle when editors matter more than schema portability, with the container build on your side. NocoBase fits internal business systems with coding agents in the loop rather than a public content API. Before committing, verify the licence terms against your exact use, build the real content model in each tool you shortlisted, and decide who runs the upgrade when the version behind your app moves on.