
Ghost Project Structure
The world's most popular open-source publishing platform. A massive Node.js codebase transitioning from a legacy Ember.js admin to a modern React-based architecture.
Updated 2025-12-30
Project Directory
Repository Info
- Repository-TryGhost/Ghost
- Stars-45k+
- License-MIT
- Last Analyzed-December 2025
Tech Stack
- Backend-Node.js (Express)
- Database-MySQL (Prod) / SQLite (Dev)
- Legacy Admin-Ember.js
- Modern Admin-React + Vite
- ORM-Bookshelf.js / Knex.js
Architecture Notes
Ghost is a fascinating case study in legacy migration. It started as a monolithic Express + Ember app. Today, it's a monorepo (using Nx/Yarn Workspaces). The core server (ghost/core) still powers the API, but the UI is being broken apart into smaller, modern React applications (apps/admin-x-*) that are embedded into the legacy Admin panel.
Key Directories
- ghost/core/-The heart of Ghost. Contains the Content API, Admin API, and the Handlebars theme engine.
- ghost/admin/-The extensive Ember.js application that has powered Ghost's UI for a decade. It's stable but being gradually replaced.
- apps/-The future of Ghost's UI. Isolated React applications built with Vite that handle specific domains (Settings, Comments, Portal).
Why This Structure?
Ghost shows how to maintain and evolve a large, successful open-source project over a decade. It demonstrates pragmatic refactoring: keeping the reliable core (Node/Express) while incrementally modernizing the frontend (Ember -> React) without a complete rewrite.