unsubbed.co

Ghost

Professional publishing platform with built-in newsletters, memberships, and paid subscriptions. Used by Platformer, 404Media, The Browser, and thousands more.

Open-source publishing with memberships, newsletters, and zero platform fees — honestly reviewed. No marketing fluff, just what you get when you self-host it.

TL;DR

  • What it is: Open-source (MIT) publishing platform built for independent creators — think a blog engine, email newsletter tool, and membership site combined into one Node.js app [1][5].
  • Who it’s for: Independent writers, journalists, newsletter creators, and small publications that want to own their audience and monetize without Substack’s 10% cut or WordPress’s plugin sprawl [1][5].
  • Cost savings: Ghost(Pro) managed hosting runs roughly $12–30/mo for small sites [1]. Self-hosted on a $5–10/mo VPS brings that to near-zero. Substack charges 10% of revenue — at $1,000/mo in subscriptions, that’s $100/mo forever compared to your VPS bill.
  • Key strength: The cleanest writing experience of any self-hostable CMS, with native paid subscriptions, email newsletters, and analytics built in — no plugin required [1][5].
  • Key weakness: Narrow scope by design. Ghost does publishing extremely well and almost nothing else. If you want e-commerce, complex page builders, or a giant plugin ecosystem, you’ll hit its walls fast [5].

What is Ghost

Ghost is a Node.js publishing platform created in 2013 by John O’Nolan, a former member of the WordPress team who got tired of WordPress becoming a general-purpose website builder that happened to have a blog mode [5]. The pitch was simple: a platform built purely for writing, reading, and monetizing content — nothing else.

Twelve years later, Ghost has grown into something more than just a blogging engine. It now ships native email newsletters, paid membership tiers with Stripe integration, a clean analytics dashboard, and as of version 6.0 (August 2025), ActivityPub support for federated publishing [1]. The GitHub repository sits at 52,077 stars. The Ghost Foundation — the non-profit that maintains the project — describes its mission as “independent technology for modern publishing, memberships, subscriptions and newsletters” [GitHub profile].

What makes Ghost different from the other open-source CMS options is a combination of three things. First, Node.js architecture — Ghost sites load significantly faster than PHP-based WordPress installations under equivalent hardware, which matters for SEO and reader retention [1]. Second, zero platform fees on payments — Stripe is wired directly to your Ghost instance, and Ghost takes nothing; you pay Stripe’s standard processing fees (typically 2.9% + $0.30) and nothing else [1]. Third, the scope is intentional — Ghost doesn’t try to be a general CMS, an e-commerce platform, or an LMS. It tries to be the best tool for creator-led publications, and it mostly succeeds at that narrower goal [5].

The project is maintained by the Ghost Foundation, a non-profit, with 100% of revenue from Ghost(Pro) managed hosting going back into development [README]. That funding model makes it more sustainable than VC-backed open-source projects where the “open” part disappears when the runway does.


Why people choose it over WordPress, Substack, and Beehiiv

The self-hosting community discussions we reviewed [3][4] and the formal reviews [1][5] converge on the same comparison framework.

Versus WordPress. This is the comparison Ghost was built to win, and in the publishing niche it does. WordPress has evolved into a Swiss Army knife — you can build anything with it, including a great blog, but you’ll add WooCommerce for payments, Mailchimp or ConvertKit for newsletters, Yoast for SEO, a caching plugin, a security plugin, and suddenly you’re managing a plugin dependency graph that breaks on every major update [1]. Ghost ships all of that natively. One ByBurk reviewer notes Ghost provides “automatic SEO optimization: meta descriptions, alt text, clean URLs, sitemaps” out of the box [1] — features that require Yoast and careful configuration on WordPress.

The trade-off: WordPress has an enormous plugin ecosystem and page builder tooling (Elementor, Gutenberg blocks) for complex layouts. Ghost’s themes are beautiful but the design flexibility ceiling is lower unless you write custom Handlebars templates.

Versus Substack. Substack is the obvious comparison for newsletter-first creators. Ghost’s counter-argument is ownership and economics. Substack charges 10% of subscription revenue. Ghost charges nothing beyond Stripe fees. At $500/mo in paid memberships, Substack takes $50 every month, forever. Ghost self-hosted takes $0 [1]. The Ghost Foundation puts it directly on the homepage: “$100,000,000+ revenue earned each year by publications running on Ghost, with 0% payment fees” [homepage].

The trade-off: Substack’s network effects and built-in discovery are real. Ghost has no equivalent of Substack’s recommendation engine or its reader app.

