chat.yakka.defs

yakka.chat

{
  "$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
}

Validate Record

Validate a record against chat.yakka.defs

Validation Options
Treat any remaining unresolved references as valid

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.

  • 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.

  • 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.

Lexicon Garden

@