The Ghost theme · version 0.1.0 · free for a personal blog

Read it on the Ghost you have

This theme is the reading page of Quire Ink, driven from Ghost content. It is generated from the blog engine's own stylesheet rather than copied by hand, so what a reader gets is that reading surface and not an impression of it. Upload it to the site you already run, live with it for a week, and decide about the engine later.

the theme
129 KB, an article
palettes
6 each in light and dark
typefaces
6 self-hosted, OFL
needs
5.0 Ghost or newer
locked in
0 fields, types, tables
guards
10 two of them open a browser

01What it is

A reader opens a post and gets one column of about seventy characters in a book face, the article's own contents standing in the gutter beside it, and its facts in the gutter on the other side. They pick one of six palettes, in light or dark, and their choice is remembered on their own device.

An article page: the post's own table of contents in the left gutter with an outline numbering, about seventy characters of Literata in the middle, and the date, word count, reading time and tags in the right gutter
An article at the width that holds three columns. The middle one is the reading measure and the two gutters are what is left. Below that width the gutters fold away on their own and the column takes the screen. There is no second layout: the breakpoint is computed from the reading column rather than typed in.

The theme fetches nothing from anybody else. The six typefaces are in it, there is no analytics, no avatar service and no font host. Ghost itself is a different matter and section 03 measures it.

Everything visual is generated from the blog engine's stylesheet, the same sheet the demo renders with: an extractor runs the engine's own emitters and a static check compares bytes, so the theme cannot quietly drift away from the product it came from.

Six tiles of the same article header: three in light schemes named mono, sepia and forest, three in dark schemes named ocean, sci-fi and amber
Six palettes, each carrying light and dark, so a palette that only works in one scheme is not shipped. Every colour comes from the engine and none is written into the theme, which is why they can be checked rather than trusted: seventy colours are measured against their own background on every run, and the tightest is 5.01:1 where WCAG AA asks 4.5:1.

Book mode resets the article into two columns sized from the window, keeping the reader's place. Book typography, which indents and justifies and hyphenates, is a second switch and it ships off: those belong to print, and on a screen they are a preference rather than an improvement.

02Nothing of yours moves

This is the part that decides whether trying it is cheap, so it is worth being exact about. The theme adds no custom field, no content type and no table. Switch away and every post is still a post, in the same place, with the same content.

What it does use is what Ghost already has. The rail in the left gutter is the site's own structure: its navigation, its featured posts, its tags, and its authors when there is more than one. Featured is Ghost's own flag, set per post in the editor. Nine settings live in Ghost's design panel and nowhere else.

An article using Koenig cards: a callout with an emoji beside its text and a rule down its left, under the article's own contents rail
Koenig's cards, given the engine's own drawing. A callout keeps its emoji and takes the accent rule down its left; a wide figure noses into the gutter the contents rail is not using. Those rules are generated from the engine rather than written here, which is why a wide picture is the same width on the blog and on this theme.

One thing is Ghost's rather than the engine's, on purpose. The comment thread is Ghost's own, with its sign-in, replies and moderation. Ghost draws it inside a frame this theme cannot reach into, so a reader meets the site's type and then Ghost's. That seam is real and it is the price of not shipping a second comment system.

Three phone screens: the listing, an article, and an article carrying a callout card
On a phone the gutters fold away and the rail becomes a drawer. Same stylesheet, same markup, no second template.

03What it costs a reader

One long article, measured over the wire on a local Ghost with the browser's own timings, gzipped as served. The post's own pictures are not counted, because those are your content and not the theme.

Over the wire, one article
The theme, first visit129 KBthe HTML plus every file the theme asks for
Every visit after4.7 KBonly the HTML is fetched again
Fonts54.4 KBfour of the twenty-one faces that ship; a browser takes only the character ranges the page uses
CSS53.9 KBfive sheets, four of them generated from the engine
JavaScript16.4 KBthe engine's own reader bundles, plus 3 KB written for Ghost
Third-party requests the theme makes0no CDN, no font host, no tracker, no avatar service
Third-party requests Ghost makes474 KBPortal at 389 KB and its search at 85 KB, both from a public CDN, on every page whether a theme uses them or not

That last row is the honest headline, and no theme can remove it. Ghost injects those two scripts itself. They are almost four times the weight of everything this theme ships, and they arrive from a host that is not yours. A self-hosted Ghost can be configured to serve them from its own domain; a hosted one cannot. The theme's claim is therefore narrow and exact: it adds no third-party request, and the page still makes two.

The blog engine serves about 100 KB for the same shape of article and makes no third-party request at all, which is the figure the comparison page publishes. So the theme costs roughly a third more than the engine, and the page around it costs five times more again. That gap is not the stylesheet. It is the platform.

04What does not carry over

Five things the blog engine draws are not in this theme, and each is a decision with a reason rather than a queue of work.

  • The pen. The highlighter, the pencil underline and the ballpoint ring are markup Ghost's editor has no way to write, so the theme does not ship the sheets that style them. Footnotes, the same.
  • Series. Ghost has tags and authors and nothing else, and inventing a taxonomy in a theme would put content structure into the layer that is supposed to be about looks. An authors block stands where the engine's categories block does, and only on a blog that has more than one.
  • The rail's year list. A year is a URL, and Ghost has no date route without a routes file the site owner installs by hand. The gutter timeline is a different thing and it does ship, because it points at nothing: it is a label positioned against cards that are already on the page.
  • Right to left. WordPress links a mirrored stylesheet by itself, so the sibling theme gets one for free. Ghost has no such convention. Not refused, just not built.
  • A callout's colour. Ghost offers eight backgrounds per callout; the engine draws a rule down the left and no slab. Both at once is the same idea said twice, and a bright panel in the middle of a dark page.

Made for one person writing long pieces on their own Ghost. Not made for a magazine front page, a shop, or a site whose design is its photographs.

05Put it on your site

Settings, then Design, then Change theme, then Upload theme, then Activate. The zip is one command from a checkout, and it runs every check before it packages: a zip that fails Ghost's own linter is a zip the person holding it usually cannot fix.

from a clone of the theme repository

bun run zip

Then Settings, then Design, for the nine controls: the palette the site opens in, whether readers may change it, the default light or dark, the terminal chrome, book typography, where a list thumbnail goes, the feature image above a headline, the tagline and the footer credit.

Two things are worth doing straight after. Put a couple of links in Navigation, which is the rail's first block, and mark two or three posts featured, which is its second.

Name the zip for the theme, not for the release. Ghost takes a theme's identity from the filename of the zip you upload, not from what is inside it, so quire-ink-0.2.0.zip installs a second theme beside the first instead of upgrading it. bun run zip writes quire-ink.zip for that reason.

06And when you want the engine

The theme gives you the reading page. What it cannot give you is the reason the reading page is cheap: one process, two SQLite files, nothing fetched from a CDN, and no platform deciding what loads on your pages. That part is the blog engine, and moving to it is a smaller job than it sounds.

Ghost exports its whole site as one JSON file, and the engine reads it: posts and pages, their tags, their dates and their bodies, turned into Markdown. Images still hosted on the old site are fetched into your own library straight after, batch by batch, with anything unfetchable named in a list. Clear that list before the old hosting lapses.

Or do not. Ghost has answers for requirements this software will never have: paid memberships with tiers, a newsletter sent to thousands, several staff users with different powers. The comparison page says which, name by name, and ends with the cases where Quire Ink is the wrong answer. If you are staying, stay, and keep the reading page.