Book extension object, embedded in a site.standard.publication record as a pass-through `book` property (the Leaflet `theme` pattern). Its presence marks the publication as a book; series publications omit it. The publication's standard fields remain the fallback identity (name = title, description = blurb, icon = square mark).
Properties
allowDownloads
boolean
Optional
Whether readers may download the whole book as a file (EPUB, PDF) rather than only reading it in place. Absent means false — the author opts in. Readers and appviews that offer exports check this flag before generating one; the records themselves are public regardless, so this is a statement of intent, not access control.
completionStatus
string
Optional
Whether the book is still being serialized.
ongoing, completed, hiatuscontributors
array
of refpub.byline.defs#contributor
Optional
Credited contributors (author, translator, editor, illustrator, narrator). Reuses byline.pub's contributor shape: name required, AT Protocol DID optional, so off-protocol collaborators can be credited. The repo owner is presumed primary author unless roles say otherwise.
maxLength: 100 itemscover
blob
Optional
Book cover, typically portrait orientation. Share the same blob CID with the frontmatter document's coverImage.
maxSize: 1.0 MBcoverAlt
string
Optional
Alt text describing the cover image, for accessibility.
maxLength: 5000 bytesmaxGraphemes: 1000 graphemeslanguage
string
language
Optional
Primary language of the book's content.
listing
string
at-uri
Optional
AT-URI of a pub.byline.book record carrying this book's catalog metadata (editions, ISBNs, retailer links, genres). The reading layer stays here; the listing layer stays there.
pageProgression
string
Optional
Direction pages progress in paginated and two-page-spread views, mirroring EPUB's spine-level page-progression-direction. Absent means ltr; rtl for right-to-left books (manga). Chiefly meaningful for pre-paginated page.cavu.pages content, where it decides which side of a spread comes first and which way pages turn.
ltr, rtlseries
ref
#seriesRef
Optional
The series this book belongs to, if any.
spine
array
of ref#spineEntry
Required
Ordered entries for the site.standard.document records holding the book's content, in reading order. Chunk boundaries are storage artifacts, invisible to the reader; a chunk is usually chapter-sized but not always.
maxLength: 10000 itemsstyling
ref
#styling
Optional
Author presentation preferences for the whole book — the floor of the theme layer. Optional; readers render legibly without it and ignore what they don't understand.
View raw schema
{
"type": "object",
"required": [
"spine"
],
"properties": {
"cover": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 1000000,
"description": "Book cover, typically portrait orientation. Share the same blob CID with the frontmatter document's coverImage."
},
"spine": {
"type": "array",
"items": {
"ref": "#spineEntry",
"type": "ref"
},
"maxLength": 10000,
"description": "Ordered entries for the site.standard.document records holding the book's content, in reading order. Chunk boundaries are storage artifacts, invisible to the reader; a chunk is usually chapter-sized but not always."
},
"series": {
"ref": "#seriesRef",
"type": "ref",
"description": "The series this book belongs to, if any."
},
"listing": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of a pub.byline.book record carrying this book's catalog metadata (editions, ISBNs, retailer links, genres). The reading layer stays here; the listing layer stays there."
},
"styling": {
"ref": "#styling",
"type": "ref",
"description": "Author presentation preferences for the whole book — the floor of the theme layer. Optional; readers render legibly without it and ignore what they don't understand."
},
"coverAlt": {
"type": "string",
"maxLength": 5000,
"description": "Alt text describing the cover image, for accessibility.",
"maxGraphemes": 1000
},
"language": {
"type": "string",
"format": "language",
"description": "Primary language of the book's content."
},
"contributors": {
"type": "array",
"items": {
"ref": "pub.byline.defs#contributor",
"type": "ref"
},
"maxLength": 100,
"description": "Credited contributors (author, translator, editor, illustrator, narrator). Reuses byline.pub's contributor shape: name required, AT Protocol DID optional, so off-protocol collaborators can be credited. The repo owner is presumed primary author unless roles say otherwise."
},
"allowDownloads": {
"type": "boolean",
"description": "Whether readers may download the whole book as a file (EPUB, PDF) rather than only reading it in place. Absent means false — the author opts in. Readers and appviews that offer exports check this flag before generating one; the records themselves are public regardless, so this is a statement of intent, not access control."
},
"pageProgression": {
"type": "string",
"description": "Direction pages progress in paginated and two-page-spread views, mirroring EPUB's spine-level page-progression-direction. Absent means ltr; rtl for right-to-left books (manga). Chiefly meaningful for pre-paginated page.cavu.pages content, where it decides which side of a spread comes first and which way pages turn.",
"knownValues": [
"ltr",
"rtl"
]
},
"completionStatus": {
"type": "string",
"description": "Whether the book is still being serialized.",
"knownValues": [
"ongoing",
"completed",
"hiatus"
]
}
},
"description": "Book extension object, embedded in a site.standard.publication record as a pass-through `book` property (the Leaflet `theme` pattern). Its presence marks the publication as a book; series publications omit it. The publication's standard fields remain the fallback identity (name = title, description = blurb, icon = square mark)."
}