Best Node.js CMS: Payload vs Strapi vs Directus vs KeystoneJS vs Ghost vs ApostropheCMS

Published on by

Execudea

The best Node.js CMS for most new projects is Payload CMS: it is open source, written in TypeScript, configured in code and runs natively inside Next.js. Strapi is the best choice if you want to build content types visually in an admin panel. Directus fits teams with an existing SQL database. KeystoneJS suits GraphQL-first, schema-driven apps. Ghost is the best Node.js CMS for blogs, newsletters and memberships. ApostropheCMS is the pick when editors need in-context, on-page editing. Here is how they compare and how to choose.

What Is a Node.js CMS?

A Node.js CMS is a content management system whose backend runs on Node.js, so you write configuration, hooks and custom logic in JavaScript or TypeScript, the same language as your frontend. Most modern Node.js CMSs are headless: they manage content and expose it through REST or GraphQL APIs, while your website or app (often React or Next.js) handles presentation.

Why teams choose a Node.js CMS:

  • One language across the stack: JavaScript or TypeScript for CMS, API and frontend.
  • Modern frontend integration: natural fit with React, Next.js, Vue and mobile apps.
  • Fast APIs: Node.js handles many concurrent API requests efficiently.
  • The npm ecosystem: integrations for payments, email, search and storage are a package away.

Node.js CMS Comparison

CMSTypeConfigurationDatabasesLicenseBest for
Payload CMSHeadless, Next.js-nativeCode (TypeScript)PostgreSQL, MongoDB, SQLiteMITCustom websites, SaaS, web apps
StrapiHeadlessAdmin UI content-type builder + codePostgreSQL, MySQL, MariaDB, SQLiteOpen-source community editionTeams wanting visual content modeling
DirectusHeadless data platformAdmin UI over your SQL databasePostgreSQL, MySQL, SQLite and moreSource-available (BSL)Existing databases, internal tools
KeystoneJSHeadless, GraphQL-firstCode (TypeScript schema)PostgreSQL, MySQL, SQLiteMITSchema-driven GraphQL applications
GhostPublishing platform (headless-capable)Admin UI and themesMySQL (production)MITBlogs, newsletters, paid memberships
ApostropheCMSFull-stack, in-context editingCode + on-page editingMongoDBMITMarketing sites with editor-friendly page building

1. Payload CMS

Payload is a code-first headless CMS built with TypeScript. Since version 3 it installs directly into a Next.js application, so the admin panel, APIs and your frontend live in one codebase and one deployment. Collections, fields, access control and hooks are all defined in TypeScript, and Payload generates types for your frontend automatically.

Strengths: full type safety; REST, GraphQL and a Local API with no HTTP overhead; field-level access control; versions and drafts; official plugins for SEO, redirects, forms, search, storage and multi-tenancy.

Trade-offs: developer-first, so content types are created in code rather than by clicking in an admin panel.

New to Payload? Start with our complete guide to Payload CMS, then see how it handles complex relational content.

2. Strapi

Strapi is one of the most widely used open-source Node.js headless CMSs. Its Content-Type Builder lets you create content models in the admin panel, and it generates REST and GraphQL APIs for them.

Strengths: visual content modeling, large community and plugin marketplace, self-hosted or managed through Strapi Cloud.

Trade-offs: schema changes made in the admin need to be kept in sync across environments; advanced customization requires learning Strapi's own extension patterns; some features sit in paid plans.

3. Directus

Directus is a Node.js data platform that sits on top of any SQL database and instantly provides an admin app plus REST and GraphQL APIs. It does not force its own schema, so it works well on databases that already exist.

Strengths: works with existing databases, powerful role and permission filters, automation flows, good for internal tools and data-heavy apps.

Trade-offs: licensed under the Business Source License, which requires a commercial license for larger organizations, so review the current terms before committing.

4. KeystoneJS

KeystoneJS is a TypeScript, schema-driven CMS and application framework. You define lists and fields in code, and Keystone generates a GraphQL API and an admin UI, using Prisma under the hood for database access.

Strengths: clean schema definitions, strong GraphQL API, good fit for application backends.

Trade-offs: smaller ecosystem than Payload or Strapi; check recent release activity before choosing it for a long-term project.

5. Ghost

