Toast
ContributorReference

Ghost: Complete product feature map

Ghost: Complete product feature map

Ghost is a professional publishing platform built on Node.js, offering a fully integrated stack for content creation, membership monetization, email newsletters, and social web distribution. As of February 2026 (v6.19.3), the platform encompasses 20+ feature domains spanning editor, memberships, email, themes, APIs, analytics, ActivityPub federation, and more. What follows is an exhaustive map of every capability Ghost offers today, organized to show how features relate across the system.


1. Publishing & editor

Ghost's editor (Koenig) is built on React + Meta's Lexical framework, storing content as Lexical JSON. It replaced the legacy Ember/Mobiledoc editor during the Ghost 5.x cycle. Ghost is the first independent company outside Meta to build a production editor on Lexical.

Core editor

  • Rich visual editor — WYSIWYG with invisible-until-needed UI; inline formatting (bold, italic, headings H1–H6, lists, links, blockquotes, code)
  • Inline Markdown parsing — Markdown syntax auto-converts as you type
  • Card system — Dynamic content blocks inserted via + button or / slash command menu
  • Drag and drop — Reorder any card/block by dragging
  • Keyboard shortcuts — Full OS-aware shortcut support for all formatting and actions
  • Undo/redo chaining — Smooth multi-step undo/redo
  • Emoji autocomplete — Type : to search and insert emoji
  • TK reminders — Flag placeholder text ("TK") to prevent publishing incomplete content
  • Internal linking — Type @ to search and link to own posts, pages, tags, authors inline
  • Snippets — Save any combination of cards/content as a reusable block; available to all staff
  • Post history — Last ~10 revisions stored; browse who edited what and when; one-click restore
  • Post preview — Live preview for desktop, mobile, email, and social; preview as public visitor, free member, or paid member
  • Shareable preview URL — Unique URL for sharing unpublished drafts with external reviewers
  • Test email — Send test newsletter to yourself before publishing
  • Quick edit via URL — Append /edit to any published post URL to jump to editor
  • Ghost Bookmarker — Chrome extension to save any webpage into a Ghost draft post
  • Nested lists — Bulleted and numbered list nesting
  • Native image editing — Crop, resize, annotate, apply filters inline (Pintura integration)

Editor cards (20+ card types)

  • Image — Upload, drag-drop, paste, or insert via URL; captions; alt text; lossless compression; responsive optimization; JPEG/PNG/GIF/WEBP; multiple width options
  • Gallery — Up to 9 images; responsive layout; drag-and-drop reorder
  • Markdown — Full Markdown editing card with footnote support
  • HTML — Raw HTML injection per-card; per-card visibility targeting (public/free/paid)
  • Divider — Horizontal rule separator; shortcut ---
  • Bookmark — Rich link preview (title, description, thumbnail); auto-generates from pasted URL
  • Email content — Newsletter-only content block; supports {first_name} with custom fallback; hidden on web
  • Call to action (CTA) — Image, optional sponsor label, button with custom URL; customizable background color, button style, link color, image layout; visibility targeting (public/free/paid + web/email/both)
  • Public preview / Paywall — Paywall divider; shortcut /paywall; marks where free content ends
  • Button — CTA button; center or left-aligned; custom text and URL
  • Callout — Styled info box with emoji, formatted text, custom background color
  • GIF — Built-in Tenor search and insert
  • Toggle — Collapsible/expandable accordion; custom header; supports formatting
  • Audio — Direct upload up to 1 GB; MP3/WAV/OGG; thumbnail, title display
  • Video — Direct upload up to 1 GB; MP4/WebM/OGG; loop setting, custom thumbnail, three width options
  • File — Downloadable file attachment; any type; up to 1 GB; custom name and caption
  • Product — Product card with image, description, button or star rating
  • Header — Full-width hero section; multiple layouts; custom images, headings, subheadings, CTAs; stackable for landing pages
  • Signup — Inline signup form within content; customizable layout, alignment, colors, button text; member label tracking; only shown to non-members
  • Embed — Auto-embed via URL paste (YouTube, Spotify, SoundCloud, Twitter/X, Vimeo, CodePen, etc.) via oEmbed; also accessible from card menu
  • Unsplash integration — Search and insert free stock photos directly from the editor

Content types

  • Posts — Standard blog content; appears in feeds, tag archives, author pages, homepage
  • Pages — Static pages; same editor; excluded from feeds/tag collections/homepage
  • Landing pages — Pages with title/feature image toggled off; built using header + signup cards
  • Email-only posts — Send as newsletter without publishing to website
  • Notes — Short-form microblog posts published to the social web (ActivityPub only, not on theme)

Post settings (per-post sidebar)

  • Custom URL slug — Auto-generated or manually customized
  • Custom excerpt — Manual snippet for theme index pages and social sharing
  • Feature image — Hero image with alt text
  • Publish date — Configurable; uses publication timezone
  • Tags — Multiple tags per post; create new inline
  • Authors — Multiple authors per post
  • Post access — Public, Members only, Paid-members only, Specific tier(s)
  • Featured toggle — Flags post for special theme styling/carousels
  • Custom template — Select per-post template (if theme provides custom templates)
  • Meta data — Custom meta title and description with character guidance
  • Canonical URL — Override automatic canonical; auto-excludes from sitemap when set
  • X (Twitter) card — Custom title, description, image for Twitter sharing
  • Facebook Open Graph — Custom title, description, image for Facebook sharing
  • Per-post code injection — Custom header/footer scripts and styles per post

Publishing modes

  • Publish and email — Publish to site + send newsletter simultaneously
  • Publish only — Publish to website without sending email
  • Email only — Send newsletter without publishing to website
  • Schedule — Schedule posts for future date/time publication
  • Custom email subject — Override post title for newsletter subject line
  • Audience segmentation at send — Target by newsletter subscription, access level, or member labels
  • Delivery confirmation — Summary screen showing targets and recipient count before sending
  • Post-publish share step — Confirmation dialog with immediate sharing actions after publish/send
  • Post-publish analytics handoff — Direct handoff to post analytics screen to monitor early performance

