{
"id": "pub.byline.book",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"title",
"createdAt"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 128,
"maxGraphemes": 128
},
"description": "Freeform descriptors. Genre lives in genres[]; tags are everything else."
},
"cover": {
"type": "blob",
"accept": [
"image/png",
"image/jpeg",
"image/webp"
],
"maxSize": 2000000,
"description": "Cover image, stored as a blob in the author's own repository."
},
"links": {
"type": "array",
"items": {
"ref": "lex:pub.byline.defs#link",
"type": "ref"
},
"description": "Work-level links not tied to a specific edition."
},
"title": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"genres": {
"type": "array",
"items": {
"type": "string",
"maxLength": 128,
"maxGraphemes": 128
},
"description": "Shelf-category genres for the work. Freeform; byline's authoring tool suggests existing values to encourage convergence, but no value is enforced."
},
"series": {
"ref": "lex:pub.byline.defs#seriesMembership",
"type": "ref",
"description": "Series membership, if any. Book points at the series; the series record never points back."
},
"status": {
"type": "string",
"knownValues": [
"pub.byline.defs#published",
"pub.byline.defs#forthcoming",
"pub.byline.defs#draft",
"pub.byline.defs#outOfPrint"
]
},
"authors": {
"type": "array",
"items": {
"ref": "lex:pub.byline.defs#contributor",
"type": "ref"
},
"description": "Credited contributors. The repo owner is presumed primary author unless roles say otherwise."
},
"tagline": {
"type": "string",
"description": "One-line hook for hero or featured display. Plain text, no markdown.",
"maxGraphemes": 200
},
"coverAlt": {
"type": "string",
"maxLength": 1000,
"description": "Alt text describing the cover image, for accessibility."
},
"editions": {
"type": "array",
"items": {
"ref": "lex:pub.byline.defs#edition",
"type": "ref"
}
},
"language": {
"type": "string",
"description": "BCP-47 language tag, e.g. en, en-CA."
},
"subtitle": {
"type": "string",
"maxLength": 512
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"pageCount": {
"type": "integer",
"minimum": 1,
"description": "Work-level page count. An edition's pageCount overrides this when present."
},
"publisher": {
"type": "string",
"maxLength": 256,
"description": "Work-level publisher. An edition's publisher overrides this when present."
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"description": {
"type": "string",
"description": "Long blurb / marketing copy. Markdown; consumers render or strip.",
"maxGraphemes": 5000
},
"discussions": {
"type": "array",
"items": {
"ref": "lex:com.atproto.repo.strongRef",
"type": "ref"
},
"description": "Strong references to atproto-native discussion threads about this work (e.g. a Bluesky post, a pub.byline.comment). Off-protocol social goes in links[] with kind=discussion or social."
},
"identifiers": {
"ref": "lex:pub.byline.defs#identifiers",
"type": "ref"
},
"copyrightYear": {
"type": "integer",
"description": "Year of first copyright for the work."
},
"publicationDate": {
"type": "string",
"format": "datetime",
"description": "Actual or planned first-publication date."
},
"shortDescription": {
"type": "string",
"description": "Card and grid summary. Markdown; consumers render or strip.",
"maxGraphemes": 500
}
}
},
"description": "An author-authoritative record of a published or forthcoming work, signed by the author's own repository."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}