Getting Started

Installation

Install Quiet in five steps: upload quiet.zip in Ghost Admin, activate it, publish the three section pages, and add the routes file that powers the archive, the podcast and the video channel.

Quick start

Five short steps. The first three take a minute and your site is live on the new theme. Steps 4 and 5 belong together, and they unlock the article archive, the podcast page and the video channel.

Check your Ghost version first

Quiet needs Ghost 6.0.0 or later. On Ghost 5 the upload is rejected. You can see your version at the bottom of any Ghost Admin page, and there is more detail in the Compatibility guide.

Open theme settings

In Ghost Admin, go to Settings → Theme and click Change theme.

The theme settings screen in Ghost Admin

Upload the zip

Click Upload theme and choose quiet.zip.

Ghost checks the theme as it uploads. You should see no errors and no warnings.

Uploading quiet.zip

Activate

Click Activate when the upload finishes. Your site is now running Quiet.

Visit your homepage. Until you build any sections it shows a starter layout: your site title, your description and your most recent posts. That is deliberate, and Build your homepage picks up from there.

Publish the three section pages

The routes file in step 5 attaches a page to each of three addresses, so those pages have to exist before you upload it. Create them now as ordinary Ghost pages, each with an exact URL slug.

Page slugAddress it powersWhat the page provides
articles/articles/, your article archiveThe heading and the line under it, above the list of posts
podcast/podcast/, your podcast homeCover art, the show name, the description, and space for a player embed
videos/videos/, your video channelThe channel name, a tagline, and space for an intro or trailer

For each one: Pages → New page, give it a title, open the settings panel, set the Page URL to the slug above, then publish. A title alone is enough to start with; the guides for the archive, the podcast and the video channel cover the rest of the fields.

Setting a page slug in the Ghost editor

A missing page means a 404, feed included

An address whose page has not been published answers 404, and so does that section's RSS feed. If you do not want a podcast or a video channel yet, publish the pages anyway (they can be one line long) or leave those addresses unused: nothing else in the theme depends on them.

Upload the routes file

