A dark, modern editorial theme for Ghost, built for journalism, newsletters, and digital publications that take their content seriously.
Live Demo · Download · Report a bug
- Deep dark aesthetic —
#08090dbackground with carefully tuned contrast ratios for comfortable long-form reading - Self-hosted fonts — Plus Jakarta Sans, EB Garamond, and JetBrains Mono loaded locally — no Google Fonts, no external requests
- Three font pairs — Switch between sans-serif, serif, and monospace title/body combinations from Ghost Admin
- Curated homepage — Five-row layout with automatic de-duplication: hero, featured posts, subscribe CTA, opinion section, and latest posts
- Full Ghost feature support — Members, subscriptions, tiers, search, comments, newsletters, recommendations
- Multiple header styles — Landing, Highlight, Magazine, Search, Off
- Feed styles — Grid and List modes
- 17 custom settings — Configurable directly from Ghost Admin, no code required
- 13 languages — Including Spanish
- Lightbox — PhotoSwipe integration for image galleries
- Infinite scroll — Automatic pagination on archive pages
- Ghost card support — Full styling for all Ghost editor cards
- Accessible — Keyboard navigation, ARIA labels, focus-visible styles, semantic HTML
- SEO-friendly — Structured data, proper heading hierarchy, clean markup
- Download the latest release zip file
- Go to Ghost Admin → Settings → Design & branding → Change theme → Upload theme
- Upload the zip and activate
git clone https://github.com/luisassardo/noir.git
cd noir
npm install
npm run buildThen symlink or copy the folder into your Ghost content/themes/ directory and restart Ghost.
Noir uses Gulp to compile CSS and JavaScript.
- Node.js v18+
- A running Ghost instance
| Command | Description |
|---|---|
npm run dev |
Start development mode with live reload |
npm run build |
Build CSS and JS for production |
npm run zip |
Build and create a zip in dist/ |
npm run test |
Validate theme with GScan |
npm run test:ci |
Run GScan in strict/fatal mode |
noir/
├── assets/
│ ├── built/ # Compiled CSS and JS
│ ├── css/ # Source CSS
│ ├── fonts/ # Self-hosted: Plus Jakarta Sans, EB Garamond, JetBrains Mono
│ ├── images/ # PhotoSwipe lightbox assets
│ └── js/ # Source JavaScript
├── locales/ # Translation files (13 languages)
├── partials/
│ ├── components/ # Navigation, header, footer, CTA, featured, post-list
│ ├── icons/ # SVG icon partials
│ └── typography/ # Font loading partials (sans, serif, mono)
├── default.hbs # Main layout template
├── home.hbs # Custom homepage
├── index.hbs # Paginated post archive
├── post.hbs # Single post template
├── page.hbs # Static page template
├── tag.hbs # Tag archive template
├── author.hbs # Author archive template
├── error.hbs # Error page
└── package.json # Theme metadata and build config
All settings are available in Ghost Admin → Settings → Design & branding → Customize.
| Setting | Options | Default |
|---|---|---|
| Title font | Modern sans-serif / Elegant serif / Consistent mono | Modern sans-serif |
| Body font | Modern sans-serif / Elegant serif | Modern sans-serif |
| Setting | Options | Default |
|---|---|---|
| Header style | Landing / Highlight / Magazine / Search / Off | Landing |
| Post feed style | List / Grid | Grid |
| Show images in feed | On/Off | On |
| Show author | On/Off | On |
| Show publish date | On/Off | On |
| Show sidebar | On/Off | Off |
| Show featured posts | On/Off | Off |
| Background image | On/Off | On |
| Setting | Options | Default |
|---|---|---|
| Show post metadata | On/Off | On |
| Drop caps on posts | On/Off | Off |
| Show related articles | On/Off | On |
The homepage opinion row filters posts tagged opinion. To use a different tag, edit home.hbs line 103:
- Based on Source by Ghost Foundation (MIT)
- Built by Luis Assardo
- Typography: Plus Jakarta Sans by Tokotype · EB Garamond by Georg Duffner · JetBrains Mono by JetBrains
- Lightbox: PhotoSwipe by Dmitry Semenov
MIT — free to use, modify, and distribute.