com.getorbyt.community.defs

getorbyt.com

Schema Diff

+7 -1

From

CID
bafyreidkfqk4kmg...
Indexed At
2026-09-05 23:36 UTC
View this version

To

CID
bafyreiezb7zkrs3...
Indexed At
2026-09-13 19:26 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.defs#view.avatarVideo" }
  • AddedEdge AddedEdge { src: "com.getorbyt.community.defs#view", tgt: "com.getorbyt.community.defs#view.avatarVideo", kind: "prop", name: Some("avatarVideo") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.getorbyt.community.defs#view.avatarVideo" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.getorbyt.community.defs#view", tgt: "com.getorbyt.community.defs#view.avatarVideo", kind: "prop", name: Some("avatarVideo") }
1 1
{
2 2
  "id": "com.getorbyt.community.defs",
3 3
  "defs": {
4 4
    "rule": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "text"
8 8
      ],
9 9
      "properties": {
10 10
        "text": {
11 11
          "type": "string",
12 12
          "maxLength": 500
13 13
        }
14 14
      },
15 15
      "description": "One Community rule. An object rather than a bare string so a title, an ordinal or a createdAt can be added later without a schema break."
16 16
    },
17 17
    "view": {
18 18
      "type": "object",
19 19
      "required": [
20 20
        "uri",
21 21
        "cid",
22 22
        "name",
23 23
        "ownerDid",
24 24
        "createdAt"
25 25
      ],
26 26
      "properties": {
27 27
        "cid": {
28 28
          "type": "string",
29 29
          "format": "cid"
30 30
        },
31 31
        "uri": {
32 32
          "type": "string",
33 33
          "format": "at-uri"
34 34
        },
35 35
        "name": {
36 36
          "type": "string",
37 37
          "maxLength": 63,
38 38
          "minLength": 2
39 39
        },
40 40
        "rules": {
41 41
          "type": "array",
42 42
          "items": {
43 43
            "ref": "#rule",
44 44
            "type": "ref"
45 45
          },
46 46
          "maxLength": 20
47 47
        },
48 48
        "access": {
49 49
          "type": "string",
50 50
          "description": "How Community content is accessed. Public is the only enabled value; clients must fail closed for unknown values.",
51 51
          "knownValues": [
52 52
            "public"
53 53
          ]
54 54
        },
55 55
        "avatar": {
56 56
          "type": "string",
57 -
          "format": "uri"
57 +
          "format": "uri",
58 +
          "description": "The Community's artwork as an image. Animated where the source was, and the only artwork field a client without a video player should read."
58 59
        },
59 60
        "labels": {
60 61
          "type": "array",
61 62
          "items": {
62 63
            "ref": "com.atproto.label.defs#label",
63 64
            "type": "ref"
64 65
          },
65 66
          "description": "Labels applied to this Community. Clients moderate against these exactly as they do app.bsky.feed.defs#postView labels."
66 67
        },
67 68
        "viewer": {
68 69
          "ref": "#viewerState",
69 70
          "type": "ref"
70 71
        },
71 72
        "ownerDid": {
72 73
          "type": "string",
73 74
          "format": "did",
74 75
          "description": "The account whose repository holds the Community declaration record. Clients hydrate it to a profile through their authenticated Bluesky AppView."
75 76
        },
76 77
        "createdAt": {
77 78
          "type": "string",
78 79
          "format": "datetime"
79 80
        },
80 81
        "postCount": {
81 82
          "type": "integer",
82 83
          "minimum": 0
83 84
        },
84 85
        "updatedAt": {
85 86
          "type": "string",
86 87
          "format": "datetime"
87 88
        },
88 89
        "postPolicy": {
89 90
          "type": "string",
90 91
          "description": "The raw value its owner wrote, not the value this service resolved. Absent means anyone, which is also how a server that predates this field behaves.",
91 92
          "knownValues": [
92 93
            "anyone",
93 94
            "members",
94 95
            "moderators"
95 96
          ]
96 97
        },
97 98
        "accentColor": {
98 99
          "type": "string",
99 100
          "maxLength": 32
100 101
        },
102 +
        "avatarVideo": {
103 +
          "type": "string",
104 +
          "format": "uri",
105 +
          "description": "A looping, silent MP4 rendition of the same artwork, when the owner supplied one. Clients that can play video use it for a full-bleed header and fall back to `avatar`; clients that cannot ignore it. It never replaces `avatar`, which stays the still or animated image every surface that is not a video player renders."
106 +
        },
101 107
        "description": {
102 108
          "type": "string",
103 109
          "maxLength": 2000
104 110
        },
105 111
        "memberCount": {
106 112
          "type": "integer",
107 113
          "minimum": 0
108 114
        },
109 115
        "viewerActions": {
110 116
          "type": "array",
111 117
          "items": {
112 118
            "type": "string",
113 119
            "knownValues": [
114 120
              "edit",
115 121
              "unpublish",
116 122
              "publish",
117 123
              "transfer",
118 124
              "delete",
119 125
              "view-reports",
120 126
              "view-audit-log"
121 127
            ]
122 128
          },
123 129
          "maxLength": 32,
124 130
          "description": "Actions the authenticated viewer may perform, decided by the service. Clients render only recognized values and infer nothing from role."
125 131
        },
126 132
        "declarationUri": {
127 133
          "type": "string",
128 134
          "format": "at-uri",
129 135
          "description": "The live declaration record. Absent means it is the same as uri."
130 136
        },
131 137
        "publicationState": {
132 138
          "type": "string",
133 139
          "description": "Service-owned lifecycle state. Absent means published. Unknown values must be treated as unavailable.",
134 140
          "knownValues": [
135 141
            "published",
136 142
            "unpublished",
137 143
            "deleting",
138 144
            "deleted"
139 145
          ]
140 146
        }
141 147
      },
142 148
      "description": "A hydrated Community. Only the fields that identify the Community are required; counts and viewer state are optional so a cheaper view can omit them without a schema break."
143 149
    },
144 150
    "feedItem": {
145 151
      "type": "object",
146 152
      "required": [
147 153
        "post"
148 154
      ],
149 155
      "properties": {
150 156
        "post": {
151 157
          "type": "string",
152 158
          "format": "at-uri",
153 159
          "description": "The linked app.bsky.feed.post URI. Clients hydrate it through their authenticated Bluesky AppView."
154 160
        },
155 161
        "pinned": {
156 162
          "type": "boolean",
157 163
          "default": false
158 164
        },
159 165
        "status": {
160 166
          "type": "string",
161 167
          "description": "Community-level state; absent means visible. `removed` is a moderator removal scoped to this Community; the underlying app.bsky.feed.post remains live on the network. Only the author and Community moderators receive removed items.",
162 168
          "knownValues": [
163 169
            "visible",
164 170
            "removed"
165 171
          ]
166 172
        },
167 173
        "removedAt": {
168 174
          "type": "string",
169 175
          "format": "datetime"
170 176
        },
171 177
        "removedBy": {
172 178
          "type": "string",
173 179
          "format": "did"
174 180
        },
175 181
        "playbackToken": {
176 182
          "type": "string",
177 183
          "description": "Server-issued, viewer-bound token proving this item was served to this viewer for this post. Clients pass it back to com.getorbyt.video.recordLoop after a completed playback."
178 184
        },
179 185
        "removedReason": {
180 186
          "type": "string",
181 187
          "maxLength": 1000,
182 188
          "description": "Present only for the post author and Community moderators."
183 189
        },
184 190
        "removalActionId": {
185 191
          "type": "string",
186 192
          "maxLength": 128,
187 193
          "description": "Stable identifier for this specific removal. Present to the author and moderators and used to bind one appeal to one removal."
188 194
        }
189 195
      }
190 196
    },
191 197
    "appealView": {
192 198
      "type": "object",
193 199
      "required": [
194 200
        "id",
195 201
        "community",
196 202
        "post",
197 203
        "removalActionId",
198 204
        "authorDid",
199 205
        "text",
200 206
        "status",
201 207
        "createdAt"
202 208
      ],
203 209
      "properties": {
204 210
        "id": {
205 211
          "type": "string",
206 212
          "maxLength": 128
207 213
        },
208 214
        "post": {
209 215
          "type": "string",
210 216
          "format": "at-uri"
211 217
        },
212 218
        "text": {
213 219
          "type": "string",
214 220
          "maxLength": 2000
215 221
        },
216 222
        "status": {
217 223
          "type": "string",
218 224
          "knownValues": [
219 225
            "open",
220 226
            "resolved"
221 227
          ]
222 228
        },
223 229
        "authorDid": {
224 230
          "type": "string",
225 231
          "format": "did"
226 232
        },
227 233
        "community": {
228 234
          "type": "string",
229 235
          "format": "at-uri"
230 236
        },
231 237
        "createdAt": {
232 238
          "type": "string",
233 239
          "format": "datetime"
234 240
        },
235 241
        "resolution": {
236 242
          "type": "string",
237 243
          "knownValues": [
238 244
            "upheld",
239 245
            "restored"
240 246
          ]
241 247
        },
242 248
        "resolvedAt": {
243 249
          "type": "string",
244 250
          "format": "datetime"
245 251
        },
246 252
        "resolvedByDid": {
247 253
          "type": "string",
248 254
          "format": "did"
249 255
        },
250 256
        "resolutionNote": {
251 257
          "type": "string",
252 258
          "maxLength": 2000
253 259
        },
254 260
        "removalActionId": {
255 261
          "type": "string",
256 262
          "maxLength": 128
257 263
        }
258 264
      }
259 265
    },
260 266
    "auditEvent": {
261 267
      "type": "object",
262 268
      "required": [
263 269
        "id",
264 270
        "community",
265 271
        "kind",
266 272
        "actorDid",
267 273
        "createdAt"
268 274
      ],
269 275
      "properties": {
270 276
        "id": {
271 277
          "type": "string",
272 278
          "maxLength": 128
273 279
        },
274 280
        "kind": {
275 281
          "type": "string",
276 282
          "knownValues": [
277 283
            "published",
278 284
            "unpublished",
279 285
            "deletion-begun",
280 286
            "deletion-cancelled",
281 287
            "deleted",
282 288
            "transfer-invited",
283 289
            "transfer-accepted",
284 290
            "transfer-cancelled",
285 291
            "transfer-completed",
286 292
            "member-role-changed",
287 293
            "member-muted",
288 294
            "member-unmuted",
289 295
            "member-banned",
290 296
            "member-unbanned",
291 297
            "post-removed",
292 298
            "post-restored",
293 299
            "post-pinned",
294 300
            "post-unpinned",
295 301
            "report-created",
296 302
            "report-resolved",
297 303
            "appeal-created",
298 304
            "appeal-resolved"
299 305
          ]
300 306
        },
301 307
        "summary": {
302 308
          "type": "string",
303 309
          "maxLength": 2000
304 310
        },
305 311
        "actorDid": {
306 312
          "type": "string",
307 313
          "format": "did"
308 314
        },
309 315
        "community": {
310 316
          "type": "string",
311 317
          "format": "at-uri"
312 318
        },
313 319
        "createdAt": {
314 320
          "type": "string",
315 321
          "format": "datetime"
316 322
        },
317 323
        "subjectDid": {
318 324
          "type": "string",
319 325
          "format": "did"
320 326
        },
321 327
        "subjectUri": {
322 328
          "type": "string",
323 329
          "format": "at-uri"
324 330
        }
325 331
      }
326 332
    },
327 333
    "memberView": {
328 334
      "type": "object",
329 335
      "required": [
330 336
        "did"
331 337
      ],
332 338
      "properties": {
333 339
        "did": {
334 340
          "type": "string",
335 341
          "format": "did"
336 342
        },
337 343
        "role": {
338 344
          "type": "string",
339 345
          "description": "Absent means member.",
340 346
          "knownValues": [
341 347
            "owner",
342 348
            "moderator",
343 349
            "member"
344 350
          ]
345 351
        },
346 352
        "status": {
347 353
          "type": "string",
348 354
          "description": "Absent means active.",
349 355
          "knownValues": [
350 356
            "active",
351 357
            "muted",
352 358
            "banned"
353 359
          ]
354 360
        },
355 361
        "joinedAt": {
356 362
          "type": "string",
357 363
          "format": "datetime"
358 364
        },
359 365
        "membershipUri": {
360 366
          "type": "string",
361 367
          "format": "at-uri"
362 368
        },
363 369
        "viewerActions": {
364 370
          "type": "array",
365 371
          "items": {
366 372
            "type": "string",
367 373
            "knownValues": [
368 374
              "setRole",
369 375
              "mute",
370 376
              "unmute",
371 377
              "ban",
372 378
              "unban"
373 379
            ]
374 380
          },
375 381
          "maxLength": 16,
376 382
          "description": "The manageMember actions this viewer may take on this member, decided by the service. A client renders only the values it recognises and offers nothing else, so a change to who may do what reaches installed clients without a release. Absent means the service predates this field, not that no action is permitted — a client should fall back to its own rules only then."
377 383
        }
378 384
      }
379 385
    },
380 386
    "reportView": {
381 387
      "type": "object",
382 388
      "required": [
383 389
        "id",
384 390
        "community",
385 391
        "post",
386 392
        "reporterDid",
387 393
        "reason",
388 394
        "status",
389 395
        "createdAt"
390 396
      ],
391 397
      "properties": {
392 398
        "id": {
393 399
          "type": "string",
394 400
          "maxLength": 128
395 401
        },
396 402
        "post": {
397 403
          "type": "string",
398 404
          "format": "at-uri"
399 405
        },
400 406
        "reason": {
401 407
          "type": "string",
402 408
          "maxLength": 2000
403 409
        },
404 410
        "status": {
405 411
          "type": "string",
406 412
          "knownValues": [
407 413
            "open",
408 414
            "resolved"
409 415
          ]
410 416
        },
411 417
        "community": {
412 418
          "type": "string",
413 419
          "format": "at-uri"
414 420
        },
415 421
        "createdAt": {
416 422
          "type": "string",
417 423
          "format": "datetime"
418 424
        },
419 425
        "resolution": {
420 426
          "type": "string",
421 427
          "knownValues": [
422 428
            "removed",
423 429
            "dismissed"
424 430
          ]
425 431
        },
426 432
        "resolvedAt": {
427 433
          "type": "string",
428 434
          "format": "datetime"
429 435
        },
430 436
        "reporterDid": {
431 437
          "type": "string",
432 438
          "format": "did"
433 439
        },
434 440
        "resolvedByDid": {
435 441
          "type": "string",
436 442
          "format": "did"
437 443
        },
438 444
        "resolutionNote": {
439 445
          "type": "string",
440 446
          "maxLength": 2000
441 447
        }
442 448
      }
443 449
    },
444 450
    "viewerState": {
445 451
      "type": "object",
446 452
      "properties": {
447 453
        "role": {
448 454
          "type": "string",
449 455
          "knownValues": [
450 456
            "owner",
451 457
            "moderator",
452 458
            "member"
453 459
          ]
454 460
        },
455 461
        "canPost": {
456 462
          "type": "boolean",
457 463
          "default": false
458 464
        },
459 465
        "canManage": {
460 466
          "type": "boolean",
461 467
          "default": false
462 468
        },
463 469
        "canModerate": {
464 470
          "type": "boolean",
465 471
          "default": false
466 472
        },
467 473
        "membershipUri": {
468 474
          "type": "string",
469 475
          "format": "at-uri"
470 476
        },
471 477
        "canAssignRoles": {
472 478
          "type": "boolean",
473 479
          "default": false,
474 480
          "description": "Whether this viewer may promote or demote another member. Separate from canManage, which is authority over the declaration record itself and belongs only to the repository that holds it. A service may grant administration to an account that does not hold the record."
475 481
        },
476 482
        "membershipStatus": {
477 483
          "type": "string",
478 484
          "description": "Absent means none.",
479 485
          "knownValues": [
480 486
            "none",
481 487
            "active",
482 488
            "muted",
483 489
            "banned"
484 490
          ]
485 491
        },
486 492
        "canListRestrictedMembers": {
487 493
          "type": "boolean",
488 494
          "default": false,
489 495
          "description": "Whether listMembers will answer this viewer for a status other than active. Stated rather than inferred from canModerate so the rule can change without a client release; a client that predates this field may fall back to canModerate."
490 496
        }
491 497
      },
492 498
      "description": "The requesting account's relationship to a Community. Every field is optional; an absent field means the viewer holds no membership and no privilege."
493 499
    },
494 500
    "writeStatus": {
495 501
      "type": "object",
496 502
      "required": [
497 503
        "uri",
498 504
        "status"
499 505
      ],
500 506
      "properties": {
501 507
        "uri": {
502 508
          "type": "string",
503 509
          "format": "at-uri"
504 510
        },
505 511
        "error": {
506 512
          "type": "string",
507 513
          "maxLength": 1000,
508 514
          "description": "Why the record was rejected. Present only for `rejected`."
509 515
        },
510 516
        "status": {
511 517
          "type": "string",
512 518
          "description": "`pending` means the record has not reached this service yet, which is the normal state for a few seconds after a write. `rejected` means it will never be indexed as written.",
513 519
          "knownValues": [
514 520
            "indexed",
515 521
            "pending",
516 522
            "rejected",
517 523
            "deleted"
518 524
          ]
519 525
        },
520 526
        "indexedAt": {
521 527
          "type": "string",
522 528
          "format": "datetime"
523 529
        }
524 530
      },
525 531
      "description": "The fate of one record the caller wrote to their own repository."
526 532
    },
527 533
    "transferView": {
528 534
      "type": "object",
529 535
      "required": [
530 536
        "id",
531 537
        "community",
532 538
        "fromDid",
533 539
        "toDid",
534 540
        "status",
535 541
        "expiresAt",
536 542
        "createdAt"
537 543
      ],
538 544
      "properties": {
539 545
        "id": {
540 546
          "type": "string",
541 547
          "maxLength": 128
542 548
        },
543 549
        "toDid": {
544 550
          "type": "string",
545 551
          "format": "did"
546 552
        },
547 553
        "status": {
548 554
          "type": "string",
549 555
          "knownValues": [
550 556
            "pending",
551 557
            "accepted",
552 558
            "completed",
553 559
            "cancelled",
554 560
            "expired"
555 561
          ]
556 562
        },
557 563
        "fromDid": {
558 564
          "type": "string",
559 565
          "format": "did"
560 566
        },
561 567
        "community": {
562 568
          "type": "string",
563 569
          "format": "at-uri"
564 570
        },
565 571
        "createdAt": {
566 572
          "type": "string",
567 573
          "format": "datetime"
568 574
        },
569 575
        "expiresAt": {
570 576
          "type": "string",
571 577
          "format": "datetime"
572 578
        },
573 579
        "updatedAt": {
574 580
          "type": "string",
575 581
          "format": "datetime"
576 582
        },
577 583
        "cancelledByDid": {
578 584
          "type": "string",
579 585
          "format": "did",
580 586
          "description": "Who ended the invitation. Present only once status is cancelled, and the one thing that tells a withdrawal by the inviting account apart from a decline by the invited one."
581 587
        },
582 588
        "replacementDeclarationUri": {
583 589
          "type": "string",
584 590
          "format": "at-uri"
585 591
        }
586 592
      }
587 593
    }
588 594
  },
589 595
  "$type": "com.atproto.lexicon.schema",
590 596
  "lexicon": 1
591 597
}

Compare Other Versions

Lexicon Garden

@