com.getorbyt.community.defs

getorbyt.com

Schema Diff

+12 -1

From

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

To

CID
bafyreidyrybnxxu...
Indexed At
2026-09-17 13:18 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 4 non-breaking changes.

Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.defs#view.avatarFallback" }
  • AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.defs#view.avatarVideo" }
  • AddedEdge AddedEdge { src: "com.getorbyt.community.defs#view", tgt: "com.getorbyt.community.defs#view.avatarFallback", kind: "prop", name: Some("avatarFallback") }
  • 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.avatarFallback" }
  • 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.avatarFallback", kind: "prop", name: Some("avatarFallback") }
  • 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
        },
132 +
        "avatarFallback": {
133 +
          "type": "string",
134 +
          "format": "uri",
135 +
          "description": "A still JPEG or WebP rendition of avatar for constrained or reduced-data connections. Full-capability clients continue to prefer avatar for animated image surfaces."
136 +
        },
126 137
        "declarationUri": {
127 138
          "type": "string",
128 139
          "format": "at-uri",
129 140
          "description": "The live declaration record. Absent means it is the same as uri."
130 141
        },
131 142
        "publicationState": {
132 143
          "type": "string",
133 144
          "description": "Service-owned lifecycle state. Absent means published. Unknown values must be treated as unavailable.",
134 145
          "knownValues": [
135 146
            "published",
136 147
            "unpublished",
137 148
            "deleting",
138 149
            "deleted"
139 150
          ]
140 151
        }
141 152
      },
142 153
      "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 154
    },
144 155
    "feedItem": {
145 156
      "type": "object",
146 157
      "required": [
147 158
        "post"
148 159
      ],
149 160
      "properties": {
150 161
        "post": {
151 162
          "type": "string",
152 163
          "format": "at-uri",
153 164
          "description": "The linked app.bsky.feed.post URI. Clients hydrate it through their authenticated Bluesky AppView."
154 165
        },
155 166
        "pinned": {
156 167
          "type": "boolean",
157 168
          "default": false
158 169
        },
159 170
        "status": {
160 171
          "type": "string",
161 172
          "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 173
          "knownValues": [
163 174
            "visible",
164 175
            "removed"
165 176
          ]
166 177
        },
167 178
        "removedAt": {
168 179
          "type": "string",
169 180
          "format": "datetime"
170 181
        },
171 182
        "removedBy": {
172 183
          "type": "string",
173 184
          "format": "did"
174 185
        },
175 186
        "playbackToken": {
176 187
          "type": "string",
177 188
          "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 189
        },
179 190
        "removedReason": {
180 191
          "type": "string",
181 192
          "maxLength": 1000,
182 193
          "description": "Present only for the post author and Community moderators."
183 194
        },
184 195
        "removalActionId": {
185 196
          "type": "string",
186 197
          "maxLength": 128,
187 198
          "description": "Stable identifier for this specific removal. Present to the author and moderators and used to bind one appeal to one removal."
188 199
        }
189 200
      }
190 201
    },
191 202
    "appealView": {
192 203
      "type": "object",
193 204
      "required": [
194 205
        "id",
195 206
        "community",
196 207
        "post",
197 208
        "removalActionId",
198 209
        "authorDid",
199 210
        "text",
200 211
        "status",
201 212
        "createdAt"
202 213
      ],
203 214
      "properties": {
204 215
        "id": {
205 216
          "type": "string",
206 217
          "maxLength": 128
207 218
        },
208 219
        "post": {
209 220
          "type": "string",
210 221
          "format": "at-uri"
211 222
        },
212 223
        "text": {
213 224
          "type": "string",
214 225
          "maxLength": 2000
215 226
        },
216 227
        "status": {
217 228
          "type": "string",
218 229
          "knownValues": [
219 230
            "open",
220 231
            "resolved"
221 232
          ]
222 233
        },
223 234
        "authorDid": {
224 235
          "type": "string",
225 236
          "format": "did"
226 237
        },
227 238
        "community": {
228 239
          "type": "string",
229 240
          "format": "at-uri"
230 241
        },
231 242
        "createdAt": {
232 243
          "type": "string",
233 244
          "format": "datetime"
234 245
        },
235 246
        "resolution": {
236 247
          "type": "string",
237 248
          "knownValues": [
238 249
            "upheld",
239 250
            "restored"
240 251
          ]
241 252
        },
242 253
        "resolvedAt": {
243 254
          "type": "string",
244 255
          "format": "datetime"
245 256
        },
246 257
        "resolvedByDid": {
247 258
          "type": "string",
248 259
          "format": "did"
249 260
        },
250 261
        "resolutionNote": {
251 262
          "type": "string",
252 263
          "maxLength": 2000
253 264
        },
254 265
        "removalActionId": {
255 266
          "type": "string",
256 267
          "maxLength": 128
257 268
        }
258 269
      }
259 270
    },