Versus Beehiiv and other newsletter platforms. These tools are more direct newsletter competitors than CMS competitors. Ghost’s advantage is that it combines a full publication website with the newsletter — you’re not duct-taping a landing page to a newsletter service. The disadvantage is setup complexity; Beehiiv gets you running in 20 minutes with zero server knowledge required [5].

On privacy and data sovereignty. Forum discussions [3][4] repeatedly come back to this: when you self-host Ghost, your subscriber list, your payment data (handled by Stripe, not Ghost), and your content are on infrastructure you control. You’re not dependent on a platform that can demonetize you, change its algorithm, or get acquired. Multiple self-hosters in the forum threads [3][4] specifically cite control over their subscriber relationship as the deciding factor.


Features

Based on the official site, README, and review sources:

Publishing engine:

  • Markdown and rich text editor with “calm by design” interface — no toolbars visible until needed [homepage][1]
  • Rich media cards: image galleries, GIFs, video, audio, downloadable files, bookmarks, info boxes, accordion toggles, product cards [homepage]
  • Post scheduling and drafts
  • Automatic SEO: meta tags, Open Graph, canonical URLs, XML sitemaps, structured data [1]
  • Content versioning and revision history

Audience and membership:

  • Native signup forms — anonymous visitors become logged-in members
  • Free and paid membership tiers (monthly and yearly)
  • Stripe integration with 0% platform fees [1]
  • Offers and promotions: discounts, limited-time deals [homepage]
  • Member segmentation for targeted newsletters

Email newsletters:

  • Posts delivered by email to subscribers automatically
  • Multiple newsletter segments based on member preferences [homepage]
  • Built-in email delivery (on Ghost(Pro)) or SMTP configuration for self-hosted

Analytics:

  • Native engagement analytics — what posts get read, who your most engaged readers are [homepage]
  • No third-party analytics required (though Plausible, Cloudflare Analytics, and Google Analytics integrations exist [4])

Integrations:

  • Zapier, Slack, Discord, Mailchimp, ActiveCampaign, Google Analytics, GitHub, Netlify, Unsplash, and dozens more listed on the homepage [homepage]
  • Full REST Content API and Admin API for headless/custom frontends [README]
  • ActivityPub in Ghost 6.0 — your publication can federate with the Fediverse [1]

Theme system:

  • Handlebars-based theme engine
  • Marketplace with hundreds of themes [homepage]
  • Custom themes from scratch if you know HTML/CSS/Handlebars

Self-host / developer features:

  • Ghost CLI for installation and management [README]
  • Docker support (community-maintained)
  • Full Node.js source on MIT license
  • Content API for headless publishing setups

Pricing: SaaS vs self-hosted math

Ghost(Pro) managed hosting:

  • Free trial: 14 days [homepage]
  • Plans scale by number of members; a ByBurk reviewer puts small-site cost at roughly $12–30/mo [1]
  • All revenue from Ghost(Pro) goes to the Ghost Foundation to fund development [README]

Self-hosted:

  • Software: $0 (MIT license)
  • VPS: $5–20/mo on Hetzner, DigitalOcean, Contabo, or Vultr
  • Email delivery: requires external SMTP (Mailgun, Postmark, AWS SES — typically $10–20/mo at moderate volume, or free tiers below ~10K emails/mo)
  • Stripe fees: 2.9% + $0.30 per transaction (this is Ghost’s only “cut” — it goes to Stripe, not Ghost) [1]

Substack for comparison:

  • Free: 10% of subscription revenue
  • Substack Pro: reduced fee but by invite only
  • At $1,000/mo MRR: $100/mo to Substack
  • At $5,000/mo MRR: $500/mo to Substack — for software that runs on someone else’s server

WordPress.com for comparison:

  • Free: WordPress.com subdomain, no monetization
  • Personal: ~$4/mo (no plugins, no custom domain on paid plans)
  • Business: ~$25/mo (plugins allowed, but this is where you’d actually match Ghost’s feature set)
  • Self-hosted WordPress.org: free software, same VPS cost as Ghost, but you’ll add $10–50/mo in premium plugins to match Ghost’s built-in features

Concrete math for a newsletter creator at scale:

A publication with 2,000 paid members at $10/mo = $20,000 MRR. Substack takes 10% = $2,000/mo in perpetual platform fees. Ghost self-hosted = a $10/mo VPS + Stripe’s 2.9% ($580/mo) = $590/mo total. Annual difference: (($2,000 - $590) × 12) = $16,920/year saved by self-hosting Ghost. The math is stark at any serious revenue level.

Even at $500 MRR: Substack takes $50/mo vs. Ghost’s ~$25/mo (VPS + Stripe fees). The break-even on Ghost’s setup time happens within the first few months.


