mrkeyoor.com_
Tue 01 Sept 16:19 UTC
Webevaluationupdated 25 Aug 2026

Ghost review

Ghost is a Node.js publishing system for running a website, editing posts, managing members, selling subscriptions, and sending newsletters. It gives an independent publication a focused alternative to assembling a CMS, membership database, checkout, and email workflow from separate products.

+34stars / 7d
Verdict

Ghost is the best fit when the publication itself is the product and members, email, and subscriptions should share one editorial system. The managed service is the sensible choice for most small teams; self-hosting pays off when server control and code access justify ongoing operations. Do not choose it expecting provider-neutral newsletters or horizontal application scaling.

We ran it

Lab card: what happened when we ran GhostScreenshot of Ghost (ghost.org)
Install✓ · 131s4162 packages · 1712 MB
Build✓ · 68s
Tests✗ · 97s276 passed · 0 failed of 276 (vitest)
Repo8695 files~958,395 lines of source · 75.2 MB · 21 CI workflows

Answers from our run

Does Ghost build from source?

Dependencies installed in 131 seconds (4162 packages), and the build succeeded in 68 seconds. We cloned commit 81292b0 into a clean Debian container with 3 CPUs and no project-specific setup.

Do Ghost's tests pass?

Yes: 276 of 276 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use Ghost?

Self-hosters who require another provider for Ghost's built-in newsletters: bulk delivery currently supports only the Mailgun API.

What are the alternatives to Ghost?

WordPress, Strapi, WriteFreely. Ghost is the best fit when the publication itself is the product and members, email, and subscriptions should share one editorial system.

Setup3/5CLI helps, but production still needs MySQL, mail, DNS, and upkeep
Docs5/5Clear install, hosting, API, theme, update, and codebase guides
Community5/5Frequent releases and current issue and pull-request activity
Maturity5/5Established publishing product with active weekly shipping

Discussed on

  1. hnGhost: The Future of Blogging (Node.js)118 points
  2. hnGhost: Just a Blogging Platform105 points
  3. hnGhost Blogging Platform47 points
  4. hnTea.xyz causes a flood of spam pull requests to open source projects46 points
  5. hnGhost: A beautiful, Open Source, markdown blogging platform in JavaScript5 points

Who it’s for

Independent publications that want articles, newsletters, members, and paid subscriptions in one system.
Editorial teams that value a focused writing and publishing interface over a general site builder.
Developers building custom themes or headless frontends against documented content and admin APIs.
Technical teams comfortable operating Ghost's supported Node, MySQL, proxy, and process-manager stack.

Who it’s NOT for

Self-hosters who require another provider for Ghost's built-in newsletters: bulk delivery currently supports only the Mailgun API.
Platforms that need application clustering or database sharding: Ghost's hosting guide explicitly says neither is supported.
Teams expecting every Ghost 6 service in the established CLI install: self-hosted analytics and a private ActivityPub service require the newer Docker Compose preview.
Organizations that cannot keep a public Node and MySQL stack patched, backed up, monitored, and recoverable.
Sites whose main requirement is a large plug-in marketplace or arbitrary page-builder behavior rather than publication workflows.

Setup reality

At commit 81292b0, our fresh Node 22 sandbox installed 4,162 packages in 131 seconds and used 1,712 MB. The build succeeded in 68 seconds. The test command exited 1 after 97 seconds even though Vitest reported 276 passed and 0 failed; the tail only showed Nx task statistics followed by ELIFECYCLE Test failed.

A normal production install does not require developing the monorepo. Ghost's supported CLI stack needs an Ubuntu LTS server, Node 22, MySQL 8, Nginx, systemd, at least 1 GB RAM, a domain, DNS, and a non-root user. Newsletters need Mailgun, payments use Stripe, and transactional messages need mail configuration.

The checkout had 8,695 files, about 958,395 source lines, 21 CI workflows, and pnpm workspaces. It had no root Dockerfile or top-level tests directory. Ghost also offers a Docker Compose preview for Caddy, MySQL, analytics, and ActivityPub services.

Publishing is the organizing idea

Ghost is built around the work of an independent publication. Writers create posts in its editor, staff manage a site in Ghost Admin, readers can become members, paid tiers connect through Stripe, and posts can be sent as newsletters. Themes render the hosted site, while the Content API lets a team build a separate frontend. The Admin API covers programmatic publishing and management.

This focus makes Ghost easier to reason about than a general CMS assembled from plug-ins. Membership records, newsletter preferences, subscription state, post delivery, and engagement data belong to the same application. The current database guide shows how much machinery sits underneath that simple interface: a newsletter send has separate email, batch, recipient, and failure records, while Stripe data is cached alongside Ghost's own subscription model.

The opinionated shape is also a limit. Ghost is good at sites whose main unit is published content and whose business model involves readers. A corporate portal with many custom record types, approval trees, and application screens may fit a headless content platform better. A marketing site built mostly from visual landing pages may benefit more from a page builder.

The product covers more than posts