260 271
    "auditEvent": {
261 272
      "type": "object",
262 273
      "required": [
263 274
        "id",
264 275
        "community",
265 276
        "kind",
266 277
        "actorDid",
267 278
        "createdAt"
268 279
      ],
269 280
      "properties": {
270 281
        "id": {
271 282
          "type": "string",
272 283
          "maxLength": 128
273 284
        },
274 285
        "kind": {
275 286
          "type": "string",
276 287
          "knownValues": [
277 288
            "published",
278 289
            "unpublished",
279 290
            "deletion-begun",
280 291
            "deletion-cancelled",
281 292
            "deleted",
282 293
            "transfer-invited",
283 294
            "transfer-accepted",
284 295
            "transfer-cancelled",
285 296
            "transfer-completed",
286 297
            "member-role-changed",
287 298
            "member-muted",
288 299
            "member-unmuted",
289 300
            "member-banned",
290 301
            "member-unbanned",
291 302
            "post-removed",
292 303
            "post-restored",
293 304
            "post-pinned",
294 305
            "post-unpinned",
295 306
            "report-created",
296 307
            "report-resolved",
297 308
            "appeal-created",
298 309
            "appeal-resolved"
299 310
          ]
300 311
        },
301 312
        "summary": {
302 313
          "type": "string",
303 314
          "maxLength": 2000
304 315
        },
305 316
        "actorDid": {
306 317
          "type": "string",
307 318
          "format": "did"
308 319
        },
309 320
        "community": {
310 321
          "type": "string",
311 322
          "format": "at-uri"
312 323
        },
313 324
        "createdAt": {
314 325
          "type": "string",
315 326
          "format": "datetime"
316 327
        },
317 328
        "subjectDid": {
318 329
          "type": "string",
319 330
          "format": "did"
320 331
        },
321 332
        "subjectUri": {
322 333
          "type": "string",
323 334
          "format": "at-uri"
324 335
        }
325 336
      }
326 337
    },
327 338
    "memberView": {
328 339
      "type": "object",
329 340
      "required": [
330 341
        "did"
331 342
      ],
332 343
      "properties": {
333 344
        "did": {
334 345
          "type": "string",
335 346
          "format": "did"
336 347
        },
337 348
        "role": {
338 349
          "type": "string",
339 350
          "description": "Absent means member.",
340 351
          "knownValues": [
341 352
            "owner",
342 353
            "moderator",
343 354
            "member"
344 355
          ]
345 356
        },
346 357
        "status": {
347 358
          "type": "string",
348 359
          "description": "Absent means active.",
349 360
          "knownValues": [
350 361
            "active",
351 362
            "muted",
352 363
            "banned"
353 364
          ]
354 365
        },
355 366
        "joinedAt": {
356 367
          "type": "string",
357 368
          "format": "datetime"
358 369
        },
359 370
        "membershipUri": {
360 371
          "type": "string",
361 372
          "format": "at-uri"
362 373
        },
363 374
        "viewerActions": {
364 375
          "type": "array",
365 376
          "items": {
366 377
            "type": "string",
367 378
            "knownValues": [
368 379
              "setRole",
369 380
              "mute",
370 381
              "unmute",
371 382
              "ban",
372 383
              "unban"
373 384
            ]
374 385
          },
375 386
          "maxLength": 16,
376 387
          "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 388
        }
378 389
      }
379 390
    },
380 391
    "reportView": {
381 392
      "type": "object",
382 393
      "required": [
383 394
        "id",
384 395
        "community",
385 396
        "post",
386 397
        "reporterDid",
387 398
        "reason",
388 399
        "status",
389 400
        "createdAt"
390 401
      ],
391 402
      "properties": {
392 403
        "id": {
393 404
          "type": "string",
394 405
          "maxLength": 128
395 406
        },
396 407
        "post": {
397 408
          "type": "string",
398 409
          "format": "at-uri"
399 410
        },
400 411
        "reason": {
401 412
          "type": "string",
402 413
          "maxLength": 2000
403 414
        },
404 415
        "status": {
405 416
          "type": "string",
406 417
          "knownValues": [
407 418
            "open",
408 419
            "resolved"
409 420
          ]
410 421
        },
411 422
        "community": {
412 423
          "type": "string",
413 424
          "format": "at-uri"
414 425
        },
415 426
        "createdAt": {
416 427
          "type": "string",
417 428
          "format": "datetime"
418 429
        },
419 430
        "resolution": {
420 431
          "type": "string",
421 432
          "knownValues": [
422 433
            "removed",
423 434
            "dismissed"
424 435
          ]
425 436
        },
426 437
        "resolvedAt": {
427 438
          "type": "string",
428 439
          "format": "datetime"
429 440
        },
430 441
        "reporterDid": {
431 442
          "type": "string",
432 443
          "format": "did"
433 444
        },
434 445
        "resolvedByDid": {
435 446
          "type": "string",
436 447
          "format": "did"
437 448
        },
438 449
        "resolutionNote": {
439 450
          "type": "string",
440 451
          "maxLength": 2000
441 452
        }
442 453
      }
443 454
    },
