page.cavu.highlight
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "A reader's highlight of a passage in a book, written to the reader's own repo. The passage is anchored by text quote (exact string plus surrounding context), not by DOM position: quotes survive re-rendering, mode switches, and small edits to the chunk, and the strongRef cid marks the text *as highlighted* so drift is detectable. Selector field names and limits deliberately mirror the W3C Web Annotation TextQuoteSelector as used by at.margin.note, so a highlight translates 1:1 into a margin.at annotation target. The book AT-URI makes highlights discoverable by backlink index. Like page.cavu.progress, records are public: clients must disclose that highlights are saved to the reader's own repo.",
"key": "tid",
"record": {
"properties": {
"book": {
"description": "AT-URI of the book's site.standard.publication record — the backlink target, and the key clients list by.",
"format": "at-uri",
"type": "string"
},
"color": {
"description": "Client-chosen highlight color name or hex value. Clients without an opinion omit it.",
"maxLength": 32,
"type": "string"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"document": {
"description": "Spine document containing the passage, at the cid the reader was seeing. A cid that no longer matches the live record marks a highlight whose ground may have shifted.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"note": {
"description": "The reader's own note on the passage.",
"maxGraphemes": 3000,
"maxLength": 10000,
"type": "string"
},
"selector": {
"description": "Where in the document's text the highlight lives.",
"ref": "#textQuoteSelector",
"type": "ref"
},
"thousandths": {
"description": "Coarse position of the passage within the document, in thousandths of its text — page.cavu.progress's position grammar. A jump-to hint only; the selector is authoritative.",
"maximum": 1000,
"minimum": 0,
"type": "integer"
}
},
"required": [
"book",
"document",
"selector",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"textQuoteSelector": {
"description": "W3C Web Annotation TextQuoteSelector shape (field names and limits match at.margin.note): the exact quoted text, disambiguated by up to 150 graphemes of context on each side. Offsets are into the document's rendered text content with whitespace as rendered.",
"properties": {
"exact": {
"description": "The highlighted text itself.",
"maxGraphemes": 1500,
"maxLength": 5000,
"type": "string"
},
"prefix": {
"description": "Text immediately before the quote, for disambiguating repeated passages.",
"maxGraphemes": 150,
"maxLength": 500,
"type": "string"
},
"suffix": {
"description": "Text immediately after the quote.",
"maxGraphemes": 150,
"maxLength": 500,
"type": "string"
}
},
"required": [
"exact"
],
"type": "object"
}
},
"id": "page.cavu.highlight",
"lexicon": 1
}
Metadata
- DID
-
did:plc:citulkqjdzbnf7wd5xb6lled - CID
-
bafyreidqlymthiyejr7lxnn553ysdwepd22q6qx3rkad6lddezjelasadm - Indexed At
- 2026-08-05 13:52 UTC
- AT-URI
-
at://did:plc:citulkqjdzbnf7wd5xb6lled/com.atproto.lexicon.schema/page.cavu.highlight
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
at.margin.note record
W3C Web Annotation Data Model compliant unified note record for ATProto
-
pub.chive.annotation.comment record
Inline annotation on a specific text span in an eprint