Ghost
Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.
Ghost is an open source, headless Node.js CMS built for professional publishers, independent creators, and media businesses who want to own their audience and revenue without relying on algorithmic platforms. It bundles a modern content editor, a built-in newsletter engine, and native membership subscriptions into a single cohesive platform, removing the need to stitch together WordPress, Mailchimp, and Stripe separately.
The platform exposes content through a REST Content API and GraphQL, making it straightforward to connect any frontend framework or static site generator. Ghost deploys via a CLI that handles Node.js, MySQL, Nginx, and Let’s Encrypt SSL in a single command on Ubuntu servers, or spins up locally in under a minute. An active Nx-managed monorepo with hundreds of contributors ships weekly releases and maintains a weekly cadence of versioned updates.
Ghost’s architecture centers on independent creator economics. Writers can offer free and paid membership tiers, gate posts behind paywalls, send segmented email newsletters, and track engagement through native analytics—without giving a revenue cut to any intermediary. The Koenig Lexical editor supports rich interactive cards including polls, member sign-up prompts, and embedded media, all without plugins.
A distinctive direction in recent versions is deep Fediverse integration via ActivityPub, allowing Ghost publications to act as decentralized actors that can be followed from Mastodon and other ActivityPub-compatible clients. This makes Ghost one of the few production CMS platforms with genuine open-web interoperability built into its core.
What You Get
- Headless Content API (REST + GraphQL) - Expose all posts, pages, tags, authors, and tiers through a fully documented REST Content API and an optional GraphQL layer, enabling decoupled frontends with any JavaScript framework or static site generator.
- Built-in Newsletter Engine with Segmentation - Send HTML email newsletters directly from the admin dashboard with audience segmentation by free/paid tier, scheduled delivery, and open-rate tracking—no Mailchimp account required.
- Native Membership & Paid Subscription Tiers - Create free, monthly, and annual paid tiers backed by Stripe billing, automated welcome flows, member portals, and configurable content visibility per tier.
- Koenig Lexical Editor with Extensible Cards - A distraction-free block editor supporting image galleries, video, audio, downloadable files, accordions, bookmarks, polls, and member sign-up prompts as first-class interactive content blocks without plugins.
- Native Analytics Without Third Parties - Track page views, reader engagement, popular posts, member growth, and email open rates from within the Ghost admin without Google Analytics or external tracking scripts.
- ActivityPub Fediverse Integration - Publish posts that are automatically readable and followable from Mastodon and any ActivityPub-compatible client, enabling native decentralized content distribution as a built-in platform feature.
- Ghost CLI for Automated Server Deployment - Install and configure Ghost, MySQL, Nginx, and Let’s Encrypt SSL on Ubuntu in a single command, with built-in update, rollback, and log management subcommands.
- Handlebars Theme System with Full Customization - Build or install custom themes using a Handlebars template language with documented helpers, CSS variables, and a live theme upload and activation flow through the admin.
Common Use Cases
- Independent newsletter with paid subscriptions - A journalist or analyst publishes weekly research behind a paywall, uses Ghost’s built-in Stripe integration to collect monthly subscriptions, and sends newsletters to free and paid segments with different visibility, all without a separate email tool.
- Independent media publication - A small newsroom runs its editorial workflow on Ghost, publishing long-form articles with rich media embeds, growing a free email list, and converting engaged readers to paid supporters through tiered membership offers.
- Developer documentation or technical blog - A software company uses Ghost’s Content API to power a headless docs site or blog with a custom Next.js or Astro frontend while managing content through Ghost’s admin, leveraging webhooks to trigger static rebuilds on publish.
- Community-driven creator publication with Fediverse reach - A creator builds a Ghost publication, enables ActivityPub so followers on Mastodon can subscribe directly, and grows an audience across the open social web without depending on any single platform algorithm.
Under The Hood
Architecture Ghost is structured as an Nx-managed monorepo with clear separation between the core Node.js backend, a set of independently deployable React apps for admin UI and embeds, and a Handlebars-based frontend rendering layer. The server layer follows a strict layered pattern: API endpoints delegate to service instances, which orchestrate domain models backed by Bookshelf.js ORM and Knex.js query builder. Dependency injection via constructor-based service composition keeps components testable and replaceable. An explicit boot sequence manages initialization order across database, URL service, frontend router, and admin — making startup observable and debuggable. Storage adapters, email transports, and analytics integrations are all configuration-driven, allowing swappable implementations without touching core logic.
Tech Stack The backend runs on Node.js 22 with Express for HTTP routing and Knex.js with Bookshelf.js as the ORM layer against MySQL or SQLite. The admin interface is split between a legacy Ember.js app and a modern React application using TanStack Query, Radix UI, and a dedicated Storybook-driven design system called Shade. Apps for comments, search, member portal, and ActivityPub are independent React bundles with their own Vite build pipelines. The Koenig editor is built on the Lexical editor framework. Testing uses Vitest for unit and integration suites alongside Mocha for legacy e2e tests, with Playwright covering browser automation. Infrastructure for local development uses Docker Compose orchestrating MySQL, MinIO for object storage, Tinybird for analytics, Redis, and Mailpit for email testing.
Code Quality Ghost maintains extensive multi-level test coverage through unit tests in Vitest, integration database tests, and end-to-end API suites in both Vitest and Mocha. Core error handling uses a dedicated errors package with typed error classes and structured error contexts, making failure modes predictable and debuggable. TypeScript adoption is progressing through the codebase alongside existing JavaScript, with strong JSDoc annotations on public interfaces. Nx enforces module boundaries so accidental cross-layer imports are caught at build time. GitHub Actions CI runs the full suite on every PR with matrix testing across database backends. ADRs in the repository document architectural decisions for long-term traceability.
What Makes It Unique Ghost is one of very few production CMS platforms to implement ActivityPub as a native feature rather than a plugin, allowing any Ghost publication to be followed from Mastodon or other Fediverse clients. The Ghost Explore service provides cross-instance content discovery, creating a lightweight federated publishing network. The Koenig Lexical editor card system is designed for extensibility at the architecture level, with each content block as a first-class registered type. Membership economics are wired directly into the content visibility model — free versus paid content gating is a core API concept, not an afterthought. Ghost(Pro) managed hosting funds the open source project directly through a revenue-sharing model with the Ghost Foundation, aligning commercial sustainability with open source health.
Self-Hosting
Ghost is released under the MIT License, which is one of the most permissive open source licenses available. You can use Ghost commercially, modify it, distribute it, and integrate it into proprietary systems without any copyleft obligations. The only requirement is that the copyright notice and license text are retained. There are no open-core restrictions, no “Commons Clause” riders, and no commercial-use limitations embedded in the license — the full codebase as published on GitHub is MIT-licensed.
Running Ghost yourself requires a reasonably capable Ubuntu server (or similar Linux environment) with Node.js 22, MySQL 8 or SQLite, and Nginx as a reverse proxy. The Ghost CLI automates most of this setup, including Let’s Encrypt SSL provisioning, but you remain responsible for ongoing OS patching, database backups, log rotation, MySQL tuning under traffic load, and Ghost version upgrades. Email delivery requires configuring a transactional email provider such as Mailgun, Postmark, or SendGrid — Ghost does not include a built-in SMTP relay. For a newsletter-heavy publication, email deliverability and list hygiene become operational concerns you manage directly. Scaling beyond a single server requires a load balancer, shared file storage (e.g., S3 via the storage adapter), and session-aware routing, which adds meaningful infrastructure complexity.
Ghost(Pro), the official managed hosting service, handles all of this: CDN delivery, automated daily backups, zero-downtime upgrades, managed MySQL, email sending via Mailgun, and priority support with SLAs. Self-hosters give up these guarantees along with direct email support — community support through the Ghost Forum is the primary channel. Ghost(Pro) revenue funds the Ghost Foundation and the open source project, so using the managed service is also a way to sustain the platform financially. For teams evaluating the trade-off, the managed tier is competitive with the cost of a VPS plus the operational time required to maintain a production Ghost instance, making self-hosting most attractive for teams with existing DevOps capacity or specific data-residency requirements.