Deployment reality check

Ghost has one of the cleaner self-hosted install processes in the Node.js world, but it’s not one-click simple [3][4].

The official path:

npm install ghost-cli -g
ghost install

The CLI handles MySQL, nginx configuration, and automatic Let’s Encrypt SSL on a fresh Ubuntu server [README]. Forum threads [4] show experienced self-hosters getting a production instance up on DigitalOcean in under 30 minutes.

What you actually need:

  • Ubuntu 20.04 or 22.04 LTS (officially supported; other distros work but aren’t recommended) [2]
  • Node.js v18 LTS — this is the supported version; v20 works but causes ghost doctor warnings [2]
  • MySQL 8.x
  • nginx (configured automatically by ghost-cli)
  • A domain name
  • SMTP provider for email delivery (Mailgun free tier works for small lists)
  • Minimum 1GB RAM; 2GB recommended for production

What can go sideways:

Node.js version management is the most common friction point. A forum thread [2] documents a Ghost operator who upgraded Node via Ubuntu’s snap package manager and hit systemd service detection failures — ghost doctor couldn’t verify the node version in systemd’s ExecStart path. The fix required manually editing the systemd unit file. This is representative: Ghost CLI’s setup is opinionated and works cleanly when you follow the exact documented path, but diverge slightly (snap instead of nvm, Docker instead of bare metal) and you’re troubleshooting service discovery edge cases.

Docker is the second common path. Forum member markstos [2] notes Docker solves the host Node.js version problem entirely and has become more relevant with Ghost 6.0’s ActivityPub feature, which may run as a separate service requiring Docker Compose to orchestrate.

Self-hosting stack from the community [4]:

  • Popular combo: DigitalOcean/Hetzner VPS + nginx + Cloudflare (CDN + DDoS protection) + Ghost CLI
  • Email: Mailgun or Mailchimp Transactional
  • Analytics: Plausible or Cloudflare Analytics
  • DNS: Route 53 or Cloudflare

Realistic time estimate: 45–90 minutes for a developer following the official Ubuntu guide on a fresh VPS. For a non-technical founder with a server for the first time: half a day including DNS propagation and SMTP configuration. Ghost(Pro) remains the right choice for anyone who can’t or doesn’t want to manage a server.


Pros and Cons

Pros

  • MIT license, full ownership. Fork it, modify it, embed it in your product — no commercial agreement needed. This matters if Ghost ever changes strategy or gets acquired [README].
  • Zero platform fees on membership revenue. The Stripe connection is direct. Ghost takes nothing. For a publication doing any serious paid subscription volume, this is worth hundreds to thousands of dollars per year [1].
  • Writing experience is genuinely excellent. The editor is clean, calm, and focused. No toolbar noise until you need it, and rich media cards cover almost every content type without plugins [homepage][1].
  • Node.js performance. Significantly faster page loads than equivalent WordPress setups on the same hardware — relevant for SEO rankings [1].
  • Native email newsletters. No third-party email service required for delivery through Ghost(Pro); self-hosted needs SMTP but the newsletter system itself is built in [homepage].
  • ActivityPub in 6.0. Ghost publications can now participate in the Fediverse — your posts appear on Mastodon and other federated platforms [1].
  • Non-profit foundation. Funding comes from Ghost(Pro) customers, not venture capital. There’s no investor pressure to enshittify the platform or add aggressive monetization [README][homepage].
  • 52,000+ GitHub stars. One of the most popular open-source CMS projects — unlikely to disappear.

Cons

  • Narrow scope by design. Ghost is a publishing platform. If you need e-commerce, complex forms, multi-content-type CMS, membership gating on non-post content, or a page builder — you’ll hit its edges fast [5].
  • Node.js version management is finicky. The officially supported path (ghost-cli + Ubuntu + nvm) works cleanly. Deviate — use snap, Docker, a non-Ubuntu distro — and you’re in unsupported territory with real troubleshooting overhead [2].
  • No plugin ecosystem. WordPress has 60,000+ plugins. Ghost has integrations (via webhooks and its API) and themes. If your specific workflow isn’t covered natively, you’re writing custom code or wiring Zapier [5].
  • Ghost(Pro) is not cheap at scale. As your member count grows, managed hosting costs climb. The economics strongly favor self-hosting once you know your way around a VPS [1][3].
  • SMTP for self-hosters is a separate dependency. Ghost doesn’t ship a mail server. For a publication that relies on email delivery (which is most of them), you’re adding and paying for an SMTP service [4].
  • Forum-only community support for self-hosted. Ghost(Pro) customers get 24/7 email support. Self-hosters get a community forum — which is active and helpful [README], but it’s not a support contract.
  • Themes require Handlebars knowledge for serious customization. The marketplace covers most cases, but bespoke layouts mean learning Ghost’s templating system.

