{
"id": "com.getorbyt.community.declaration",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"name",
"createdAt"
],
"properties": {
"name": {
"type": "string",
"maxLength": 63,
"minLength": 2,
"description": "The globally unique lowercase Community name. Clients render it with a leading slash, for example /funny."
},
"rules": {
"type": "array",
"items": {
"ref": "com.getorbyt.community.defs#rule",
"type": "ref"
},
"maxLength": 20
},
"avatar": {
"type": "blob",
"accept": [
"image/gif",
"image/png",
"image/jpeg",
"image/webp"
],
"maxSize": 3000000,
"description": "Community image artwork for avatars and Explore tiles. Animated GIFs loop in supporting clients. It may use a square crop independent of avatarVideo."
},
"labels": {
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union",
"description": "Self-applied content labels, spelled as on app.bsky.feed.post. A Community carrying an adult label is hidden from viewers whose adult-content preference is off, exactly as a labeled post is."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"postPolicy": {
"type": "string",
"description": "Who may link a post to this Community. Absent means anyone. A value this service does not know is treated as the most restrictive policy rather than the least.",
"knownValues": [
"anyone",
"members",
"moderators"
]
},
"accentColor": {
"type": "string",
"maxLength": 32,
"description": "A CSS-style hex colour, for example #D07EA2. Free-form so a client may carry a richer value later; a value this service cannot parse is ignored rather than rejected."
},
"avatarVideo": {
"type": "blob",
"accept": [
"video/mp4"
],
"maxSize": 3000000,
"description": "Optional silent H.264 MP4 header with even dimensions, yuv420p and the moov atom first. New clients export a square crop positioned independently from avatar; older aspect ratios remain valid. Supply an image avatar alongside video for image-only surfaces."
},
"description": {
"type": "string",
"maxLength": 2000
},
"avatarFallback": {
"type": "blob",
"accept": [
"image/jpeg",
"image/webp"
],
"maxSize": 3000000,
"description": "Optional still rendition of avatar for constrained or reduced-data connections. New clients export it from the same square crop as avatar. Clients prefer avatar for animation and use this only when animation or video should not be loaded."
},
"continuationOf": {
"type": "string",
"format": "at-uri",
"description": "The stable Community AT-URI this declaration continues after an accepted ownership transfer. The service ignores this field unless a matching accepted transfer authorizes this repository."
}
}
},
"description": "The canonical public descriptor for an Orbyt Community, and the record that declares the Community exists. Its AT-URI is the Community's identity everywhere else in the protocol. The record key is a TID, including for the replacement declaration an accepted ownership transfer produces: the recipient mints it before accepting and names it to the AppView, which stores it as the only URI the continuation may be written at. Every Community is public: the record is world-readable, and the directory and feed are open. Only posting is gated, by postPolicy."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}