Content storage

  • Lexical JSON — Current storage format; JSON tree structure
  • Mobiledoc JSON — Legacy format; old posts remain in mobiledoc unless re-edited
  • HTML rendering — Server-side via kg-lexical-html-renderer for web and email (table-based for email)

2. Membership & subscriptions

Member authentication

  • Magic link signin — Passwordless; members receive email with login link
  • One-time codes — Secure code-based signin as alternative to magic links (shipped Oct 2025)
  • Inbox links — After magic-link signup, auto-detects email provider and links directly to inbox with pre-filtered search (shipped Feb 2026)
  • Session-based auth — Member sessions managed via cookies
  • Portal UI — Handles all signup/signin flows (see Portal section)

Signup configuration

  • Open signup — Anyone can sign up
  • Invite-only — Only people you invite can become members
  • Disabled — Memberships turned off entirely
  • Double opt-in — Confirmation email required for all new signups
  • Custom signup notice — Custom text/links (terms of service, community guidelines) at signup
  • Require agreement checkbox — Force checkbox agreement before signup
  • Signup spam protection — Built-in filtering against bot/SMS-based spam signups (shipped Feb 2025)
  • Email domain blocking — Block signups from specific email domains
  • Member labels on signup — Auto-apply labels from signup forms, embeds, or API

Free memberships

  • Free tier — Default tier; configurable name, description, welcome page
  • Benefits list — Display free tier benefits in Portal
  • Stripe integration — Direct native Stripe connection; 0% Ghost transaction fees
  • Multiple premium tiers — Up to 3 (Publisher), 10 (Business), unlimited (Custom/self-hosted)
  • Per-tier pricing — Independent monthly and yearly prices per tier
  • Per-tier configuration — Custom name, description, benefits list, welcome page URL
  • 135+ currencies — Accept payments in any Stripe-supported currency
  • Payment methods — Credit/debit cards, Apple Pay, Google Pay, CashApp, iDEAL, Bancontact, and more via Stripe
  • Free trials — Configurable trial duration per tier; auto-converts to paid after expiry; members can cancel during trial
  • Complimentary plans — Grant free paid-tier access to specific members
  • Automatic sales tax — Stripe Tax integration for automated tax compliance
  • Stripe test mode — Test payments before going live

Tips & donations

  • One-time payments — Accept tips from members and non-members; no membership required
  • Configurable suggested amount — Default tip amount and currency
  • Shareable payment link — Usable in buttons, headers, CTAs, navigation, newsletters
  • Email notifications — Owner/admins notified when tip received
  • Shipped September 2024

Offers & discounts

  • Percentage discounts — e.g., 30% off
  • Fixed amount discounts — e.g., $5 off
  • Duration control — Once, multiple months (repeating), or forever
  • Free trial offers — Custom trial duration offers
  • Custom messaging — Name, description, custom display code per offer
  • Unique shareable URLs — Each offer has a unique URL; Portal displays on visit
  • Offer analytics — Track redemption count
  • Archive/reactivate — Archive and restore offers at any time
  • Limit counts — Up to 15 (Publisher), 50 (Business), unlimited (Custom)

Member management

  • Member dashboard — Centralized view with search
  • Advanced filtering — Filter by: name, email, label, newsletter subscription, last seen, created date, signed up on post/page, newsletter events (subscribed/unsubscribed/disabled), tier, status (free/paid/comped), billing period (monthly/yearly), Stripe subscription status, paid start date, next billing date, emails sent/opened/clicked, open rate, feedback
  • Saved views — Save filtered segments for quick access
  • Bulk actions — Export, apply/remove labels, unsubscribe from email, bulk delete
  • Bulk delete — Delete filtered segments; auto-backup download before deletion; no effect on Stripe subscriptions
  • Member profiles — Name, email, notes, activity feed, email stats, average open rate, newsletter preferences, labels, Stripe customer link, signup source
  • Member labels — Custom tags for segmentation; assignable manually, via CSV import, embeddable forms, theme forms, API, or Zapier
  • Member impersonation — View site as a specific member to troubleshoot access
  • Force logout — Staff can revoke active member sessions to sign members out of all devices
  • CSV import — Import members with: email (required), name, note, subscribed_to_emails, complimentary_plan, stripe_customer_id (supports auto Stripe lookup), created_at, labels
  • CSV export — Full member list with all metadata
  • Signup attribution — Tracks referral source at signup (search, social, referral, direct, specific content, campaigns)
  • Custom sources — Track via ref, source, or utm_source query parameters

Welcome flows

  • Welcome emails — Automated separate emails for free and paid signups; customizable subject and content (shipped Feb 2026; described as "first step toward automation suite")
  • Welcome pages — Custom redirect URL after email confirmation; configurable per tier

3. Newsletter & email

Newsletter management

  • Multiple newsletters — Independent subscriptions, settings, and designs per newsletter; 1 (Starter), 3 (Publisher), 10 (Business), unlimited (Custom/self-hosted)
  • Newsletter toggle — Enable/disable sending globally
  • Auto-subscribe existing members — Option when creating new newsletters
  • Archive newsletters — Remove from member options and publishing menu
  • Member newsletter preferences — Members choose which newsletters to subscribe to via Portal
  • Unlimited email sends — No per-email charges on any plan

Newsletter template design

  • Sender name — Custom "from" name (defaults to site title)
  • Reply-to email — Configurable reply-to address
  • Publication title visibility — Show/hide in header
  • Newsletter name display — Show under publication title (useful for multi-newsletter)
  • Post title/excerpt/feature image — Toggle visibility in newsletter header
  • Background color — Full email background
  • Header background color — Separate color for top section
  • Heading and body fonts — Choose typography
  • Heading weight — Bold or light
  • Post title color and alignment — Customize title area
  • Section title color — Color for headings within content
  • Button customization — Corner style (square/rounded/pill), appearance (filled/outline), color
  • Link styling — Custom color, style (underlined/regular/bold)
  • Image corners — Rounded or square
  • Divider color — Custom horizontal line color
  • Footer customization — Audience feedback, commenting link, latest posts, subscription details, custom text/legal info
  • "Published with Ghost" badge — Toggle on/off
  • Subtitles — Add subtitle to email version of posts
  • Shipped as major upgrade June 2025

