Independent technology for modern publishing, memberships, subscriptions and newsletters.
  • TypeScript 60.4%
  • JavaScript 37.3%
  • Handlebars 0.9%
  • CSS 0.8%
  • HTML 0.3%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Steve Larson 3a692ed26a
Some checks failed
ci.yml / Fixed dev:down and the dev:up watcher leaving Nx tasks running (#31789) (push) Failing after 0s
Publish E2E Runner Image / Build and push E2E runner to GHCR (push) Has been skipped
i18n Review Checks / Lint + test (push) Waiting to run
Koenig Demo / Build (push) Has been skipped
Koenig Demo / Deploy (push) Has been skipped
TypeScript inventory / inventory (push) Has been skipped
Fixed dev:down and the dev:up watcher leaving Nx tasks running (#31789)
no ref

Nx starts each task as the leader of its own process group, so `pnpm
dev:down` and the `dev:up` watcher only signalled nx. When nx was
SIGKILLed after the grace period, or exited on its own, its `vite build
--watch` and nodemon tasks ran on under launchd for hours.

- `dev:down` walks the process tree first, TERMs every process group in
it, then KILLs what survives.
- `dev:down` also stops this checkout's Nx tasks whose
`NX_INVOCATION_ROOT_PID` has exited, so earlier leaks get cleaned up.
Other checkouts' processes are left alone.
- The watcher records the tree on each poll, so it can still stop tasks
after nx exits, and it removes `.ghost-dev.pid`.
2026-10-11 10:03:54 +01:00
.agents Improved Fast Refresh for Shade component edits (#31776) 2026-10-11 09:53:32 +01:00
.amp Fixed small gaps in the host dev flow (#31757) 2026-10-11 06:37:02 +00:00
.changeset Fixed eslint and vite forking on jiti 1 in the Tailwind 3 packages (#31781) 2026-10-11 08:26:31 +00:00
.claude Updated shared Shade controls for the Admin 7 pill milestone (#30682) 2026-09-16 14:45:29 +02:00
.codex Fixed dev:up's background Ghost outliving its worktree or agent session (#31775) 2026-10-11 08:07:26 +00:00
.cursor Fixed small gaps in the host dev flow (#31757) 2026-10-11 06:37:02 +00:00
.devcontainer Fixed small gaps in the host dev flow (#31757) 2026-10-11 06:37:02 +00:00
.github Update GitHub Actions 2026-10-11 08:38:26 +00:00
.vscode Moved the devcontainer and Amp to the host dev flow (#31746) 2026-10-10 18:53:20 +00:00
apps Improved Fast Refresh for Shade component edits (#31776) 2026-10-11 09:53:32 +01:00
configs ✨ Removed Ember from the codebase (#31609) 2026-10-10 10:44:46 +01:00
docker Removed the Koenig Lexical UMD loading from the dev setup (#31771) 2026-10-11 06:47:55 +00:00
docs Added orphaned dev processes to pnpm dev:status (#31788) 2026-10-11 08:54:46 +00:00
e2e Fixed small gaps in the host dev flow (#31757) 2026-10-11 06:37:02 +00:00
ghost Added dev:down --all and dev:status --watch (#31779) 2026-10-11 08:33:24 +01:00
koenig Fixed eslint and vite forking on jiti 1 in the Tailwind 3 packages (#31781) 2026-10-11 08:26:31 +00:00
packages Removed the Koenig Lexical UMD loading from the dev setup (#31771) 2026-10-11 06:47:55 +00:00
patches Fixed Safari freezing when a modal closes in dev (#31673) 2026-10-09 12:58:05 +00:00
scripts Fixed dev:down and the dev:up watcher leaving Nx tasks running (#31789) 2026-10-11 10:03:54 +01:00
.coderabbit.yaml ✨ Removed Ember from the codebase (#31609) 2026-10-10 10:44:46 +01:00
.dependency-cruiser.cjs Changed Admin to stop loading the Ember app (#31608) 2026-10-10 09:42:27 +01:00
.dockerignore Moved the Ghost package from ghost/core to ghost (#31630) 2026-10-09 10:25:02 -04:00
.editorconfig 🎨 Formatted the repository with oxfmt (#30184) 2026-08-21 15:11:37 +00:00
.env.example Switched dev:mailgun script to use Mailgun API instead of SMTP (#29145) 2026-07-07 09:25:32 -07:00
.git-blame-ignore-revs Added the ghost package move to blame ignore revs (#31683) 2026-10-09 14:38:53 +00:00
.gitattributes Added automated Linear issue triage workflow (#26534) 2026-02-23 10:21:46 +00:00
.gitignore Fixed dev:up's background Ghost outliving its worktree or agent session (#31775) 2026-10-11 08:07:26 +00:00
.gitmodules Moved the Ghost package from ghost/core to ghost (#31630) 2026-10-09 10:25:02 -04:00
.lintstagedrc.cjs Moved the Ghost package from ghost/core to ghost (#31630) 2026-10-09 10:25:02 -04:00
.markdownlint-cli2.jsonc Wired the imported limit-service into the workspace 2026-09-08 11:06:45 +01:00
.node-version Updated node to 22.23.3 (#30972) 2026-09-24 14:27:39 +00:00
.nvmrc Updated node to 22.23.3 (#30972) 2026-09-24 14:27:39 +00:00
.nxignore Moved dev stack auto-start from VS Code tasks to postAttachCommand (#27547) 2026-04-24 20:29:12 +00:00
.oxfmtrc.json ✨ Removed Ember from the codebase (#31609) 2026-10-10 10:44:46 +01:00
.pnpmfile.mjs Moved the Ghost package from ghost/core to ghost (#31630) 2026-10-09 10:25:02 -04:00
.secretlintrc.json Replaced node-jose with jose for JWK and kid derivation (#30720) 2026-09-14 11:37:23 -04:00
AGENTS.md Added dev:up, dev:down and dev:status to run Ghost dev in the background (#31748) 2026-10-10 19:29:16 +00:00
compose.dev.analytics.yaml Changed the remaining dev modes to run Ghost on the host (#31726) 2026-10-10 13:07:37 +01:00
compose.dev.fake-mailgun.yaml Changed the remaining dev modes to run Ghost on the host (#31726) 2026-10-10 13:07:37 +01:00
compose.dev.mailgun.yaml Switched dev:mailgun script to use Mailgun API instead of SMTP (#29145) 2026-07-07 09:25:32 -07:00
compose.dev.storage.yaml Fixed pnpm dev:storage failing at boot (#31717) 2026-10-10 10:51:29 +00:00
compose.dev.stripe-tunnel.yaml Changed local Stripe development to a single dev:stripe command 2026-09-01 12:58:04 +01:00
compose.dev.yaml Fixed dev services waiting 5s for MySQL to report healthy (#31786) 2026-10-11 08:42:29 +00:00
CONTEXT-MAP.md Moved the Ghost package from ghost/core to ghost (#31630) 2026-10-09 10:25:02 -04:00
Dockerfile.production Added GHOST_VERSION to the self-hosting Docker image (#31730) 2026-10-10 09:05:42 -04:00
eslint.config.mjs Standardized in-repo scripts directory (#29410) 2026-07-16 20:05:42 -04:00
knip.json ✨ Removed Ember from the codebase (#31609) 2026-10-10 10:44:46 +01:00
LICENSE 2026 (#25910) 2026-01-21 12:04:46 +00:00
nx.json Cleaned up remaining Ember Admin leftovers (#31718) 2026-10-10 12:10:23 +01:00
package.json Added dev:down --all and dev:status --watch (#31779) 2026-10-11 08:33:24 +01:00
pnpm-lock.yaml Fixed eslint and vite forking on jiti 1 in the Tailwind 3 packages (#31781) 2026-10-11 08:26:31 +00:00
pnpm-workspace.yaml Fixed eslint and vite forking on jiti 1 in the Tailwind 3 packages (#31781) 2026-10-11 08:26:31 +00:00
README.md Switched ghost.org/docs links to docs.ghost.org (#30324) 2026-08-28 09:39:27 -05:00
SECURITY.md Switched ghost.org/docs links to docs.ghost.org (#30324) 2026-08-28 09:39:27 -05:00
skills-lock.json Added Tinybird agent skills (#30395) 2026-08-31 21:25:56 +00:00
sonar-project.properties Ignored Sonar tag-plus-digest Docker warnings (#27220) 2026-04-08 16:58:18 +01:00
vitest.config.mjs ✨ Removed Ember from the codebase (#31609) 2026-10-10 10:44:46 +01:00

 

Ghost Ghost

 

Ghost.org • Forum • Docs • Contributing • Twitter

Downloads Latest release Build status Contributors DPG Badge

 

Note

Love open source? We're hiring! Ghost is looking staff engineers to join the team and work with us full-time

Fiercely independent, professional publishing. Ghost is the most popular open source, headless Node.js CMS which already works with all the tools you know and love.

 

Ghost(Pro) Ghost(Pro)

The easiest way to get a production instance deployed is with our official Ghost(Pro) managed service. It takes about 2 minutes to launch a new site with worldwide CDN, backups, security and maintenance all done for you.

For most people this ends up being the best value option because of how much time it saves — and 100% of revenue goes to the Ghost Foundation; funding the maintenance and further development of the project itself. So you’ll be supporting open source software and getting a great service!

 

Quickstart install

If you want to run your own instance of Ghost, in most cases the best way is to use our CLI tool

npm install ghost-cli -g

 

Then, if installing locally add the local flag to get up and running in under a minute - Local install docs

ghost install local

 

or on a server run the full install, including automatic SSL setup using LetsEncrypt - Production install docs

ghost install

 

Check out our official documentation for more information about our recommended hosting stack & properly upgrading Ghost, plus everything you need to develop your own Ghost themes or work with our API.

Contributors & advanced developers

To contribute to Ghost, start with the contributing guide. To work on the monorepo, see the codebase documentation.

 

Ghost sponsors

A big thanks to our sponsors and partners who make Ghost possible. If you're interested in sponsoring Ghost and supporting the project, please check out our profile on GitHub sponsors ❤️

DigitalOcean • Fastly • Tinybird • BairesDev

 

Getting help

Everyone can get help and support from a large community of developers over on the Ghost forum. Ghost(Pro) customers have access to 24/7 email support.

To stay up to date with all the latest news and product updates, make sure you subscribe to our changelog newsletter — or follow us on Twitter, if you prefer your updates bite-sized and facetious. 🎷🐢

 

License & trademark

Copyright (c) 2013-2026 Ghost Foundation - Released under the MIT license. Ghost and the Ghost Logo are trademarks of Ghost Foundation Ltd. Please see our trademark policy for info on acceptable usage.