Who should use this / who shouldn’t

Use Ghost if:

  • You’re a writer, journalist, or creator running a newsletter and/or paid membership publication, and you’re tired of Substack’s 10% cut.
  • You want a single tool that handles your website, email newsletter, and paid subscriptions without plugin assembly.
  • You’re comfortable with (or willing to pay someone for) a one-time VPS setup and basic ongoing maintenance.
  • You value data ownership — your subscriber list, your content, your infrastructure.
  • You care about writing experience; the Ghost editor is the best in the self-hosted space.

Skip it (stay on Substack/Beehiiv) if:

  • You have zero server experience and no budget to hire someone for setup.
  • You’re early-stage and want to validate your publication idea before investing in infrastructure.
  • You want built-in discovery and recommendation networks.
  • You’re below ~$200/mo in subscription revenue — the setup cost in time doesn’t pay off yet.

Skip it (use WordPress) if:

  • You need a general-purpose website with e-commerce, complex custom post types, membership gating on non-blog content, or a plugin-driven feature set.
  • Your team is already deep in the WordPress ecosystem and migration cost exceeds the value.
  • You need granular page-building control (Elementor, Gutenberg blocks at scale).

Skip it (use a headless CMS like Contentful or Sanity) if:

  • You’re an engineering team building a custom frontend with Ghost only for content editing — at that point a purpose-built headless CMS with better query APIs may serve you better.

Alternatives worth considering

  • WordPress (self-hosted) — the default comparison. More flexible, larger plugin ecosystem, steeper maintenance overhead, slower by default. Choose it when you need a general-purpose CMS beyond publishing.
  • Substack — the simplest path to a paid newsletter. No server, no setup. You pay 10% of revenue and accept that Substack owns the platform relationship with your audience.
  • Beehiiv — newsletter-first, growing fast, no revenue cut (flat subscription pricing). Less mature publication website vs. Ghost, but excellent for pure newsletter use cases.
  • WriteFreely — ultra-minimal federated blogging (ActivityPub native). No memberships or newsletters. For writers who want federation without Ghost’s complexity.
  • Plume — another ActivityPub-native alternative. Very early stage compared to Ghost.
  • Mataroa — minimal paid blogging with email delivery. Simpler than Ghost, less featured, $9/mo flat. Good for solo writers who don’t need membership tiers.

For a creator escaping Substack fees, the realistic shortlist is Ghost vs. Beehiiv. Pick Ghost if you want full ownership and long-term economics. Pick Beehiiv if zero infrastructure management is the priority.


Bottom line

Ghost is the honest answer for independent creators and small publications who want to own their business. It’s not trying to compete with WordPress on feature breadth or with Notion on flexibility — it’s trying to be the most complete, best-designed tool for the specific job of running a publication with a paid audience. And it mostly succeeds. The writing experience is clean, the email and membership system works without glue code, and the economics are compelling the moment your subscription revenue is anything more than trivial: every dollar you earn stays with you and Stripe, not a platform taking its 10% indefinitely.

The friction is real: Node.js version discipline, SMTP setup, and the absence of a plugin escape hatch for features Ghost doesn’t support natively. For a founder who can’t touch a Linux terminal, Ghost(Pro) at $12–30/mo is the honest recommendation — you’re still paying less than most SaaS publishing tools while keeping full data portability if you ever want to migrate to self-hosted.

If the setup is the blocker, that’s exactly what unsubbed.co’s parent studio upready.dev handles for clients. One-time deployment, you own the infrastructure and the subscriber relationship from day one.


Sources

  1. ByBurk“Ghost Review 2024: Is This the Best Blogging Platform Today?” https://www.byburk.net/ghost-review-2024-is-this-the-best-blogging-platform-today/

  2. Ghost Forum — Developer help“Using Ubuntu Snap Package Node for Ghost Review” (May 2024). https://forum.ghost.org/t/using-ubuntu-snap-package-node-for-ghost-review/47758

  3. Ghost Forum — Using Ghost“New project on Ghost(Pro) or self-hosted?” (August 2021). https://forum.ghost.org/t/new-project-on-ghost-pro-or-self-hosted/25025

  4. Ghost Forum — Developer help“People who are self-hosting Ghost sites, what is your stack?” (May 2021). https://forum.ghost.org/t/people-who-are-self-hosting-ghost-sites-what-is-your-stack/22588

  5. Blogging Guide“Ghost Review”. https://bloggingguide.com/guides/ghost/

Primary sources: