v1.9Ready-made Docker images, module access per role and more

The headless CMS
you actually own.

Model content visually, publish with live preview and releases, and deliver it over REST, GraphQL and real-time events. Open source, self-hosted, on Node.js and PostgreSQL.

Star on GitHub
The NodePress entry editor with the live preview pane open next to the form
15
field types, nestable three levels deep
9
admin languages, plus any content locale
434
end-to-end tests against real Postgres
MIT
licensed. No feature gates, ever

One content API · any frontend · starters for Next.js, Astro and Nuxt

Next.jsAstroNuxtSvelteKitRemixReact NativeFlutterVueGatsbyEleventyDenoBunEdge functionsNext.jsAstroNuxtSvelteKitRemixReact NativeFlutterVueGatsbyEleventyDenoBunEdge functions
How it works

From schema to API
in one sitting.

01 — Model

Shape your content in a visual schema editor.

  • 15 field types — text to relations, repeaters, groups and flexible layouts, nested three deep
  • Reusable components, shared choice lists and conditional fields
  • Rename or convert a field and existing entries are migrated with it
Content type editor with fields on the left and the live JSON schema on the right
02 — Edit

Give editors a workspace they enjoy.

  • Drafts, scheduled publishing and releases that ship many entries at once
  • Live preview of your real site, with click-to-edit
  • Every save versioned — compare and restore in a click
Entry editor with status, release and live preview controls
Add to release dialog: publish this entry with the Summer launch release
03 — Deliver

Every content type is an API the moment you save it.

  • REST with filters, sorting, full-text search and cursor paging
  • A typed GraphQL schema that rebuilds as your model changes
  • Webhooks, real-time events and CDN purging when content changes
GET /api/blog/hello-world?populate=author

{
  "id": "8c0f8e6e-5b1a-4a39-9d62-0f3c2b6a1d44",
  "slug": "hello-world",
  "locale": "en",
  "data": {
    "title": "Hello, world",
    "cover": {
      "url": "https://cms.example.com/uploads/sunset.jpg",
      "alt": "Mountains at sunset"
    },
    "author": {
      "slug": "editorial-team",
      "status": "published",
      "data": { "name": "Editorial Team" }
    }
  },
  "updatedAt": "2026-10-26T09:00:00.000Z"
}
Features

Everything a content team needs.
Nothing behind a paywall.

The features other CMSs keep for their enterprise plan come in the box — because the box is yours.

And the rest of the list.

For developers

An API you’d
design yourself.

REST, GraphQL and live events from one schema — with a zero-dependency TypeScript client and types generated from your content model.

import { createClient } from '@nodepress-cms/client';
import type { NodePressContentTypes } from './types/nodepress';

const cms = createClient<NodePressContentTypes>({
  url: 'https://cms.example.com',
});

const { data, meta } = await cms.collection('blog_post').list({
  where: {
    featured: { eq: true },
    author: { slug: { eq: 'jane' } },
  },
  sort: 'createdAt:desc',
  populate: ['author'],
  locale: 'fr',
  fallback: true,
});

const cover = cms.imageUrl(data[0]?.data.cover, { w: 800 });
FAQ

Questions, answered.

What is NodePress?

NodePress is an open-source, self-hosted headless CMS. You model content in a visual editor, publish it with drafts, live preview, scheduling and releases, and deliver it to any website or app over REST, GraphQL, real-time events and webhooks. It runs on Node.js and PostgreSQL and is MIT licensed.

Is NodePress a Node.js CMS?

Yes. NodePress is TypeScript from end to end: the API is built with NestJS and Prisma on PostgreSQL, and the admin with Next.js. You extend it with plugins written as NestJS modules, and read content with the typed @nodepress-cms/client package or any HTTP client.

Can I move my WordPress site to NodePress?

Yes. The WordPress importer reads the export file from Tools → Export and brings over posts, pages and custom post types, with optional media, authors and comments. ACF field groups become real NodePress fields — flexible content, repeaters, groups, options pages — with their values. You review a summary before anything is written, scheduled posts keep their publish time, and the import runs in the background.

Is NodePress like WordPress?

NodePress takes ideas from WordPress with ACF — flexible content, repeaters, plugins — and from Strapi, where content types and their APIs are generated for you. It is a headless CMS: it stores and serves your content, and you build the website or app with the frontend of your choice.

Is NodePress free?

Yes. NodePress is open source under the MIT license, with every feature included: no paid tier, no feature gates and no usage limits. You host it yourself, so you only pay for your own server or platform.

Which frontends work with NodePress?

Any frontend that can make an HTTP request: Next.js, Astro, Nuxt, SvelteKit, Remix, mobile apps and more. There are starter projects for Next.js, Astro and Nuxt, live preview for your own site, and a CLI that generates TypeScript types from your content model.

Where can I host NodePress?

On your own Linux server, with a one-command installer that uses ready-made Docker images and sets up HTTPS, or from the server zip without Docker — unzip it, start it with Node.js and finish the setup in your browser, which also works on cPanel hosting with Node.js support. It also runs on platforms such as Railway and DigitalOcean App Platform. You need Node.js and a PostgreSQL database, local or hosted.

Which database does NodePress use?

PostgreSQL. Search uses PostgreSQL's full-text index out of the box, with Meilisearch as an option. NodePress does not run on MySQL or MongoDB.

Does NodePress have a GraphQL API?

Yes. Every content type gets typed GraphQL queries next to its REST endpoints, both generated from your content model and updated when you change it. Relations can be resolved in the same request.

Does NodePress support multiple languages?

Yes, in two ways: content can be written in any number of languages, linked as translations with a fallback to the default language, and the admin itself is available in 9 languages.

Own your content.
Start in minutes.

Free and MIT licensed — fork it, change it, ship it. One command gives you the API, the admin and a database ready to model.

Read the quick start