chat.yakka.defs
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"channelReadState": {
"description": "Viewer state, kept apart from the channel because it changes on every read while the channel rarely changes.",
"properties": {
"channelId": {
"type": "string"
},
"lastSeenSeq": {
"minimum": 0,
"type": "integer"
},
"latestSeq": {
"minimum": 0,
"type": "integer"
},
"mentions": {
"minimum": 0,
"type": "integer"
}
},
"required": [
"channelId",
"lastSeenSeq",
"latestSeq"
],
"type": "object"
},
"channelView": {
"description": "A channel — one space of type `chat.yakka.channel` under its server (ADR 0002).",
"properties": {
"gated": {
"description": "Whether the mint policy restricts this space to a role rather than any member (ADR 0007). Open and gated channels are structurally identical; this drives affordances and nothing else.",
"type": "boolean"
},
"group": {
"description": "Sidebar grouping label. Purely presentational.",
"maxGraphemes": 64,
"type": "string"
},
"id": {
"type": "string"
},
"kind": {
"knownValues": [
"text",
"voice"
],
"type": "string"
},
"name": {
"maxGraphemes": 64,
"type": "string"
},
"serverDid": {
"format": "did",
"type": "string"
},
"spaceUri": {
"format": "at-uri",
"type": "string"
},
"tid": {
"description": "The space's skey — the channel's creation TID. Stable across renames, which is what makes it the durable URL form where `name` is the readable one.",
"type": "string"
},
"topic": {
"maxGraphemes": 256,
"type": "string"
}
},
"required": [
"id",
"serverDid",
"tid",
"spaceUri",
"name",
"kind"
],
"type": "object"
},
"memberView": {
"properties": {
"avatar": {
"format": "uri",
"type": "string"
},
"did": {
"format": "did",
"type": "string"
},
"displayName": {
"maxGraphemes": 64,
"type": "string"
},
"handle": {
"description": "What the DID document currently claims, or `handle.invalid`. Never a key — handles are reassigned.",
"format": "handle",
"type": "string"
},
"pds": {
"description": "Host of the member's repo. Presentational; the DID is the identity.",
"type": "string"
},
"roles": {
"items": {
"ref": "#roleView",
"type": "ref"
},
"type": "array"
}
},
"required": [
"did"
],
"type": "object"
},
"messageView": {
"description": "A message as the appview believes it. Present here means ingested: it has a URI, a CID and a sequence. Provisional messages exist only on the socket (ADR 0011) and never in a query response.",
"properties": {
"authorDid": {
"format": "did",
"type": "string"
},
"body": {
"description": "The message text. Named `body` here and `text` in the record: the record follows the atproto convention it shares with app.bsky.feed.post, and every layer downstream of ingest — this view, the column, the client — says `body`. The rename happens once, at ingest, rather than in every consumer.",
"maxGraphemes": 2000,
"maxLength": 10000,
"type": "string"
},
"cid": {
"description": "Half of the reconcile key. A client matches a socket frame to a stored message on (uri, cid), never on either alone.",
"format": "cid",
"type": "string"
},
"createdAt": {
"description": "The author's clock, for display only. Not an ordering key and not comparable across repos — `seq` is the order.",
"format": "datetime",
"type": "string"
},
"reactions": {
"items": {
"ref": "#reactionView",
"type": "ref"
},
"type": "array"
},
"replyTo": {
"format": "at-uri",
"type": "string"
},
"seq": {
"ref": "#viewSeq",
"type": "ref"
},
"tombstone": {
"description": "The record was deleted and the sequence survives it (ADR 0010). A tombstone keeps its place so a permalink still scrolls to where the message was, which is a fact worth reporting rather than flattening into a 404.",
"type": "boolean"
},
"uri": {
"format": "at-uri",
"type": "string"
}
},
"required": [
"uri",
"cid",
"seq",
"authorDid",
"body",
"createdAt"
],
"type": "object"
},
"reactionView": {
"properties": {
"count": {
"minimum": 1,
"type": "integer"
},
"emoji": {
"maxGraphemes": 8,
"type": "string"
},
"mine": {
"description": "Whether the viewer is among the reactors. Absent a viewer, always false.",
"type": "boolean"
}
},
"required": [
"emoji",
"count",
"mine"
],
"type": "object"
},
"roleView": {
"properties": {
"color": {
"maxLength": 32,
"type": "string"
},
"label": {
"maxGraphemes": 64,
"type": "string"
}
},
"required": [
"label"
],
"type": "object"
},
"serverView": {
"properties": {
"did": {
"description": "The server's own DID, which holds authority over its channel spaces (ADR 0003).",
"format": "did",
"type": "string"
},
"glyph": {
"format": "uri",
"type": "string"
},
"initials": {
"maxGraphemes": 2,
"type": "string"
},
"memberCount": {
"minimum": 0,
"type": "integer"
},
"name": {
"maxGraphemes": 64,
"type": "string"
},
"tint": {
"maxLength": 32,
"type": "string"
}
},
"required": [
"did",
"name"
],
"type": "object"
},
"timelinePage": {
"description": "A window of a channel's timeline plus the cursors needed to extend it. Both cursors are view sequences; nothing else is ever a cursor.",
"properties": {
"channelId": {
"type": "string"
},
"hasMoreBefore": {
"type": "boolean"
},
"latestSeq": {
"description": "Highest sequence held. Resume the socket from here (ADR 0011).",
"type": "integer"
},
"messages": {
"items": {
"ref": "#messageView",
"type": "ref"
},
"type": "array"
},
"oldestSeq": {
"description": "Lowest sequence held. Page backwards from here.",
"type": "integer"
}
},
"required": [
"channelId",
"messages",
"hasMoreBefore"
],
"type": "object"
},
"viewSeq": {
"description": "A per-space, strictly increasing sequence assigned by the appview at ingest (ADR 0012). The ordering authority for a timeline, and the only cursor a client is ever given. Never a database row id, and never comparable across spaces.",
"minimum": 1,
"type": "integer"
}
},
"id": "chat.yakka.defs",
"lexicon": 1
}
Metadata
- DID
-
did:plc:wpjoy2orkqq5m65vq7gg7liz - CID
-
bafyreigvmdvskeklj74pm5rdg7giu3ua26se4gz34phfdzo3qcenlti6nq - Indexed At
- 2026-08-29 15:21 UTC
- AT-URI
-
at://did:plc:wpjoy2orkqq5m65vq7gg7liz/com.atproto.lexicon.schema/chat.yakka.defs
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
chat.yakka.channel.info record
A channel's presentation and its gate. Authority-written into the directory space via the space host (ADR 0006). The gate here is the same policy the mint enforces (ADR 0007) — an open and a gated channel are structur…
-
A file attached to a message.
-
chat.yakka.message record
A message in a channel or DM space. The record lives in the *author's* repo within the space, so a message has no single owning collection to sort by — it is identified by (authorDid, tid). One collection serves chann…
-
View of a pinned chat record with hydrated message data.