Ghost
Open-source publishing platform with newsletters and memberships, driven through the official Admin API.
Ghost is a Node.js CMS for publications: posts, pages, paid memberships, tiers, and email newsletters. It runs self-hosted from a JSON config or on the Builder's Ghost(Pro) service. The Builder documents an Admin API and Content API with an official JavaScript client, which is how an agent creates, publishes, and emails content.
- I publish a newsletter and blog and want members and payments without Substack's cut
- I want my agent to draft posts, schedule them, and email subscribers through a real API
- Production requires MySQL 8; SQLite is dev-only
- Self-hosted newsletters need a Mailgun account for bulk sending; SMTP only covers transactional mail
- Admin API uses short-lived JWTs minted from an Admin API key; the official @tryghost/admin-api client handles this
- The repo's .env.example is empty of variables; configuration is the config.*.json family, not .env
- Third-party MCP wrappers exist (for example MFYDev/ghost-mcp) but are not needed for operability
Last activity Sep 3, 2026. Fit: adaptable 3, operable 3.
Editions
Self-hosted · Free open source
- Clone
git clone https://github.com/TryGhost/Ghost - Install
npm install ghost-cli -g && ghost install
Ghost(Pro) Starter · $18 per month closed source
- HostedOpen the hosted app
Ghost(Pro) Publisher · $29 per month closed source
No distribution recorded.
Ghost(Pro) Business · $199 per month closed source
No distribution recorded.
Adaptable: what is yours to change
Make it yours
Light edit13 things to editdeployment-plus-code surface
config.production.json (or the same keys as double-underscore env vars) is deployment configuration: url, database, mail transport, storage. Branding, navigation, tiers, newsletters, portal and the Stripe connection are set in Ghost Admin (Design and branding, Membership, Newsletters). Anything beyond a theme's exposed custom settings is Handlebars code in content/themes/<theme>/: default.hbs, index.hbs, post.hbs, partials/ and the theme package.json that declares custom settings and posts_per_page.
- Env vars
urlNODE_ENVdatabase__clientdatabase__connection__hostdatabase__connection__userdatabase__connection__databasemail__transportmail__options__auth__user- Config files
config.production.jsonconfig.development.jsoncontent/themes/<theme>/package.jsoncontent/themes/<theme>/default.hbscontent/themes/<theme>/partials/- Prompt files
- none
- Accounts you need
- Mailgun (bulk newsletter delivery, self-hosted)Stripe (paid memberships)
Source
- github.com/TryGhost/Ghost
- MIT license
- Last commit Sep 3, 2026
- 55,112 stars
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 8 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Write and publish posts and pages | Reachable | Admin API resources: Posts, Pages |
| Organize with tags | Reachable | Admin API resource: Tags |
| Manage members, labels, and offers | Reachable | Admin API resources: Members, Labels, Offers |
| Set up paid tiers | Reachable | Admin API resource: Tiers |
| Send a post as an email newsletter | Reachable | Admin API resource: Newsletters; posts publish with newsletter and segment parameters |
| Upload images | Reachable | Admin API resource: Images |
| Upload and activate themes | Reachable | Admin API resource: Themes |
| Register webhooks | Reachable | Admin API resource: Webhooks |
| Read post and email analytics | Not reachable | not among Admin API resources; stats live in the admin UI |
| Moderate member comments | Not reachable | not among Admin API resources |
Code stack
- Languages
- JavaScriptTypeScript
- Frameworks
- ExpressEmber (admin)KnexHandlebars themes
- Package manager
- yarn
- Database
- MySQL 8SQLite (dev)
- Hosting target
- Ubuntu with ghost-cliDockerGhost(Pro)
- Built
- Human-written (recorded, never ranked)
Skills
Repo tooling for Ghost contributors: Admin API endpoints, database migrations, the Shade design system.
- Kind
- contributor
- Paths
.agents/skills/*/SKILL.md
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: headless Node.js CMS with admin UI, installed with ghost-cli | 95% |
| executionModel | no model at runtime; no model SDK in stack | 95% |
| operability | docs.ghost.org/admin-api: Admin API with official @tryghost/admin-api client, published by TryGhost | 95% |
| effort | docs.ghost.org config documents config.<env>.json and env var mapping; theme directory documented; triage confirmed | 70% |
| editions | ghost.org/pricing: Starter $18, Publisher $29, Business $199 per month billed yearly; self-host from source with ghost-cli | 70% |
| active | pushedAt 2026-09-03; 145 open issues | – |
| provenance | project since 2013 with foundation and paid staff; no vibe-coded claim | 90% |
| reach | 85% |
Open questions
- Confirm current Ghost(Pro) monthly-billed prices; the fetched figures are the yearly-billed rates
- Verify the exact env var mapping on docs.ghost.org/config (not re-fetched during analysis)
Sources
- github.com/TryGhost/Ghost sourcing:content-publishing:github
- docs.ghost.org/admin-api/ analysis:content-publishing
- ghost.org/pricing/ analysis:content-publishing