Viewer state, kept apart from the channel because it changes on every read while the channel rarely changes.
Properties
No description available.
No description available.
minimum: 0
No description available.
minimum: 0
No description available.
minimum: 0
View raw schema
{
"type": "object",
"required": [
"channelId",
"lastSeenSeq",
"latestSeq"
],
"properties": {
"mentions": {
"type": "integer",
"minimum": 0
},
"channelId": {
"type": "string"
},
"latestSeq": {
"type": "integer",
"minimum": 0
},
"lastSeenSeq": {
"type": "integer",
"minimum": 0
}
},
"description": "Viewer state, kept apart from the channel because it changes on every read while the channel rarely changes."
}
A channel — one space of type `chat.yakka.channel` under its server (ADR 0002).
Properties
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.
Sidebar grouping label. Purely presentational.
maxGraphemes: 64 graphemes
No description available.
No description available.
Known values: text, voice
No description available.
maxGraphemes: 64 graphemes
A decentralized identifier (DID).
An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).
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.
No description available.
maxGraphemes: 256 graphemes
View raw schema
{
"type": "object",
"required": [
"id",
"serverDid",
"tid",
"spaceUri",
"name",
"kind"
],
"properties": {
"id": {
"type": "string"
},
"tid": {
"type": "string",
"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."
},
"kind": {
"type": "string",
"knownValues": [
"text",
"voice"
]
},
"name": {
"type": "string",
"maxGraphemes": 64
},
"gated": {
"type": "boolean",
"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."
},
"group": {
"type": "string",
"description": "Sidebar grouping label. Purely presentational.",
"maxGraphemes": 64
},
"topic": {
"type": "string",
"maxGraphemes": 256
},
"spaceUri": {
"type": "string",
"format": "at-uri"
},
"serverDid": {
"type": "string",
"format": "did"
}
},
"description": "A channel — one space of type `chat.yakka.channel` under its server (ADR 0002)."
}
No description available.
Properties
A decentralized identifier (DID).
No description available.
maxGraphemes: 64 graphemes
What the DID document currently claims, or `handle.invalid`. Never a key — handles are reassigned.
Host of the member's repo. Presentational; the DID is the identity.
No description available.
View raw schema
{
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"pds": {
"type": "string",
"description": "Host of the member's repo. Presentational; the DID is the identity."
},
"roles": {
"type": "array",
"items": {
"ref": "#roleView",
"type": "ref"
}
},
"avatar": {
"type": "string",
"format": "uri"
},
"handle": {
"type": "string",
"format": "handle",
"description": "What the DID document currently claims, or `handle.invalid`. Never a key — handles are reassigned."
},
"displayName": {
"type": "string",
"maxGraphemes": 64
}
}
}
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
A decentralized identifier (DID).
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.
maxLength: 10000 bytesmaxGraphemes: 2000 graphemes
Half of the reconcile key. A client matches a socket frame to a stored message on (uri, cid), never on either alone.
The author's clock, for display only. Not an ordering key and not comparable across repos — `seq` is the order.
No description available.
An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).
No description available.
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.
An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).
View raw schema
{
"type": "object",
"required": [
"uri",
"cid",
"seq",
"authorDid",
"body",
"createdAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid",
"description": "Half of the reconcile key. A client matches a socket frame to a stored message on (uri, cid), never on either alone."
},
"seq": {
"ref": "#viewSeq",
"type": "ref"
},
"uri": {
"type": "string",
"format": "at-uri"
},
"body": {
"type": "string",
"maxLength": 10000,
"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
},
"replyTo": {
"type": "string",
"format": "at-uri"
},
"authorDid": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The author's clock, for display only. Not an ordering key and not comparable across repos — `seq` is the order."
},
"reactions": {
"type": "array",
"items": {
"ref": "#reactionView",
"type": "ref"
}
},
"tombstone": {
"type": "boolean",
"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."
}
},
"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."
}
No description available.
Properties
No description available.
minimum: 1
No description available.
maxGraphemes: 8 graphemes
Whether the viewer is among the reactors. Absent a viewer, always false.
View raw schema
{
"type": "object",
"required": [
"emoji",
"count",
"mine"
],
"properties": {
"mine": {
"type": "boolean",
"description": "Whether the viewer is among the reactors. Absent a viewer, always false."
},
"count": {
"type": "integer",
"minimum": 1
},
"emoji": {
"type": "string",
"maxGraphemes": 8
}
}
}
No description available.
Properties
No description available.
maxLength: 32 bytes
No description available.
maxGraphemes: 64 graphemes
View raw schema
{
"type": "object",
"required": [
"label"
],
"properties": {
"color": {
"type": "string",
"maxLength": 32
},
"label": {
"type": "string",
"maxGraphemes": 64
}
}
}
No description available.
Properties
The server's own DID, which holds authority over its channel spaces (ADR 0003).
No description available.
maxGraphemes: 2 graphemes
No description available.
minimum: 0
No description available.
maxGraphemes: 64 graphemes
No description available.
maxLength: 32 bytes
View raw schema
{
"type": "object",
"required": [
"did",
"name"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "The server's own DID, which holds authority over its channel spaces (ADR 0003)."
},
"name": {
"type": "string",
"maxGraphemes": 64
},
"tint": {
"type": "string",
"maxLength": 32
},
"glyph": {
"type": "string",
"format": "uri"
},
"initials": {
"type": "string",
"maxGraphemes": 2
},
"memberCount": {
"type": "integer",
"minimum": 0
}
}
}
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
No description available.
No description available.
Highest sequence held. Resume the socket from here (ADR 0011).
No description available.
Lowest sequence held. Page backwards from here.
View raw schema
{
"type": "object",
"required": [
"channelId",
"messages",
"hasMoreBefore"
],
"properties": {
"messages": {
"type": "array",
"items": {
"ref": "#messageView",
"type": "ref"
}
},
"channelId": {
"type": "string"
},
"latestSeq": {
"type": "integer",
"description": "Highest sequence held. Resume the socket from here (ADR 0011)."
},
"oldestSeq": {
"type": "integer",
"description": "Lowest sequence held. Page backwards from here."
},
"hasMoreBefore": {
"type": "boolean"
}
},
"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."
}
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.
View raw schema
{
"type": "integer",
"minimum": 1,
"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."
}