Local development
Use this layout to run Ghost locally and work on the theme with live reload, without zipping and uploading after every change.
Recommended layout
Keep Ghost and the theme in sibling directories:
My Projects/
├── ghost-local/ ← Ghost install (ghost install local)
│ ├── content/
│ │ └── themes/
│ │ └── manny-roy → symlink to ../ghost-custom
│ ├── current/
│ └── ...
└── ghost-custom/ ← This theme repo (you are here)
├── assets/
├── partials/
├── default.hbs
└── ...
The theme is symlinked into Ghost’s content/themes/ so edits here are seen by Ghost (restart for new files; template/CSS/JS changes often refresh via livereload).
One-time setup
1. Install Ghost in a sibling directory
Option A — script (fresh install): From the directory above this repo (e.g. My Projects), run:
./ghost-custom/scripts/fresh-ghost-local.sh
Then start Ghost and link the theme (step 2).
Option B — manual: From the directory above this repo:
mkdir -p ghost-local
cd ghost-local
ghost install local
Follow the CLI prompts. Ghost runs at http://localhost:2368 and Admin at http://localhost:2368/ghost.
2. Link the theme into Ghost
Create a symlink so Ghost loads this theme (theme name in Admin will be manny-roy):
ln -s "/path/to/ghost-custom" "/path/to/ghost-local/content/themes/manny-roy"
Or from this repo, run the helper script (adjust paths as needed):
./scripts/link-theme-to-ghost.sh
3. Activate the theme in Ghost
- Open http://localhost:2368/ghost
- Complete setup (owner account, site title) if first run
- Go to Settings → Design
- Under “Installed themes”, select manny-roy and click Activate
4. Restart Ghost after adding the symlink
cd ghost-local
ghost restart
Daily workflow
Terminal 1 — Ghost:
cd ghost-local
ghost start
Terminal 2 — Theme build and watch:
cd ghost-custom
yarn dev
This builds CSS/JS to assets/built/ and watches for changes; livereload will refresh the browser when you edit templates or built assets.
What you can do
- Edit
.hbsfiles → save → refresh (or livereload) - Edit
assets/css/**/*.css→ Gulp rebuildsassets/built/screen.css→ refresh - Edit
assets/js/main.js→ Gulp rebuilds → refresh - New files (new partials, new
.hbs): runghost restartin the Ghost directory once so Ghost picks them up - package.json (e.g. custom settings):
ghost restartafter changes
Useful Ghost CLI commands (from ghost-local)
| Command | Purpose |
|---|---|
ghost start | Start Ghost |
ghost stop | Stop Ghost |
ghost restart | Restart (e.g. after new theme files or config) |
ghost log | View logs |
Troubleshooting
If you see errors on restart (e.g. “Cannot read properties of undefined (reading 'members')”):
- Node version: Ghost 6.19+ requires Node 22. Use
nvm use 22(or equivalent) in the Ghost directory. - Full error: Run
ghost run(instead ofghost start) to see the full stack trace. - Clean restart:
ghost stopthenghost start. - Reset DB only:
ghost stop, removecontent/data, thenghost start(re-run setup if prompted). - Fresh install: Run
fresh-ghost-local.shfrom above, then start Ghost and link the theme again.
See the repo docs/local-ghost-setup.md for more detail and platform-specific notes.