The parts of a book
A finished book carries parts its manuscript does not: a title page, a dedication, an index, a list of sources, a note on the author. Press builds some of them from configuration and typesets the rest from Markdown you write.
To see these parts assembled into very different finished books, browse the gallery: a field guide, a poetry chapbook, a monograph, a novella, and a cookbook, each the same pipeline with different config.
Every part is one of two kinds, and the kind tells you where it lives.
- generated Generated matter — press builds it from configuration: the title page, colophon, dedication, epigraph, acknowledgements, the index, the table of authorities. You set a value; press typesets the page.
- authored Authored
matter — Markdown you write in
book/. Press stitchesbook/chapters/*.mdand thenbook/appendices/*.mdin filename order. You write the file and name it so it sorts where you want.
A book, front to back
Front matter
- Half-title & title pageconfig/front-matter.yaml
- Copyright & colophonconfig/front-matter.yaml
- Dedicationconfig/front-matter.yaml
- Epigraphconfig/front-matter.yaml
- Acknowledgementsconfig/front-matter.yaml
The book
- Preface or forewordbook/chapters/00-*.md
- Chaptersbook/chapters/*.md
Back matter
- About the authorbook/appendices/*.md
- Also by & further readingbook/appendices/*.md
- Glossarybook/appendices/*.md
- Indexconfig/index-terms.yaml
- Sources & authoritiesconfig/authorities.yaml
Cinnabar marks generated matter; graphite marks the pages you author.
Setting a value
There are two ways to set any configured value. The easy one:
press config set <path> <value> # validated before it is written
press config list # every field and its current value
press config validate # check the whole configurationpress config set checks your edit against the same typed
model that validates a build, so press refuses a bad value before
writing anything. The other way is editing the YAML under
config/ by hand: same result, but nothing checks it. List
and mapping values arrive as JSON, with --json; plain text
needs no flag. The configuration
reference lists every field.
The byline generated
Who wrote the book. It feeds the title page, the EPUB metadata, and
the landing page. author is a list, so pass it as JSON:
press config set author '["Jane Roe"]' --jsonTwo authors, in the order they print:
press config set author '["Jane Roe", "Sam Okafor"]' --jsonThe generated front matter generated
Setting any front-matter field creates
config/front-matter.yaml, and its presence tells press to
generate the title page, colophon, and the pages below. Turning it on
makes three identity facts required alongside the title and author — set
them together:
press config set copyright "© 2026 Jane Roe" && \
press config set publisher "Old Street Press" && \
press config set publisher-place "London"Then add the pages you want. Each is optional; a field you never set does not render:
press config set dedication "For my mother, who kept every letter." && \
press config set acknowledgements "Thanks to the librarians of the Bodleian, and to R., who read every draft."An epigraph is a quote and its attribution; without the quote, the page does not render:
press config set epigraph.quote "We are what we pretend to be." && \
press config set epigraph.attribution "Kurt Vonnegut"The colophon — the note at the back on how the book was made — has its own optional lines:
press config set edition-note "First edition" && \
press config set manufacture "Printed on acid-free paper." && \
press config set colophon-note "Set in Libertinus." && \
press config set rights-notice "All rights reserved." && \
press config set contact "hello@example.test" && \
press config set motto "Made slowly."Press lays out the title page, half-title, copyright page, and table
of contents; you do not write them. For complete control, an optional
tex/title-page.tex replaces the generated front matter.
Most books never need it.
The author’s photograph generated
Put a photograph at art/author-photo.jpg. Press engraves
it into an author portrait plate in the house style rather than printing
the snapshot, so it matches the book’s other art. Set the treatment:
press config set portrait.style "three-quarter engraving, plain ground"Run the art-direction workflow inside the book to
commission the plate, then convert the result to house format:
press art accept art/portrait.png --as portraitWithout a photograph, press still commissions a portrait, but it invents a face from the book’s description; the photograph is what makes the portrait the author. Covers, interior plates, and the logomark follow the same path and have their own guide.
An “about the author” page authored
Press has no about-the-author field: you write this one. Ask press for a back-matter page and it typesets the file with the book:
press add appendix about-the-author # -> book/appendices/z-about-the-author.mdFiles in book/appendices/ merge in filename order, and
press add appendix owns the leading letter that places the
page — the first back-matter part it makes lands at z- to
keep it last, the next at y-, and so on. It refuses to
overwrite a page you have already drafted, so running it twice never
eats your work. Open the new file, replace the placeholder line, and
write. If you commissioned a portrait plate, reference it here as you
would any figure.
Also by this author, and further reading authored
Also authored, and a stated gap: press has no “also by” field yet — a
cross-book catalogue is planned but not built. Make it a short
back-matter page and press places it by filename; add
--front if you would rather it sort ahead of the other
appendices:
press add appendix also-by # -> book/appendices/y-also-by.mdA preface, foreword, or introduction authored
These are chapters, not front-matter pages. Ask press for one with
--front and it sorts before the numbered chapters:
press add chapter preface --front # -> book/chapters/00-preface.mdChapters merge in filename order, so the 00- prefix
--front assigns runs ahead of 01- and the
rest. Without --front, press add chapter takes
the next numbered slot:
press add chapter "The Long Winter" # -> the next NN- chapterThe title can carry spaces and apostrophes; press makes the filename from it and seeds the heading, so you never quote Markdown into a shell.
Footnotes authored
Footnotes are part of the Markdown you write. Use the standard syntax anywhere in a chapter:
The press was proven on one book first.[^scars]
[^scars]: Every scar in the pipeline was paid for by that first production.Press renders them per format: the PDF sets them at the foot of the page; the EPUB and web reader collect them as linked notes. There is no separate endnote setting — the format decides where a note sits, and the same Markdown produces both.
The index generated
A page-accurate subject index, generated on every build. You curate
the terms; press finds the locations. Create
config/index-terms.yaml — a list of terms, each with the
patterns that count as a mention:
- term: "movable type"
match: ["movable type", "moveable type"]
- term: "verification"
match: ["verif", "proof-read"]Press searches the manuscript for those patterns and builds the index from what it finds. Delete the file to remove the index.
Press will not print a wrong page number. A term that matches nothing in the text fails the build. Fix the patterns or remove the term; press will not skip it silently.
A glossary authored
Authored, and a gap like “also by”: press does not generate or check a glossary the way it does the index. Make one as a back-matter page and fill it with a Markdown definition list:
press add appendix glossary # -> book/appendices/x-glossary.mdNot generated yet. Press cannot build or check a glossary against the text today. A generated glossary that works like the index — curated terms, a build that fails on a term it defines but never uses — is a feature to ask for.
The bibliography: sources and authorities generated
Press’s bibliography is a table of authorities: a ledger mapping each
claim of fact in the book to the source that warrants it. It lives in
config/authorities.yaml, one entry per claim:
- claim: "industrialize verification"
file: "book/chapters/02-copy.md"
authority: "Moxon, Mechanick Exercises (1683)"
url: "https://archive.org/details/..."
note: "establishes the shop practice the chapter draws on"The claim is an exact fragment of your text. On every
build press confirms each claim still appears — once, in its declared
file — and regenerates a standalone Sources and
authorities document published beside the book
(<slug>-sources.md). Reword or cut a claim’s sentence
and the build fails, naming where the claim went, so the bibliography
always matches the current text.
Populate it with the authorities-research workflow, run
inside the book: it extracts the claims, researches each against web
sources, audits them, and writes the ledger. It verifies a sources
ledger; it is not a BibTeX or CSL citation engine.
Store and format metadata generated
The small facts that ride into the EPUB, the landing page, and the stores:
press config set description "A short history of proof-reading, and why it still matters." && \
press config set keywords '["printing", "proof-reading", "book history"]' --json && \
press config set lang "en-GB"description is the one-sentence blurb;
keywords is a list, so --json;
lang is a BCP-47 tag passed to the formats.
At a glance
Who wrote the book; feeds the title page, EPUB, and landing page.
config/metadata.yaml
Dedication, epigraph, acknowledgements, and the colophon.
config/front-matter.yaml
An engraved portrait plate made from your photograph.
art/author-photo.jpg
A page-accurate subject index; press checks every term against the text.
config/index-terms.yaml
Each claim mapped to its source, rechecked on every build.
config/authorities.yaml
A chapter that sorts before the numbered ones.
book/chapters/00-*.md
A back-matter page you write.
book/appendices/z-*.md
A short list, placed by filename.
book/appendices/*.md
A definition list; authored, not checked.
book/appendices/*.md
Standard [^1] footnotes, in any chapter.
inline Markdown
Checking your work
After any change, three commands show where you stand:
press config list && \
press config validate && \
press checkpress config list shows every field with its value,
press config validate runs the typed model over the
configuration, and press check runs the verifiers —
including the index and authorities checks that hold the generated
matter to your text.