Ghost is a Node.js publishing platform focused on blogs, newsletters and paid memberships. It can render sites with its own themes or serve content headlessly through its Content API.

Strengths: excellent writing experience, built-in newsletters, memberships and subscriptions, strong SEO defaults, managed hosting available through Ghost(Pro).

Trade-offs: built for publishing; it is not designed for custom content models, complex relationships or application backends.

6. ApostropheCMS

ApostropheCMS is a full-stack Node.js CMS built around in-context editing: editors change content directly on the page they are viewing, using reusable widgets and areas. It can also run headless.

Strengths: very editor-friendly page building, good for marketing teams that update pages often.

Trade-offs: MongoDB only; smaller community than the most popular headless options.

Which Node.js CMS Should You Choose?

  • Custom website, SaaS product or web app with Next.js: Payload CMS.
  • Want to create content types without writing code: Strapi.
  • Need an API and admin on top of an existing SQL database: Directus.
  • GraphQL-first application backend: KeystoneJS or Payload.
  • Blog, newsletter or membership publication: Ghost.
  • Marketing team that wants to edit directly on the page: ApostropheCMS.
  • Many sites or clients from one install: see our multi-tenant CMS comparison.

Should You Build Your Own CMS with Node.js?

Building a basic CMS with Node.js, Express and a database looks simple: a few models, a login page and some CRUD routes. In practice, a production CMS also needs role-based permissions, field validation, media uploads and image resizing, drafts and version history, rich text editing, relationships between content, search, an admin interface editors actually like, and a secure API. That is months of work before you write any business-specific features.

A better approach for most teams is to use a code-first Node.js CMS as a framework. With Payload, a content type is a few lines of TypeScript, and you get the admin panel, authentication, APIs, versions and access control for free:

import type { CollectionConfig } from 'payload'

export const Articles: CollectionConfig = {
  slug: 'articles',
  admin: { useAsTitle: 'title' },
  versions: { drafts: true },
  access: {
    read: () => true,
    create: ({ req: { user } }) => Boolean(user),
  },
  fields: [
    { name: 'title', type: 'text', required: true },
    { name: 'slug', type: 'text', required: true, unique: true, index: true },
    { name: 'content', type: 'richText' },
    { name: 'cover', type: 'upload', relationTo: 'media' },
    { name: 'category', type: 'relationship', relationTo: 'categories' },
  ],
}

Build from scratch only when your "CMS" is really a narrow internal tool with a handful of screens, or when you have requirements no existing CMS can meet.

Performance and Hosting

Any of these CMSs can be fast if pages are statically generated and served from a CDN, so most visitor traffic never reaches the CMS. Typical hosting is a Docker container on DigitalOcean, AWS or a platform like Vercel or Railway, with a managed database and object storage for media. For a deeper look, read how Payload CMS scales for high-traffic applications.

Need Help Choosing or Building?

Execudea builds websites and web applications on Node.js CMSs, with Payload CMS as one of our core services. If you're choosing a CMS for a new project or migrating from WordPress or Drupal, talk to our Payload CMS development team, or read how to hire a Payload CMS developer if you're building in-house.

Frequently Asked Questions

What is the best Node.js CMS?

For most new websites and web apps, Payload CMS is the strongest Node.js CMS because it is open source, TypeScript-first, configured in code and runs natively inside Next.js. Strapi is a good alternative if you prefer building content types in an admin UI, and Ghost is best for blogs and newsletters.

Is there a free, open-source Node.js CMS?

Yes. Payload CMS, Strapi, KeystoneJS, Ghost and ApostropheCMS are open source. Directus is source-available under the Business Source License, which is free for smaller organizations.

Should I build my own CMS with Node.js?

You can, but a production CMS needs permissions, media handling, drafts, versions, rich text and an admin UI, which takes months to build well. Using a code-first Node.js CMS like Payload as a framework gives you all of that and lets you focus on your own features.

What is the difference between Payload CMS and Strapi?

Payload is configured entirely in TypeScript code and runs inside Next.js, which suits developers who want version-controlled schemas and type safety. Strapi lets you build content types visually in its admin panel, which suits teams that prefer a UI-driven workflow.

Is a Node.js CMS headless?

Most modern Node.js CMSs are headless, delivering content through APIs. Ghost and ApostropheCMS can render pages themselves but also offer headless APIs.