Install the theme
Follow the steps below to upload the theme:
- Log in to your publication admin section at
yoursite.com/ghost/ - Go to Settings > Design (
/ghost/#/settings/design/) - Click Change theme (
/ghost/#/settings/design/change-theme) - Click Upload theme and select the
prose.zipfile. - After the upload is complete, under Installed themes click Activate
Routes setup
Caution
For the theme to function properly you must upload the routes.yaml file.
The file is located inside the prose.zip
Follow the steps below to upload the routes.yaml file (this is a separate step from theme upload)
- Log in to your publication admin section at
yoursite.com/ghost/ - Go to Settings > Labs (
/ghost/#/settings/labs) - In the Routes section, click Upload routes file and select the
routes.yamlfrom the root directory of the theme.
The zip’s routes.yaml matches how this theme expects URLs to behave. If you want the full picture of what you can do with routing in Ghost—collections, channels, taxonomies, and static routes—see the blog overview Ghost CMS dynamic routing & routes.yaml.
This is a testing ground for new or experimental features. They may change, break or inexplicably disappear at any time.
more info in the docs
Custom settings
The theme comes with custom design settings, which are accessible from the Ghost Admin panel.
To view and edit these settings go to Settings > Design & Branding ( yoursite.com/ghost/#/settings/design/)
Custom settings are defined in the package.json file.
These settings are placed under three categories:
- Site-wide settings
- Homepage settings
- Post settings
Here's a preview of the available settings:
Note
To avoid resetting your custom design settings during theme updates, make sure to use the same name for the .zip file or use the GitHub action to deploy your theme.
Homepage
The homepage is defined in home.hbs and consists of several sections, all
customizable from the design settings and the editor:
Hero
The hero section can display the following information:
- headline
- content
- image
By default, the headline uses your publication title (@site.title), the content uses your publication description (@site.description), and the image uses your publication cover image (@site.cover_image).
Tip
For more flexibility, create a page with the slug home-hero and add the content you want to display in the hero section, including a main heading, multiple paragraphs and editor cards, such as a button card for a CTA. If you upload an image to the page, it will be used as the hero image.

In addition, you can change the layout of the hero section from the design settings, with the following options:
- Text left & image right (demo)
- Text right & image left (demo)
- Text bottom & image top
- Text top & image bottom
- Text centered & image background (demo)
- Text only (demo)
Books
The books section displays posts with the #book tag. You can choose from the following layouts for the books section:
- Sections: each book is displayed as a horizontal card with a title, a cover image, and a short description. demo
- Grid: books are displayed in a 3-column grid with a cover image and a title. demo
- Carousel: books are displayed in a carousel with a cover image and a title. demo
In addition, you can limit the number of books to display on the homepage from the design settings.
Another option is to enable the book cover effect using CSS shadows, useful when you use flat images for the book covers and you want to add a subtle depth effect. You can enable or disable this option from the design settings.
Quote
To activate the quote section, create a page with the slug home-quote and add the quote using the product card.
The product card title will be used as the quote attribution (e.g. "John Doe").
The product card description will be used as the quote text.
The product card image will be used as the author's profile image.
Chapters
The homepage chapters section displays posts with the #chapter (slug: hash-chapter) tag.
The section shows up to 8 chapters, ordered by published date in ascending order.
Each chapter is displayed as a card with the post title and custom excerpt.
About
To activate the about section, create a page with the slug home-about and add the content you want to display, including a feature image. The content will be displayed on the left side and the image on the right side.
Praise
To activate the praise section, create a page with the slug home-praise and for each testimonial you want to display, create a product card with the testimonial text, the author's name and the author's profile image.
The cards will be displayed in a grid with 3 columns.
Writing
The writing section displays up to 6 most recent posts with the #writing (slug: hash-writing) tag.
The post titles are displayed as a list.
To customize the title and the description, create a page with the slug writing and the title and custom excerpt will be displayed in the section and a link to the writing page will be displayed.
Subscribe section
To activate the subscribe section, create a page with the slug subscribe and add the content you want to display. The content will be displayed on the left side and the subscribe form on the right side.
The section will use the brand color as the background.
Note
The section will only be displayed to non-logged in users.
Header
The header is defined in partials/header.hbs and it renders:
- publication logo (or publication title if no logo is set)
- primary navigation (with support for dropdown menus)
- search button (if enabled in the design settings)
- the color scheme toggle (if enabled in the design settings)
- call-to-action button (if set in the design settings)
Footer
The footer is defined in partials/footer.hbs and it has the following parts:
- publication logo and description
- the most recent featured book (
#booktag) - the secondary navigation & social links
- the copyright notice with the year, the publication name, and the theme name (Prose)
- the color scheme toggle (if enabled in the design settings)
Custom templates
Prose comes with 5 custom templates. You can select them from the Post/Page Settings menu, under Template:
custom-template-blank.hbs— a template to create pages without header and footer, like landing pagescustom-template-book.hbs— a template for bookscustom-template-book-with-chapters.hbs— a template for books (including chapters)custom-template-tags.hbs— a template for tags pagecustom-template-testimonials.hbs— a template for testimonials page
Books
The books page is a collection defined in routes.yaml holding all posts with the #book (slug: hash-book) tag. The books are displayed in a 4-column grid with a cover image and a title.
Important
In addition to uploading the routes.yaml file, you also need to create a page with the slug books.
Newsletter
The newsletter page is a collection defined in routes.yaml holding all posts with the #newsletter (slug: hash-newsletter) tag. Posts are displayed in reverse chronological order grouped by year and month.
Important
In addition to uploading the routes.yaml file, you also need to create a page with the slug newsletter.
Writing
The writing page is a collection defined in routes.yaml holding all posts with the #writing (slug: hash-writing) tag.
Important
In addition to uploading the routes.yaml file, you also need to create a page with the slug writing.
To add the topics sidebar, add tags in page settings.
Color customization
You can change the main accent color from Settings › Design › Brand.
The most important CSS configurations of the theme are defined as custom CSS properties,
so you can easily overwrite them from Code Injection to change background colors,
text colors, and more.
The theme includes several color schemes. You can set the default in Ghost Admin using Default color scheme in Settings › Design › Site-Wide.
The included color schemes:
- system
- light
- dark
The default is system, which follows the user's preference (dark or light).
You can change the colors by overriding the CSS properties. Add the following in Code Injection and adjust the values.
To change the light theme:
<style>
:root {
--color-typ: hsl(0, 0%, 5%);
--color-typ-tone: hsl(0, 0%, 30%);
--color-typ-content: hsl(0, 0%, 25%);
--color-bgr: hsl(0, 0%, 99%);
--color-bgr-tone: hsl(0, 0%, 96%);
--color-brd: hsl(0, 0%, 90%);
}
</style>
To change the dark theme:
<style>
html[data-color-scheme="dark"]:root {
--color-typ: hsl(0, 0%, 90%);
--color-typ-tone: hsl(0, 0%, 70%);
--color-typ-content: hsl(0, 0%, 80%);
--color-bgr: hsl(0, 0%, 4%);
--color-bgr-tone: hsl(0, 0%, 9%);
--color-brd: hsl(0, 0%, 15%);
}
</style>
Some useful tools for choosing colors and gradients:
Typography
By default the theme uses the Outfit font for headings and Crimson Text for body.
You can change the fonts from Settings › Design › Brand › Typography, with several options for both body and headings.
If you want to use a custom font, you can check out this guide on how to add custom fonts.
In addition, you can change the font family for the UI (header, footer, buttons, etc.) from Settings › Design › Theme › UI font family, as well as the font weight for the headings from Settings › Design › Theme › Heading font weight.
Dropdown menus
prose comes with a custom feature to create
dropdown menus easily for your header navigation. All you have to do is add the
minus sign (-) in front of the items in Settings > Navigation
Items having the - sign will be added as subitems to the previous navigation item.
For example:
Ghost config
Some configurations in Ghost themes can be defined in the package.json file, including
Posts per page, Image sizes, and Custom settings.
Posts per page
The posts_per_page defines the number of posts that appear in your collections until it's paginated.
For example, the value of posts_per_page is used on the home page, tag, and author templates.
You can change it in the package.json file:
"config": {
"posts_per_page": 12
}
Image sizes
Ghost can handle responsive image sizes,
and this is defined in the package.json file, under the image_sizes property.
You can change the default configuration by editing this file before uploading the theme.
"image_sizes": {
"xxs": {
"width": 30
},
"xs": {
"width": 100
},
"s": {
"width": 320
},
"m": {
"width": 640
},
"l": {
"width": 960
},
"xl": {
"width": 1280
},
"xxl": {
"width": 2000
}
}
The sizes defined will be used to generate copies of images at the specified sizes when uploading images in your Ghost Admin.
Comments
The theme uses the native Ghost comment feature. The Native Comment System requires at least Ghost v5.9.0, you have to enable it from Settings > Membership > Access > Commenting.
Here are the options you can choose from:
All members- Logged-in membersPaid-members only- Only logged-in members with an active subscriptionNobody- Disable commenting completely
Icons
The icons used in the theme are from Tabler Icons, the library consists of 5000+ icons.
Only the icons used in the theme are included in the partials/icons directory
in separate .hbs files.
Here are the steps to add new icons:
- Go to Tabler Icons and click on the Icon you want to add, this will copy the code to your clipboard.
- Go into the
partials/iconsdirectory and create a new file:your-icon.hbs - Open the new file and paste the copied code from the clipboard.
- Save the file.
For using the icons inside the theme files, there is a special partial file
partials/icon.hbs which accepts name and size as parameters.
Let's see an example and try to add a new icon. Assuming we want to add the icon
camera and by clicking on the icon on the website, we get this code:
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-camera" width="24" height="24" viewBox="0 0 24 24" strokeWidth="1.5" stroke="#2c3e50" fill="none" strokeLinecap="round" strokeLinejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2" />
<circle cx="12" cy="13" r="3" />
</svg>
The next step is to create a new file: partials/icons/camera.hbs and paste the copied code in the file.
The new file must be of .hbs type, so we can use it into the theme files:
{{>icon name="camera"}}
Social links
Social links are shown in the footer by default.
The basic social links that Ghost comes with can be edited from Settings > General settings > Social accounts.
The theme also comes with additional social platforms, like:
- discord
- github
- telegram
- tiktok
To activate any of these platforms, add the following in your Settings > Code Injection > Site footer.
For example to activate GitHub:
<script>
socials.github = 'https://github.com/brightthemes'
</script>
Note
If you want to add a social that isn't listed, you have to add the corresponding
icon then modify the partials/social-links.hbs file, adding the block
similar to the other platforms there.
Translations
By default, everything is in English (en.json), additionally, the theme comes with translations in:
- 🇩🇪 German (
de.json) - 🇪🇸 Spanish (
es.json) - 🇫🇷 French (
fr.json) - 🇮🇹 Italian (
it.json) - 🇳🇱 Dutch (
nl.json) - 🇵🇹 Portuguese (
pt.json)
Note
For a translation to apply, you have to set the language in Settings > General Settings > Publication language.
If you want to edit the translation in a specific language, you have to edit the corresponding translation file.
The files are stored in the locales directory (inside the theme zip).
|__ locales
| |__ de.json
| |__ en.json
| |__ es.json
| |__ fr.json
If the language file for your language doesn't exist, you have to create it (make sure to use the correct language code)
The best way is to copy the content en.json file in your new language file, then change the translations.
Theme development
If you want to make more advanced changes to the theme, or you want to implement your own components, you can take advantage of the developer-friendly setup of the theme.
All the assets are combined and minified for better speed and performance. To customize the theme make sure you have Node.js installed.
The theme is built with TailwindCSS and Alpine.js. The development environment is based on Vite, the tasks can ran with npm scripts.
This guide is assuming that you have installed Ghost locally.
Add the theme directory inside Ghost's content/themes/ directory then move to the
theme directory in your command line. Run the npm install command to install all
the dependencies.
After that is done, you have access to run the npm scripts:
-
npm run dev(vite build --watch & vite) The dev script will start the development process, watching for changes and building. Thevite.config.jsfile contains the main configuration for Vite. -
npm run build(vite build) The build script will start the build process. -
npm run test(gscan . --verbose) The test will test the theme using gscan the official Ghost test tool. -
npm run zipThe zip script will create a zip file in thedistdirectory.
Code Snippets
Frequently asked questions and useful snippets you can use to make some quick changes to your site.
How to change the logo size?
Go to Ghost Admin › Settings › [Code Injection](/blog/ghost-code-injection/) and in the Site Header add the following, changing the values as needed:
<style>
:root {
--logo-h-mobile: 40px;
--logo-w-mobile: auto;
--logo-h-desktop: 64px;
--logo-w-desktop: auto;
}
</style>
How to hide "published with" from the footer?
Go to Ghost Admin › Settings › [Code Injection](/blog/ghost-code-injection/) and in the Site Header add:
<style>[data-footer-ghost],[data-footer-theme]{display:none;}</style>