com.getorbyt.community.defs

getorbyt.com

Schema Diff

+5 -0

From

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

To

CID
bafyreidyrybnxxu...
Indexed At
2026-09-17 13:18 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.avatarFallback" }
  • AddedEdge AddedEdge { src: "com.getorbyt.community.defs#view", tgt: "com.getorbyt.community.defs#view.avatarFallback", kind: "prop", name: Some("avatarFallback") }

Migration Guidance

Added Elements

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

Additional Notes

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

Compare Other Versions

Lexicon Garden

@