Membership is native rather than an add-on. A publication can offer free, complimentary, and paid access, organize readers with labels and custom fields, and send to selected segments. Stripe handles paid subscriptions. Ghost charges no added payment-processing percentage, although Stripe's own fees still apply. Portal supplies the reader-facing account and checkout interface.

Newsletter delivery is tightly integrated with publishing, but provider choice is narrow. Transactional mail can use standard SMTP. Bulk newsletters use a provider API, and Ghost currently supports only Mailgun for that built-in path. The official FAQ says other newsletter services can still be used through integrations or member synchronization, but that means leaving Ghost's native delivery workflow. Teams with an existing SendGrid or Amazon SES contract should decide whether that split is acceptable before migrating readers.

Themes use Handlebars and a documented helper layer. Developers can also treat Ghost as a headless CMS and fetch published content through the Content API. This flexibility is useful when the editorial team wants Ghost Admin but the public site needs a custom framework. It also creates two systems to deploy and debug, so headless mode should solve a real design or integration need.

Self-hosting follows a narrow path

The supported Ghost-CLI production stack is specific: Ubuntu 22.04, 24.04, or 26.04 LTS, Node.js 22, MySQL 8.0 or 8.4, Nginx, systemd, at least 1 GB of memory, a domain, and a non-root user. DNS must point at the server before the installer can configure a Let's Encrypt certificate. The CLI then creates database access, Nginx configuration, SSL, and a systemd service through an interactive install.

That is a good installer for people who understand the parts it configures. It is not an escape from server administration. Someone still owns operating-system patches, Ghost updates, MySQL backups, certificate checks, mail reputation, storage, monitoring, and recovery drills. The hosting guide says clustering and sharding are unsupported. Scale should come from a CDN and cache in front of one Ghost application, which is a clear architecture but unsuitable for teams that require active-active application nodes.

Ghost 6 adds another split. The established CLI installation can use Ghost's hosted ActivityPub service within stated limits, but it does not support the new web analytics feature. Fully self-hosting ActivityPub or using self-hosted analytics requires the Docker Compose installation, which Ghost labels preview. That stack runs Ghost with Caddy and MySQL, and optional profiles add more services. Analytics also requires a Tinybird account and tokens, so it is not entirely contained on your server.

What happened when we ran it

We cloned commit 81292b0 into a fresh unprivileged node:22-bookworm container with three CPUs, 8 GB of RAM, and no secrets. The checkout contained 8,695 files, about 958,395 lines of source, and occupied 75.2 MB. It is a pnpm workspace monorepo with 21 CI workflow files, no root Dockerfile, and no top-level tests directory.

Installation succeeded in 131 seconds. It installed 4,162 packages and expanded to 1,712 MB on disk. The build then completed successfully in 68 seconds. The test command ran for 97 seconds and exited with status 1, even though Vitest's parsed result said all 276 tests passed and none failed.

The log tail did not name a failing assertion. It printed Nx task statistics, including cached tasks and a 54.2-second ghost:test critical path, then ended with [ELIFECYCLE] Test failed. See above for more details. We can say the overall command failed while the reported Vitest cases passed. We cannot infer the missing failure from those last lines, and we did not turn the contradiction into a guessed cause.

Current maintenance and product risk

The repository's last push was August 25, 2026. Release 6.59.0 shipped on August 19 with fixes for older MySQL migrations, theme navigation markup, newsletter filters, donation checkout translations, and header-card assets. GitHub listed 138 open issues and pull requests together; an issue-only search returned 31. Recent reports cover SQLite email analytics, mobile editor links, accessible labels in Portal, and a newsletter left pending after a crash before job scheduling.

That pace is healthy for a large application, while the open reports matter because Ghost spans money, email, content, and reader identity. Test upgrades against a copy of production data, retain exports and database backups, and check the changelog for migrations. The project documentation says public server releases include Admin and the server on a weekly schedule, so self-hosters need a regular update window.

Ghost is a strong publication system precisely because it says no to many general-CMS choices. Accept its supported stack and provider decisions, or use Ghost(Pro) to hand off most operations. If those constraints fight existing infrastructure, choose a system designed around your preferred database, mail provider, or scaling model.

Alternatives

ProjectWhat it isPick it when
WordPressA general publishing platform with a vast theme and plug-in ecosystem.pick this instead when extension breadth and conventional website building matter more than Ghost's integrated membership flow.
Strapi gh↗A headless JavaScript CMS for modeling content and serving it through APIs.pick this instead when developers need custom content types and will build the reader, membership, and email experiences themselves.
WriteFreelyA smaller writing platform for simple blogs and federated publishing.pick this instead when a lightweight writing service matters more than paid memberships, newsletters, and editorial tooling.

What people are saying

  1. [github-trending] TryGhost/Ghost

Sources

  1. Ghost README
  2. Ghost hosting guide
  3. Ghost Ubuntu installation guide
  4. Ghost newsletter and Mailgun FAQ
  5. Ghost 6.59.0 release

More web reviews

axios · super-productivity · Graphite · fastify · tabler · go-zero · the whole board →