Quiet ships the file, so there is nothing to write. Two ways to get it:

  • From the theme zip. routes.yaml sits at the top level of quiet.zip. Unzip and take it from there.

  • From here. The same file, no unzipping:

    Download routes.yaml
    routes.yaml
    # Quiet — optional routing.
    #
    # The articles archive and the homepage are fully correct WITHOUT this file:
    # Ghost renders home.hbs for page 1 of the root collection and index.hbs from
    # /page/2/ onward. Uploading it in Ghost Admin → Settings → Labs → Routes adds
    # two things:
    #
    #   • a real first page for the archive at /articles/, instead of the archive
    #     starting at /page/2/ with no page 1;
    #   • the podcast at /podcast/ and the video channel at /videos/. This file is
    #     the ONLY way podcast.hbs and videos.hbs are ever reached: both templates
    #     are deliberately absent from the editor's Template dropdown, because they
    #     need the `posts` and `pagination` a plain page render does not have.
    #
    # ⚠ CREATE THE PAGES FIRST. Each data binding below reads a published Ghost
    #   page, and a data-bound route whose page does not exist yet responds 404 —
    #   including that section's RSS feed. Before uploading this file, publish
    #   THREE pages with these exact slugs: `articles`, `podcast`, `videos`.
    #   (Their titles are yours to choose; only the slug matters. No page slugged
    #   `home` is needed: `/` below is a plain template route, and the homepage
    #   composes itself from #home-* section pages instead.)
    #
    # The collections' data blocks are deliberately long-form, NAMED `page`, and
    # `redirect: false` — all three parts are load-bearing:
    #
    #   • The key `page` is what Ghost's meta layer reads: the route inherits the
    #     page's title, description and og/twitter/schema data, so /podcast/ is
    #     titled after the show instead of "Site title (Page 1)". A data block
    #     under any other name renders the same fields but silently loses all of
    #     that metadata. Templates read the page as {{page.title}} etc.
    #   • `redirect: false` because these pages' slugs equal their route paths,
    #     so the redirect buys nothing when the page exists — and when it is
    #     MISSING, a claiming route turns the pages router's fall-through into a
    #     301 back onto itself: an infinite redirect loop instead of a 404.
    #     (The shortform `data: page.podcast` forces redirect ON, which is why
    #     it is not used here despite being the documented idiom.)
    #   • `/: home` is a TEMPLATE route (a bare string names a template, per
    #     route-settings-parser.ts): no data binding, no page to 404 on, so the
    #     site root can never break. The homepage's content comes from the
    #     #home-* section pages home.hbs fetches itself.
    
    routes:
      /: home
    
    collections:
      # ⚠ /articles/ MUST stay first. With no collection mounted on "/", Ghost
      #   advertises the FIRST collection's feed as the site's RSS feed in <head>,
      #   and on a writer's site that has to be the essays feed, not a section's.
      #
      # ⚠ The three filters below are a PARTITION, and that is not decoration. A
      #   post can belong to only ONE collection: Ghost loads a post claimed by
      #   another collection, then discards it again before rendering, which leaves
      #   holes in pagination. So the NOT-IN list here must always be exactly the
      #   union of the positive filters below it, and a fourth section means
      #   extending it again.
      #
      # ⚠ Do not tag one post both #podcast and #video. /articles/ excludes it and
      #   /podcast/ claims it, because /podcast/ is registered first.
      /articles/:
        permalink: /{slug}/
        filter: 'tag:-[hash-podcast,hash-video]'
        template: index
        data:
          page:
            resource: pages
            type: read
            slug: articles
            redirect: false
    
      # The podcast. Episodes are ordinary posts carrying the internal tag
      # #podcast. The show's own identity — cover art, name, description, the
      # player embed, and the route's own metadata — comes from the page slugged
      # "podcast", read in the template as {{page.*}}.
      #
      # ⚠ Tagging an already-published post #podcast moves it from /its-slug/ to
      #   /podcast/its-slug/, and Ghost writes no redirect for that. Migrating an
      #   existing show means adding the old paths to redirects.json.
      # rss: false — Ghost would otherwise mount /podcast/rss/, a feed with no
      # <enclosure> elements, which is exactly the feed the comment below warns
      # would mislead podcast apps. The show's real feed lives with its host
      # (Spotify/Transistor/etc.), linked through the platform-links row.
      /podcast/:
        permalink: /podcast/{slug}/
        filter: 'tag:hash-podcast'
        template: podcast
        rss: false
        data:
          page:
            resource: pages
            type: read
            slug: podcast
            redirect: false
    
      # The video channel. Films are ordinary posts carrying the internal tag
      # #video. The channel's own identity — name, description, any extra body
      # copy, and the route's own metadata — comes from the page slugged "videos",
      # read in the template as {{page.*}}.
      #
      # RSS stays enabled here, unlike the podcast's (rss: false above): a
      # blog-style feed of a film's show notes is a legitimate feed, whereas a
      # podcast feed with no <enclosure> would mislead podcast apps.
      #
      # ⚠ Tagging an already-published post #video moves it from /its-slug/ to
      #   /videos/its-slug/, and Ghost writes no redirect for that. Migrating an
      #   existing channel means adding the old paths to redirects.json.
      /videos/:
        permalink: /videos/{slug}/
        filter: 'tag:hash-video'
        template: videos
        data:
          page:
            resource: pages
            type: read
            slug: videos
            redirect: false
    
    taxonomies:
      tag: /tag/{slug}/
      author: /author/{slug}/

In Ghost Admin, go to Settings → Labs → Beta features → Upload routes file and choose the file you just saved.

Uploading the routes file in Ghost Labs

Your feed address changes

With the routes file installed, your main RSS feed moves from /rss/ to /articles/rss/. Quiet's own footer icon and page links follow the change automatically, but anything outside your site that points at /rss/ needs updating: newsletter services, a podcast directory, an old link in a bio.

Once per install

You upload the routes file once. Re-upload it only if a release changes the file, which the release notes will say.

What next

Build your homepage →

That guide takes you from the starter layout to a composed homepage, one section at a time, and ends with the exact recipe behind the demo site.