chat.yakka.defs

yakka.chat

{
  "id": "chat.yakka.defs",
  "defs": {
    "viewSeq": {
      "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."
    },
    "roleView": {
      "type": "object",
      "required": [
        "label"
      ],
      "properties": {
        "color": {
          "type": "string",
          "maxLength": 32
        },
        "label": {
          "type": "string",
          "maxGraphemes": 64
        }
      }
    },
    "memberView": {
      "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
        }
      }
    },
    "serverView": {
      "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
        }
      }
    },
    "channelView": {
      "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)."
    },
    "messageView": {
      "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."
    },
    "reactionView": {
      "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
        }
      }
    },
    "timelinePage": {
      "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."
    },
    "channelReadState": {
      "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."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "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

Lexicon Garden

@