Email delivery

  • Managed deliverability — Professional infrastructure, bounce management, reputation monitoring (Ghost(Pro))
  • Custom sending domain — Send from your own domain with DKIM/SPF authentication (Publisher+)
  • Dedicated IP — Custom plan only
  • Automatic list cleaning — Auto-disables bounced/spam-reporting addresses
  • Automatic unsubscribe link — Included in all emails
  • Segment targeting — Send to any combination of newsletter subscription, access level, labels
  • Email clipping warnings — Tracks newsletter file size; warns if Gmail will clip content (shipped Jan 2026)
  • Self-hosted email — Requires Mailgun for bulk sending; configurable SMTP for transactional

Post-send capabilities

  • Edit links after sending — Update/correct URLs in already-sent newsletters via link tracking redirect
  • Link tracking — All links rewritten through Ghost's tracking system; enables click analytics and post-send link updates

Audience feedback

  • Inline feedback buttons — "More like this" / "Less like this" in newsletter footer
  • Feedback analytics — View breakdown per post

Email notifications (for publishers)

  • New member signup alerts — Email notifications when members sign up
  • Paid conversion alerts — Notifications on upgrades
  • Tip received alerts — Notifications when tips/donations arrive

4. Themes & design

Theme system

  • Handlebars templating — Server-side rendered; separation of templates and logic
  • Theme upload — Install custom .zip theme files
  • Theme marketplace — Hundreds of community and official themes
  • Official themes — Source (news/default), Solo (individual creators), Taste (food), Episode (podcast), plus newsletter-focused themes (Journal, Digest, Bulletin)
  • Theme download — Export active theme as .zip
  • Auto-update official themes — Unmodified official themes can update in admin
  • GScan validation — Theme compatibility checker (CLI tool + validates on upload)
  • GitHub Action deploymentTryGhost/action-deploy-theme@v1 for CI/CD theme deployment
  • VS Code extension — Syntax highlighting and live preview for theme development

Template hierarchy

  • default.hbs — Base layout (header, footer)
  • index.hbs — Homepage / post list (required)
  • post.hbs — Single post (required)
  • page.hbs — Static pages
  • tag.hbs — Tag archive
  • author.hbs — Author archive
  • error.hbs — Error pages
  • custom-*.hbs — Custom per-post/page templates (exposed as dropdown in post settings)
  • package.json — Theme metadata, engine version, custom settings (required)
  • /partials/ — Reusable template fragments; inherit context; support named properties
  • /assets/ — Static content (CSS, JS, fonts, images)

Handlebars helpers