444 455
    "viewerState": {
445 456
      "type": "object",
446 457
      "properties": {
447 458
        "role": {
448 459
          "type": "string",
449 460
          "knownValues": [
450 461
            "owner",
451 462
            "moderator",
452 463
            "member"
453 464
          ]
454 465
        },
455 466
        "canPost": {
456 467
          "type": "boolean",
457 468
          "default": false
458 469
        },
459 470
        "canManage": {
460 471
          "type": "boolean",
461 472
          "default": false
462 473
        },
463 474
        "canModerate": {
464 475
          "type": "boolean",
465 476
          "default": false
466 477
        },
467 478
        "membershipUri": {
468 479
          "type": "string",
469 480
          "format": "at-uri"
470 481
        },
471 482
        "canAssignRoles": {
472 483
          "type": "boolean",
473 484
          "default": false,
474 485
          "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 486
        },
476 487
        "membershipStatus": {
477 488
          "type": "string",
478 489
          "description": "Absent means none.",
479 490
          "knownValues": [
480 491
            "none",
481 492
            "active",
482 493
            "muted",
483 494
            "banned"
484 495
          ]
485 496
        },
486 497
        "canListRestrictedMembers": {
487 498
          "type": "boolean",
488 499
          "default": false,
489 500
          "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 501
        }
491 502
      },
492 503
      "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 504
    },
494 505
    "writeStatus": {
495 506
      "type": "object",
496 507
      "required": [
497 508
        "uri",
498 509
        "status"
499 510
      ],
500 511
      "properties": {
501 512
        "uri": {
502 513
          "type": "string",
503 514
          "format": "at-uri"
504 515
        },
505 516
        "error": {
506 517
          "type": "string",
507 518
          "maxLength": 1000,
508 519
          "description": "Why the record was rejected. Present only for `rejected`."
509 520
        },
510 521
        "status": {
511 522
          "type": "string",
512 523
          "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 524
          "knownValues": [
514 525
            "indexed",
515 526
            "pending",
516 527
            "rejected",
517 528
            "deleted"
518 529
          ]
519 530
        },
520 531
        "indexedAt": {
521 532
          "type": "string",
522 533
          "format": "datetime"
523 534
        }
524 535
      },
525 536
      "description": "The fate of one record the caller wrote to their own repository."
526 537
    },
527 538
    "transferView": {
528 539
      "type": "object",
529 540
      "required": [
530 541
        "id",
531 542
        "community",
532 543
        "fromDid",
533 544
        "toDid",
534 545
        "status",
535 546
        "expiresAt",
536 547
        "createdAt"
537 548
      ],
538 549
      "properties": {
539 550
        "id": {
540 551
          "type": "string",
541 552
          "maxLength": 128
542 553
        },
543 554
        "toDid": {
544 555
          "type": "string",
545 556
          "format": "did"
546 557
        },
547 558
        "status": {
548 559
          "type": "string",
549 560
          "knownValues": [
550 561
            "pending",
551 562
            "accepted",
552 563
            "completed",
553 564
            "cancelled",
554 565
            "expired"
555 566
          ]
556 567
        },
557 568
        "fromDid": {
558 569
          "type": "string",
559 570
          "format": "did"
560 571
        },
561 572
        "community": {
562 573
          "type": "string",
563 574
          "format": "at-uri"
564 575
        },
565 576
        "createdAt": {
566 577
          "type": "string",
567 578
          "format": "datetime"
568 579
        },
569 580
        "expiresAt": {
570 581
          "type": "string",
571 582
          "format": "datetime"
572 583
        },
573 584
        "updatedAt": {
574 585
          "type": "string",
575 586
          "format": "datetime"
576 587
        },
577 588
        "cancelledByDid": {
578 589
          "type": "string",
579 590
          "format": "did",
580 591
          "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 592
        },
582 593
        "replacementDeclarationUri": {
583 594
          "type": "string",
584 595
          "format": "at-uri"
585 596
        }
586 597
      }
587 598
    }
588 599
  },
589 600
  "$type": "com.atproto.lexicon.schema",
590 601
  "lexicon": 1
591 602
}

Compare Other Versions

Lexicon Garden

@