Functional helpers:

  • {{#foreach}} — Context-aware iteration with @index, @number, @first, @last, @odd, @even, limit, from, to
  • {{#get}} — Fetch data from Content API within templates (posts, tags, authors, tiers, newsletters)
  • {{#has}} — Check properties (tag, author, slug, number, any, all)
  • {{#if}} / {{#unless}} — Conditionals
  • {{#is}} — Check route context (home, post, page, tag, author, paged, private)
  • {{#match}} — Pattern matching on values

Output helpers:

  • {{url}} — Generate URLs
  • {{content}} — Post/page content
  • {{excerpt}} — Excerpt with word/character limit
  • {{date}} — Date formatting
  • {{tags}} — Tag list output
  • {{authors}} — Author list output
  • {{img_url}} — Image URL with dynamic size options
  • {{reading_time}} — Estimated reading time
  • {{pagination}} — Pagination controls
  • {{navigation}} — Site navigation
  • {{price}} — Format monetary values from Stripe
  • {{tiers}} — Membership tier display
  • {{total_members}} / {{total_paid_members}} — Member counts
  • {{t}} / {{translate}} — i18n translation
  • {{search}} — Search button/modal output
  • {{cancel_link}} — Cancel/continue subscription links
  • {{prev_post}} / {{next_post}} — Adjacent post navigation
  • {{plural}} — Pluralize strings
  • {{encode}} — URL-encode strings
  • {{concat}} — String concatenation
  • {{split}} — String splitting
  • {{link_class}} — Active class for navigation links
  • {{log}} — Debug logging

Meta/structural helpers:

  • {{ghost_head}} — Head metadata, SEO, structured data, custom fonts, scripts
  • {{ghost_foot}} — Footer scripts
  • {{body_class}} — Dynamic CSS classes for body tag
  • {{post_class}} — Dynamic CSS classes for posts
  • {{asset}} — Theme asset references with cache-busting
  • {{block}} — Define/use content blocks between templates

Data variables:

  • @site — Site-wide settings (title, description, logo, url, navigation, etc.)
  • @member — Current logged-in member data and subscriptions
  • @labs — Feature flags
  • @custom — Custom theme settings

Custom theme settings

  • Defined in package.json under config.custom
  • 5 types: select, boolean, color, image, text
  • Max 20 settings per theme; 3 groups: site-wide, homepage, post
  • Accessed via @custom object (e.g., @custom.typography)
  • Conditional visibility between settings using NQL syntax
  • Description support (max 100 chars)

Design settings (admin UI, no code)

  • Accent color — Primary color for links, buttons, text
  • Publication icon (favicon) — Square, min 60×60px
  • Publication logo — Transparent background recommended
  • Cover image — Site-wide banner
  • Site description — Tagline displayed in theme
  • Custom fonts — Curated typeface selection; loads via {{ghost_head}} as CSS variables (--gh-font-heading, --gh-font-body); shipped Dec 2024

Code injection

  • Site-wide header/footer — Custom CSS/JS via Settings → Code injection
  • Per-post header/footer — Custom CSS/JS per individual post
  • Integration scripts — Paste tracking, analytics, or third-party tool scripts

Image handling

  • Auto lossless compression — On upload
  • Responsive images — Auto-generates multiple sizes (up to 2000px max, JPEG 80% quality)
  • Original preservation — Originals kept with _o suffix
  • Dynamic sizing — Via {{img_url}} helper in themes
  • Supported formats — JPEG, PNG, GIF, WEBP
  • Metadata removal — EXIF data stripped on optimization

5. Content management

Tags

  • Primary tag — First tag determines URL routing and primary classification
  • Multiple tags — Unlimited per post
  • Tag metadata — Custom name, slug, description, feature image, meta title, meta description
  • Internal tags — Prefixed with #; hidden from public-facing site; for internal organization only
  • Tag archives — Auto-generated at /tag/{slug}/

Content organization

  • Content filters — Filter by draft, published, featured, scheduled, tag, author, access level
  • Saved views — Save filtered content lists for quick access
  • Bulk editing — Multi-select; bulk add/remove tags, change access, toggle featured, unpublish, delete
  • Post duplication — Clone posts (content, images, settings copied)
  • Featured posts — Flag for special theme treatment/carousels

Collections (via routes.yaml)

  • YAML-defined post groups — Group posts by filter criteria (tags, authors, featured, dates) under custom URL routes
  • Exclusive ownership — A post belongs to only one collection (unlike tags which are non-exclusive)
  • Custom permalinks — Per-collection permalink patterns (e.g., /{slug}/, /{year}/{slug}/)
  • Custom templates — Per-collection template assignment
  • Default collection — Root / with /{slug}/ permalinks
  • Not a UI feature in Ghost Admin — configured via routes.yaml
  • Primary navigation — Main site menu
  • Secondary navigation — Footer/secondary menu
  • Custom links — Any URL including tag archives, pages, external links, Portal links

Redirects

  • URL redirects — Via redirects.yaml or redirects.json file upload in admin
  • 301/302 support — Permanent and temporary redirects
  • Regex patterns — Supported in redirect rules

6. SEO & metadata

  • Automatic metadata — Auto-generated from post content if not customized
  • Custom meta title/description — Per post, page, tag, and site-wide
  • XML sitemap — Auto-generated and auto-updated; posts with canonical URLs excluded
  • Canonical tags — Automatic across site; customizable per post
  • Structured data (JSON-LD) — Automatic on all posts and pages
  • Twitter Cards — Built-in meta tags; customizable per post
  • Open Graph tags — Built-in Facebook/social meta; customizable per post
  • Social account settings — Site-level Facebook and X/Twitter account links
  • Clean URLs — Human-readable slugs
  • robots.txt — Customizable via theme
  • Referrer policy — Configurable (origin-when-crossorigin default)
  • Performance — Node.js backend; static-site-equivalent speed; serves ~19× faster than WordPress under load
  • AMP — Deprecated and removed in Ghost 6.0

7. Integrations

Native integrations

  • Unsplash — Free stock photo search in editor
  • Tenor/GIPHY — GIF search in editor
  • Stripe — Payment processing for memberships and tips
  • Slack — Auto-post notifications when content published
  • Tinybird — Powers native analytics (Ghost(Pro) included; self-hosters bring own key)

Embed support (oEmbed)

  • YouTube, Vimeo, Spotify, SoundCloud, Twitter/X, Instagram, Facebook, CodePen, and any oEmbed-compatible service

Third-party integrations (documented)

  • Google Analytics, Plausible, Fathom (analytics)
  • Mailchimp, ActiveCampaign, Drip, EmailOctopus, HubSpot (email/CRM sync)
  • Discourse, Cove Comments (community)
  • Buffer (social scheduling)
  • HelpScout, Intercom (support)
  • Airtable, Geckoboard, ChartMogul (business intelligence)
  • First Promoter (referral program)
  • Google AdSense, BuySellAds (advertising)
  • iA Writer, Ulysses (writing tools)
  • Netlify, GitHub (deployment)
  • Tally (forms)
  • Imgur (image hosting)
  • Udesly (Webflow-to-Ghost)

Automation platforms

  • Zapier — 5,000+ app connections; native Ghost triggers (member created/updated, post published, page published)
  • n8n — Open-source workflow automation with 1,000+ services
  • Pipedream — Developer-focused workflow automation
  • Make (Integromat) — Visual automation builder

Custom integrations

  • Created in Settings → Integrations
  • Each integration gets: Content API key, Admin API key, webhook configuration
  • Named integrations for organizational clarity

8. APIs

Content API (public, read-only)

  • Base URL: https://{domain}/ghost/api/content/
  • Authentication: API key via ?key={key} query parameter
  • Endpoints: GET /posts/, /pages/, /tags/, /authors/, /tiers/, /newsletters/, /settings/
  • Read by ID or slug: /posts/{id}/, /posts/slug/{slug}/
  • Parameters: include (related data), fields (select), filter (NQL), limit (max 100), page, order, formats (html, plaintext)
  • Filtering: NQL (Node Query Language) — filter by tags, authors, any property; complex expressions
  • Pagination: Default 15 per page; max 100; meta.pagination in response; ?limit=all removed in Ghost 6.0
  • Versioning: Accept-Version header (e.g., v6.0)
  • Fully cacheable — No rate limiting documented
  • SDK: @tryghost/content-api (JavaScript; npm/yarn; also UMD standalone)

Admin API (private, read-write)

  • Base URL: https://{domain}/ghost/api/admin/
  • Resources: posts, pages, tags, tiers, newsletters, offers, members, users, images, themes, site, webhooks, labels, integrations, settings
  • Full CRUD: Browse, Read, Add, Edit, Copy, Delete on supported resources
  • Authentication methods:
    1. Integration tokens — JWT-based; Admin API key in id:secret format; generate short-lived JWTs (max 5 min); Authorization: Ghost $token header
    2. Staff access tokens — Per-user tokens from profile page; same JWT mechanism; role-based permissions
    3. User authentication — Email + password → session cookie; supports 2FA device verification
  • CSRF protection — Origin/Referer header validation for session auth
  • SDK: @tryghost/admin-api (JavaScript; handles JWT generation automatically)

Webhooks

  • 31 event types across 5 categories:
    • Posts: added, deleted, edited, published, published.edited, unpublished, scheduled, unscheduled, rescheduled
    • Pages: added, deleted, edited, published, published.edited, unpublished, scheduled, unscheduled, rescheduled
    • Tags: added, edited, deleted, post.tag.attached, post.tag.detached, page.tag.attached, page.tag.detached
    • Members: added, edited, deleted
    • Site: site.changed (any content/settings change)
  • Configuration: Via custom integrations in admin; POST requests with JSON body; 2xx = success
  • Stripe webhooks: Endpoint at /members/webhooks/stripe/ for payment events

Additional SDKs & tools

  • @tryghost/helpers — JavaScript helpers (tags, readingTime) for headless implementations
  • @tryghost/string — String utilities (slugify with transliteration)
  • API demosTryGhost/api-demos repository with Content and Admin API examples
  • llms.txt — Developer docs include llms.txt for AI/LLM tool integration

Headless CMS usage

  • Supported frameworks: Next.js, Gatsby, Nuxt, Hexo, VuePress, Gridsome, Eleventy, custom
  • Membership features NOT compatible with headless (requires Ghost frontend for Portal)
  • Must re-implement: tag/author archives, sitemap, SEO meta, Open Graph, pagination, code injection

9. Admin & settings

Ghost Admin (web app)

  • Legacy: Ember.js application (ghost/admin)
  • New modules (Admin-X): React + Tailwind CSS; gradually replacing Ember; admin-x-settings, admin-x-framework, admin-x-design-system
  • Refreshed settings interface — Browse all settings at a glance with built-in search (shipped 2024)

Staff roles & permissions (5 roles)

  • Owner — Single per site; cannot be deleted; can transfer ownership; full access
  • Administrator — Full access to all settings, staff, and content
  • Editor — Manage and publish all posts; manage tags
  • Author — Create, edit, and publish own posts
  • Contributor — Create and edit own drafts only; cannot publish (does not count toward plan limits)
  • Suspended — Login blocked; profile and content retained (does not count toward limits)

Staff user profiles

  • Full name, slug (author page URL), location, bio (200 chars), cover photo, profile image (auto-Gravatar), custom website URL
  • Social links — Bluesky, Threads, LinkedIn, Instagram, TikTok, YouTube, Mastodon, Facebook, X/Twitter (expanded Apr 2025)
  • Staff access tokens — Per-user API tokens
  • Email notification preferences — Configurable per user
  • Password management — Change/reset from login screen
  • Transfer ownership — Owner can transfer to any administrator

Security

  • Device verification — Email auth code on unrecognized device login (shipped Apr 2025)
  • Email 2FA — Two-factor authentication via email for all staff; optionally forced for all staff via config
  • History log — Full audit trail of all staff actions in admin
  • Private site mode — Shared password on frontend; disables SEO; blocks crawlers; generates private RSS URL

Site settings

  • Publication title and description
  • Publication timezone — Configurable timezone for dates
  • Publication language — For i18n/translation
  • Site navigation — Primary and secondary menus
  • Social accounts — Facebook and X/Twitter links
  • Meta settings — Site-wide meta title, description
  • Design & branding — Accent color, icon, logo, cover image, description, custom fonts
  • Code injection — Header and footer
  • Analytics toggles — Enable/disable individual analytics features
  • Member settings — Signup access, tiers, Portal configuration, default post access
  • Email settings — Newsletters, sending domain, Mailgun config
  • Stripe connection — Test/live mode toggle

Labs

  • Experimental feature toggles for beta/pre-release features
  • Currently/recently includes: Portal translation, Tips & Donations, Social web (ActivityPub), Import/Export tools, routes.yaml upload
  • enableDeveloperExperiments — Hidden config flag for alpha features
  • Features graduate from Labs to GA over time (e.g., Members, Lexical editor, ActivityPub)

10. Analytics & reporting

Native web analytics (shipped Ghost 6.0, Aug 2025)

  • First-party, cookie-free — No cookies or persistent browser storage; 24-hour unique visitor windows
  • Powered by Tinybird/ClickHouse — EU data storage on Ghost(Pro); self-hosters need Tinybird API key
  • Real-time visitor count — Live count of current site visitors
  • Unique visitors and total views — With date range filter (today → all time)
  • Audience segment filter — Public visitors, free members, paid members
  • Top content — Posts, pages, or combined; sortable
  • Top sources / referrers — Where traffic comes from
  • UTM parameter support — Full UTM searchable and filterable (shipped Jan 2026)
  • Chainable filters — Complex filter queries on analytics data (shipped Jan 2026)
  • Location data — World map and country-level visitor breakdown
  • Per-post web analytics — Unique visitors, views, locations, sources per post; filterable by date and audience

Newsletter analytics

  • Total subscribers — Count with growth graph over time
  • Average open rate — Across all newsletters in date range
  • Average click rate — Across all newsletters
  • Top newsletters table — Sortable by performance
  • Newsletter filter — Filter by individual newsletter
  • Per-post newsletter stats — Sent count, opens (count + rate vs. average), clicks (count + rate vs. average)
  • Per-link click breakdown — Which specific links got most engagement
  • Per-member detail — Drill down to see which members opened or clicked
  • Open tracking — Via tracking pixel (Apple Mail Privacy Protection caveat noted)
  • Click tracking — Via link redirect system
  • Audience feedback per post — "More like this" / "Less like this" breakdown

Growth analytics

  • Total members — Free + paid with historical graph
  • Free vs. paid breakdown — Separate counts and graphs
  • Cadence breakdown — Monthly vs. annual paid subscribers (shipped Jan 2026)
  • Tier breakdown — Per-tier subscriber counts (shipped Jan 2026)
  • Paid subscription changes — Daily/weekly/monthly add/cancel graph
  • MRR (Monthly Recurring Revenue) — Normalized monthly revenue; canceled subs removed at cancellation; "forever" discounts deducted
  • Top content for growth — Which posts/pages/sources drove most signups and revenue
  • Signup attribution — Source tracking for all new members

Analytics export & configuration

  • CSV export — Post metrics for last 1,000 posts; exportable from Settings
  • Granular toggles — Enable/disable individual analytics features
  • Third-party analytics — Google Analytics, Plausible, Fathom, etc. via code injection

11. ActivityPub & social web

Launched as public beta March 2025; GA in Ghost 6.0 (August 2025). Built as a separate TypeScript service using the Fedify framework (multi-tenant ActivityPub server). Ghost is a founding sponsor of the Social Web Foundation.

Federation

  • ActivityPub protocol — W3C standard; publications become federated Actors
  • Social web handle@index@yourdomain.com (customizable username via Profile → Edit)
  • Cross-platform compatibility — Mastodon, Threads, Flipboard, WordPress (ActivityPub plugin), Ghost, WriteFreely, Surf
  • Bluesky support — Via Bridgy Fed bridge
  • Proxy routes/.ghost/activitypub/*, /.well-known/webfinger, /.well-known/nodeinfo
  • Requires custom domain — Does not work with subdirectory installs

Publishing to the social web

  • Automatic post distribution — Published posts automatically available on the Fediverse
  • Notes (microblogging) — Short-form updates published to social web; not displayed on website theme
  • No algorithms or suppression — Open protocol; content distributed directly to followers

Social web reader

  • Built-in reader — Read long-form content from followed ActivityPub accounts inside Ghost Admin
  • Reader customization — Adjustable background color, font, text size
  • Explore / discovery — Search for and follow accounts across the Fediverse

Interactions

  • Follow — Follow any ActivityPub account
  • Like — Like posts across platforms
  • Reply — Reply to content across platforms
  • Repost — Reshare content
  • Notifications — Real-time notifications for follows, likes, replies, reposts in Ghost Admin
  • Moderation controls — Block individual accounts and entire domains from interacting

Technical architecture

  • Separate repo: TryGhost/ActivityPub (TypeScript, 218 stars)
  • Built with Fedify framework
  • MySQL database with migration tooling
  • Docker Compose deployment
  • Proxied by Nginx

12. Comments & engagement

Native comments

  • Built-in commenting — Members-only comment system on posts
  • Access control — Enable for all members or paid-members only
  • Member profile context — Optional short profile title shown alongside member name in comment threads
  • Threaded replies — Nested reply threads (upgraded Dec 2024)
  • Sorting — Best (by likes), newest, oldest
  • Moderation — Approve, hide, delete comments; search comments
  • Comments dashboard — Centralized management across all posts (shipped Feb 2026)
  • Reporting — Members can report comments; owners notified via email
  • Flags — Members can flag problematic comments for staff review
  • On-page moderation — Staff can moderate directly from comment thread
  • Comment bans — Ban members from commenting, with option to hide prior comments
  • Member actions — Create, edit, delete own comments
  • Newsletter CTA — Optional commenting link in newsletter footer to drive engagement
  • CTA at top — Signup call-to-action at top of comments for non-members

Technical implementation

  • React-based JavaScript widget (apps/comments-ui)
  • Loaded via jsDelivr CDN
  • Configurable/relocatable/disablable via config
  • Theme integration via {{comments}} in templates

13. Hosting & infrastructure

Ghost(Pro) managed hosting

  • Fully managed — Automated installs, upgrades, backups, performance optimization
  • 14-day free trial — All plans
  • Automatic weekly updates — Ghost version updates applied automatically
  • Worldwide CDN — Fastly edge network
  • Enterprise security — 24/7 DDoS mitigation, WAF, brute force protection, automatic rate limiting
  • Automated backups — Regular automatic backups
  • Free SSL — Included on all plans
  • Custom SSL — Business ($50/mo addon) or Custom
  • Free custom domain — ghost.io subdomain + 1-year free .link domain (via Entri DNS integration)
  • Custom domain support — Any domain via CNAME
  • Subdirectory install — e.g., example.com/blog (Business $50/mo addon or Custom)
  • Dedicated IP — Custom plan only
  • 99.9% uptime SLA — Custom plan only
  • Carbon neutral — Via Stripe Climate
  • EU data storage — Analytics data stored in EU regions

Pricing tiers (Ghost(Pro), as of 2026)

Starter ($15/mo annual)Publisher ($29/mo annual)Business ($199/mo annual)Custom
Staff users1315Unlimited
Members included1,0001,00010,000Unlimited
Upload limit5 MB100 MB250 MB1 GB
Newsletters1310Unlimited
Premium tiers310Unlimited
Offers1550Unlimited
Paid subscriptions
Custom themes
Custom sending domain
Advanced analytics
Webhooks/Zapier/API
Priority supportAccount manager
SSO (SAML/OAuth)

All plans include: whitelabel branding, design settings, i18n, comments, member tagging, import/export, social web (ActivityPub), Ghost Explore, recommendations, SEO, RSS, unlimited sends, email design, managed deliverability, analytics, embedded media, Slack, Content API, security features, CDN, SSL.

Self-hosting

  • Open source — MIT licensed; full source on GitHub
  • Production stack — Ubuntu 24, Node.js 22, MySQL 8, Nginx, systemd
  • Docker Compose — Official deployment method (developer preview in 6.0; default from 7.0)
  • Ghost-CLI — CLI tool for installation and management (npm install -g ghost-cli)
  • Configuration — nconf-based; config.production.json; all options overridable via environment variables (double-underscore nesting)
  • Let's Encrypt SSL — Automated via Ghost-CLI + acme.sh
  • Process management — systemd (production); auto-restart on crash; runs as unprivileged ghost user
  • Default port — 2368

Ghost-CLI commands

  • ghost install / ghost install local / ghost install [version]
  • ghost setup (mysql, nginx, ssl, linux-user, systemd, migrate — individually runnable/skippable)
  • ghost config — Configure settings
  • ghost start / ghost stop / ghost restart
  • ghost update / ghost check-update
  • ghost doctor / ghost doctor startup / ghost doctor setup — Diagnostics
  • ghost ls — List all instances
  • ghost log — View logs
  • ghost backup — Generate backup zip
  • ghost migrate — Run migrations
  • ghost uninstall

Configuration options

  • url — Public site URL (required)
  • database — MySQL/SQLite connection; connection pooling; SSL support (Amazon RDS, custom CA)
  • mail — Nodemailer-based; SMTP transport; Mailgun (recommended), Amazon SES, any SMTP
  • admin — Separate admin URL/protocol
  • server — Host and port
  • privacy — Disable update check, Gravatar, structured data (useTinfoil: true for all)
  • security — Disable staff device verification; force 2FA
  • paths — Custom content directory
  • logging — Level, rotation, transports, path, timezone
  • spam — Spam request handling
  • compress — Response compression toggle
  • imageOptimization — Auto resize toggle
  • caching — Configurable maxAge for: frontend, contentAPI, robotstxt, sitemap, publicAssets, redirects, CORS, well-known
  • opensea — OpenSea API key for NFT embeds
  • tenor — Tenor/Google API key for GIF search
  • twitter — Bearer token for newsletter card rendering
  • portal / sodoSearch / comments — Relocate or disable frontend scripts
  • pintura — Image editor integration config

Adapter system (pluggable layers)

  • Storage adapters — Default: local-file-store; 20+ community adapters (S3, Cloudinary, Google Cloud, Azure, Backblaze B2, GitHub, BunnyCDN, WebDAV, Tencent COS, Aliyun OSS, etc.); custom adapters extend ghost-storage-base with save(), exists(), serve(), delete(), read()
  • Cache adapters — Default: in-memory; built-in Redis adapter; custom via @tryghost/adapter-base-cache with TTL and key prefix support
  • SSO adapters — SAML, OAuth, identity provider support
  • Scheduling adapters — Custom scheduling backends

14. Migration & import/export

Migration CLI tool

  • npm install -g @tryghost/migrate
  • Generates Ghost-compatible ZIP for import

Supported source platforms (20+)

Substack, BeeHiiv, WordPress (API + XML), Newspack, Medium (content + members), Squarespace, Kit (ConvertKit), Mailchimp, Patreon, Buttondown, Memberful, Gumroad, Jekyll, Blogger, Chorus, Curated (content + members), Letterdrop, Libsyn, Stripe, Tiny News (content + members), Ghost-to-Ghost

Import/export formats

  • Content import — Ghost JSON format
  • Content export — Ghost JSON (from Settings → Labs)
  • Member import — CSV with email, name, note, subscribed_to_emails, complimentary_plan, stripe_customer_id, created_at, labels
  • Member export — CSV with all metadata
  • Theme download — .zip
  • Routes export — routes.yaml download from admin
  • Redirects export — redirects.yaml download
  • Analytics export — CSV for last 1,000 posts
  • Full backupghost backup CLI command (database + content folder + config)
  • Complete data export — Full site data available via Ghost(Pro) support request

15. Recommendations

  • Recommend other publications — Cross-promote publications to your audience
  • Custom title and description — Per recommendation
  • Popup after signup — Recommendations displayed to new members after email confirmation
  • Direct URL access/#/portal/recommendations; can add to site navigation
  • Incoming recommendation tracking — See which publications recommend you
  • Click and subscription stats — Track referrals sent and received
  • Built on Webmentions — Open standard; works cross-platform (not Ghost-only)
  • Mutual discovery — Network effects from reciprocal recommendations

  • Built-in full-text search — Searches post titles and excerpts
  • Coverage — Most recent 10,000 posts
  • Keyboard shortcut — Cmd/Ctrl + K
  • No configuration required — Works out of the box with any theme
  • Implementation — React widget (@tryghost/sodo-search); loaded via jsDelivr CDN
  • Theme integration{{search}} helper or data-ghost-search attribute
  • Configurable — Can relocate or disable via sodoSearch config

Advanced search (Algolia)

  • Algolia Ghost CLI — Index population tool for sites with 10,000+ posts
  • Netlify Functions — Webhook-based index updates
  • For complex search requirements beyond native capabilities

17. Announcements & promotions

Announcement bar

  • Site-wide banner — Prominent announcement at top of site
  • Custom text and background color — Configurable copy and color
  • Visibility targeting — Show to logged-out visitors, free members, paid members, or any combination
  • Works with any theme — Universal compatibility
  • Implementation — React widget (apps/announcement-bar)

Offers (see Membership & Subscriptions §Offers)

Ghost Explore (discovery engine)

  • Publisher directory — explore.ghost.org showcases indie Ghost publications
  • Category organization — Art & Culture, Business, Education, Technology, etc.
  • Ranking algorithm — Powered by ahrefs/OpenRank (domain authority, search rankings)
  • Social web category — Find Ghost publications on the Fediverse
  • Growth metric sharing — Optionally share metrics to boost ranking
  • Auto-enabled — For all Ghost 6.0+ sites; can be toggled off
  • Shipped November 2025

Milestone emails

  • Automatic milestone notifications — Sends celebratory emails at key member and revenue milestones
  • Increment thresholds — Includes checkpoints such as 100, 1K, 10K, 25K, 50K, 100K, 250K, 500K, and 1M

18. Portal (membership UI)

  • Built-in signup/login overlay — Works with any theme; no code required
  • React SPA — Loaded as script tag (@tryghost/portal)

Portal screens

  • #/portal/signup — Signup form
  • #/portal/signin — Login form
  • #/portal/account — Member account management
  • #/portal/account/plans — Subscription plan management
  • #/portal/account/profile — Profile editing
  • #/portal/recommendations — Recommended publications
  • #/portal/signup/TIER_ID/monthly or /yearly — Direct tier signup

Configuration

  • Plan selection — Choose which tiers and prices (monthly, yearly, both) appear
  • Display name field — Toggle optional name collection
  • Default price — Set monthly or yearly as default
  • Portal button — Show/hide; style (icon+text, icon only, text only); custom icon upload (SVG/PNG/JPG ≤60px); custom text
  • Brand customization — Colors match publication brand
  • Hidden mode — Hide button but retain functionality via URL hash links and data-portal attributes
  • Support email — Configurable public support address
  • Account management — Members manage subscriptions, update payment, switch tiers, manage newsletter preferences
  • Stripe billing portaldata-members-manage-billing and data-members-edit-billing attributes

19. Routing

Dynamic routing (routes.yaml)

  • Location: content/settings/routes.yaml; upload/download via Settings → Labs
  • Three sections:
    1. routes: — Map individual URLs to templates; supports controller: channel with filter, order, template; custom data property
    2. collections: — Groups of posts with unique URL structures, permalink patterns, filters, templates, posts_per_page
    3. taxonomies: — Tag and author archive URL configuration (default: /tag/{slug}/, /author/{slug}/)

Routing capabilities

  • Custom homepage — Landing page at / + posts at /blog/ or other path
  • Multiple collections — e.g., /blog/ and /podcast/ with different filters
  • Content hubs/channels — Filtered views with custom ordering
  • Custom orderingorder: featured desc, published_at asc
  • Permalink patterns/{slug}/, /{year}/{slug}/, /{primary_tag}/{slug}/, etc.
  • Content-type routescontent_type: text/xml for custom RSS/XML feeds
  • Custom RSS feeds — Via routes + Handlebars templates generating XML

URL structure

  • Posts/{slug}/ (default); customizable via collections
  • Pages/{slug}/
  • Tags/tag/{slug}/ (default); customizable
  • Authors/author/{slug}/ (default); customizable
  • RSS/rss/; per-tag /tag/{slug}/rss/; per-author /author/{slug}/rss/
  • Private RSS — Special URL when private site mode enabled

Redirects

  • redirects.yaml in content/data/
  • Upload via admin settings
  • 301/302 support
  • Regex patterns supported
  • Not for www/HTTPS redirects (use DNS)

20. Internationalization

  • 60+ language support — Set publication language in admin settings
  • Automatic translations — Portal, newsletters, search, comments auto-translated based on publication language
  • Theme translation helper{{t}} / {{translate}} for custom theme strings
  • Per-locale JSON files — Translation files in theme locales/ directory
  • RTL support — Right-to-left language support in themes
  • Configurable timezone — For publication dates and scheduling
  • Shipped November 2024

Technical architecture summary

Ghost is a Yarn v1 + Nx monorepo (MIT licensed, ~51.5k GitHub stars). The workspace divides into ghost/* (core platform) and apps/* (frontend React applications).

Core stack

  • Backend: Node.js + Express.js
  • Database: MySQL 8 (production) / SQLite (development)
  • ORM: Bookshelf.js over Knex.js
  • Admin UI: Ember.js (legacy) + React/Tailwind (Admin-X, progressively replacing Ember)
  • Editor: Koenig — React + Meta's Lexical framework (separate TryGhost/Koenig repo)
  • Frontend: Handlebars server-side templating
  • Member apps: React (Portal, Comments, Search, Signup Form, Announcement Bar)
  • Analytics: Tinybird/ClickHouse integration
  • Payments: Stripe
  • ActivityPub: TypeScript service built with Fedify framework (separate TryGhost/ActivityPub repo)
  • Error tracking: Sentry
  • CDN: Fastly (Ghost(Pro))
  • CI: GitHub Actions + Playwright E2E

Key monorepo packages

PackageRole
ghost/coreMain application — Express server, API, models, services, migrations, frontend
ghost/adminEmber.js admin dashboard
apps/admin-x-settingsReact-based settings UI (replacing Ember)
apps/admin-x-frameworkShared React framework for admin
apps/admin-x-design-systemComponent library for Admin-X
apps/portalMember signup/login/account widget
apps/comments-uiComment system frontend
apps/sodo-searchSite search UI
apps/signup-formEmbeddable signup form
apps/announcement-barAnnouncement banner
@tryghost/koenig-lexicalMain editor component
@tryghost/kg-default-nodesAll editor card/node definitions
@tryghost/kg-lexical-html-rendererLexical → HTML (web + email targets)
@tryghost/content-apiContent API JavaScript SDK
@tryghost/admin-apiAdmin API JavaScript SDK
@tryghost/magic-linkPasswordless authentication
@tryghost/domain-eventsEvent-driven architecture backbone
@tryghost/custom-fontsFont management
  • TryGhost/Ghost — Main monorepo
  • TryGhost/Koenig — Editor monorepo
  • TryGhost/SDK — API client SDKs
  • TryGhost/Ghost-CLI — CLI installation/management tool
  • TryGhost/migrate — Migration tools (20+ source platform adapters)
  • TryGhost/ActivityPub — ActivityPub federation server
  • TryGhost/Source — Default theme
  • TryGhost/Casper — Classic default theme
  • TryGhost/Themes — Official theme collection
  • TryGhost/TrafficAnalytics — Analytics service (Tinybird bridge)
  • TryGhost/algolia — Algolia search integration
  • TryGhost/action-deploy-theme — GitHub Action for theme CI/CD
  • TryGhost/api-demos — API usage examples

On this page

Ghost: Complete product feature map1. Publishing & editorCore editorEditor cards (20+ card types)Content typesPost settings (per-post sidebar)Publishing modesContent storage2. Membership & subscriptionsMember authenticationSignup configurationFree membershipsPaid subscriptionsTips & donationsOffers & discountsMember managementWelcome flows3. Newsletter & emailNewsletter managementNewsletter template designEmail deliveryPost-send capabilitiesAudience feedbackEmail notifications (for publishers)4. Themes & designTheme systemTemplate hierarchyHandlebars helpersCustom theme settingsDesign settings (admin UI, no code)Code injectionImage handling5. Content managementTagsContent organizationCollections (via routes.yaml)NavigationRedirects6. SEO & metadata7. IntegrationsNative integrationsEmbed support (oEmbed)Third-party integrations (documented)Automation platformsCustom integrations8. APIsContent API (public, read-only)Admin API (private, read-write)WebhooksAdditional SDKs & toolsHeadless CMS usage9. Admin & settingsGhost Admin (web app)Staff roles & permissions (5 roles)Staff user profilesSecuritySite settingsLabs10. Analytics & reportingNative web analytics (shipped Ghost 6.0, Aug 2025)Newsletter analyticsGrowth analyticsAnalytics export & configuration11. ActivityPub & social webFederationPublishing to the social webSocial web readerInteractionsTechnical architecture12. Comments & engagementNative commentsTechnical implementation13. Hosting & infrastructureGhost(Pro) managed hostingPricing tiers (Ghost(Pro), as of 2026)Self-hostingGhost-CLI commandsConfiguration optionsAdapter system (pluggable layers)14. Migration & import/exportMigration CLI toolSupported source platforms (20+)Import/export formats15. Recommendations16. SearchNative search (Sodo Search)Advanced search (Algolia)17. Announcements & promotionsAnnouncement barOffers (see Membership & Subscriptions §Offers)Ghost Explore (discovery engine)Milestone emails18. Portal (membership UI)Portal screensConfiguration19. RoutingDynamic routing (routes.yaml)Routing capabilitiesURL structureRedirects20. InternationalizationTechnical architecture summaryCore stackKey monorepo packagesRelated repositories (~147 total in TryGhost org)