app.bsky.feed.defs

bsky-lexicons.bsky.social

Schema Diff

+1 -0

From

CID
bafyreiadwvxawxi...
Indexed At
2026-02-18 17:49 UTC
View this version

To

CID
bafyreibg2zvz4n2...
Indexed At
2026-07-16 14:58 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 5 non-breaking changes.

Breaking Changes (3)
  • RemovedEdge RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant2", kind: "variant", name: Some("app.bsky.embed.external#view") }
  • RemovedEdge RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant3", kind: "variant", name: Some("app.bsky.embed.record#view") }
  • RemovedEdge RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant4", kind: "variant", name: Some("app.bsky.embed.recordWithMedia#view") }
Non-Breaking Changes (5)
  • AddedVertex AddedVertex { vertex_id: "app.bsky.feed.defs#postView.embed:variant5" }
  • AddedEdge AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant2", kind: "variant", name: Some("app.bsky.embed.gallery#view") }
  • AddedEdge AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant3", kind: "variant", name: Some("app.bsky.embed.external#view") }
  • AddedEdge AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant4", kind: "variant", name: Some("app.bsky.embed.record#view") }
  • AddedEdge AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant5", kind: "variant", name: Some("app.bsky.embed.recordWithMedia#view") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.bsky.feed.defs#postView.embed:variant5" }

Additional Notes

  • Breaking: RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant2", kind: "variant", name: Some("app.bsky.embed.external#view") }
  • Breaking: RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant3", kind: "variant", name: Some("app.bsky.embed.record#view") }
  • Breaking: RemovedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant4", kind: "variant", name: Some("app.bsky.embed.recordWithMedia#view") }
  • Non-breaking: AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant2", kind: "variant", name: Some("app.bsky.embed.gallery#view") }
  • Non-breaking: AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant3", kind: "variant", name: Some("app.bsky.embed.external#view") }
  • Non-breaking: AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant4", kind: "variant", name: Some("app.bsky.embed.record#view") }
  • Non-breaking: AddedEdge { src: "app.bsky.feed.defs#postView.embed", tgt: "app.bsky.feed.defs#postView.embed:variant5", kind: "variant", name: Some("app.bsky.embed.recordWithMedia#view") }
1 1
{
2 2
  "id": "app.bsky.feed.defs",
3 3
  "defs": {
4 4
    "postView": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "uri",
8 8
        "cid",
9 9
        "author",
10 10
        "record",
11 11
        "indexedAt"
12 12
      ],
13 13
      "properties": {
14 14
        "cid": {
15 15
          "type": "string",
16 16
          "format": "cid"
17 17
        },
18 18
        "uri": {
19 19
          "type": "string",
20 20
          "format": "at-uri"
21 21
        },
22 22
        "debug": {
23 23
          "type": "unknown",
24 24
          "description": "Debug information for internal development"
25 25
        },
26 26
        "embed": {
27 27
          "refs": [
28 28
            "app.bsky.embed.images#view",
29 29
            "app.bsky.embed.video#view",
30 +
            "app.bsky.embed.gallery#view",
30 31
            "app.bsky.embed.external#view",
31 32
            "app.bsky.embed.record#view",
32 33
            "app.bsky.embed.recordWithMedia#view"
33 34
          ],
34 35
          "type": "union"
35 36
        },
36 37
        "author": {
37 38
          "ref": "app.bsky.actor.defs#profileViewBasic",
38 39
          "type": "ref"
39 40
        },
40 41
        "labels": {
41 42
          "type": "array",
42 43
          "items": {
43 44
            "ref": "com.atproto.label.defs#label",
44 45
            "type": "ref"
45 46
          }
46 47
        },
47 48
        "record": {
48 49
          "type": "unknown"
49 50
        },
50 51
        "viewer": {
51 52
          "ref": "#viewerState",
52 53
          "type": "ref"
53 54
        },
54 55
        "indexedAt": {
55 56
          "type": "string",
56 57
          "format": "datetime"
57 58
        },
58 59
        "likeCount": {
59 60
          "type": "integer"
60 61
        },
61 62
        "quoteCount": {
62 63
          "type": "integer"
63 64
        },
64 65
        "replyCount": {
65 66
          "type": "integer"
66 67
        },
67 68
        "threadgate": {
68 69
          "ref": "#threadgateView",
69 70
          "type": "ref"
70 71
        },
71 72
        "repostCount": {
72 73
          "type": "integer"
73 74
        },
74 75
        "bookmarkCount": {
75 76
          "type": "integer"
76 77
        }
77 78
      }
78 79
    },
79 80
    "replyRef": {
80 81
      "type": "object",
81 82
      "required": [
82 83
        "root",
83 84
        "parent"
84 85
      ],
85 86
      "properties": {
86 87
        "root": {
87 88
          "refs": [
88 89
            "#postView",
89 90
            "#notFoundPost",
90 91
            "#blockedPost"
91 92
          ],
92 93
          "type": "union"
93 94
        },
94 95
        "parent": {
95 96
          "refs": [
96 97
            "#postView",
97 98
            "#notFoundPost",
98 99
            "#blockedPost"
99 100
          ],
100 101
          "type": "union"
101 102
        },
102 103
        "grandparentAuthor": {
103 104
          "ref": "app.bsky.actor.defs#profileViewBasic",
104 105
          "type": "ref",
105 106
          "description": "When parent is a reply to another post, this is the author of that post."
106 107
        }
107 108
      }
108 109
    },
109 110
    "reasonPin": {
110 111
      "type": "object",
111 112
      "properties": {}
112 113
    },
113 114
    "blockedPost": {
114 115
      "type": "object",
115 116
      "required": [
116 117
        "uri",
117 118
        "blocked",
118 119
        "author"
119 120
      ],
120 121
      "properties": {
121 122
        "uri": {
122 123
          "type": "string",
123 124
          "format": "at-uri"
124 125
        },
125 126
        "author": {
126 127
          "ref": "#blockedAuthor",
127 128
          "type": "ref"
128 129
        },
129 130
        "blocked": {
130 131
          "type": "boolean",
131 132
          "const": true
132 133
        }
133 134
      }
134 135
    },
135 136
    "interaction": {
136 137
      "type": "object",
137 138
      "properties": {
138 139
        "item": {
139 140
          "type": "string",
140 141
          "format": "at-uri"
141 142
        },
142 143
        "event": {
143 144
          "type": "string",
144 145
          "knownValues": [
145 146
            "app.bsky.feed.defs#requestLess",
146 147
            "app.bsky.feed.defs#requestMore",
147 148
            "app.bsky.feed.defs#clickthroughItem",
148 149
            "app.bsky.feed.defs#clickthroughAuthor",
149 150
            "app.bsky.feed.defs#clickthroughReposter",
150 151
            "app.bsky.feed.defs#clickthroughEmbed",
151 152
            "app.bsky.feed.defs#interactionSeen",
152 153
            "app.bsky.feed.defs#interactionLike",
153 154
            "app.bsky.feed.defs#interactionRepost",
154 155
            "app.bsky.feed.defs#interactionReply",
155 156
            "app.bsky.feed.defs#interactionQuote",
156 157
            "app.bsky.feed.defs#interactionShare"
157 158
          ]
158 159
        },
159 160
        "reqId": {
160 161
          "type": "string",
161 162
          "maxLength": 100,
162 163
          "description": "Unique identifier per request that may be passed back alongside interactions."
163 164
        },
164 165
        "feedContext": {
165 166
          "type": "string",
166 167
          "maxLength": 2000,
167 168
          "description": "Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton."
168 169
        }
169 170
      }
170 171
    },
171 172
    "requestLess": {
172 173
      "type": "token",
173 174
      "description": "Request that less content like the given feed item be shown in the feed"
174 175
    },
175 176
    "requestMore": {
176 177
      "type": "token",
177 178
      "description": "Request that more content like the given feed item be shown in the feed"
178 179
    },
179 180
    "viewerState": {
180 181
      "type": "object",
181 182
      "properties": {
182 183
        "like": {
183 184
          "type": "string",
184 185
          "format": "at-uri"
185 186
        },
186 187
        "pinned": {
187 188
          "type": "boolean"
188 189
        },
189 190
        "repost": {
190 191
          "type": "string",
191 192
          "format": "at-uri"
192 193
        },
193 194
        "bookmarked": {
194 195
          "type": "boolean"
195 196
        },
196 197
        "threadMuted": {
197 198
          "type": "boolean"
198 199
        },
199 200
        "replyDisabled": {
200 201
          "type": "boolean"
201 202
        },
202 203
        "embeddingDisabled": {
203 204
          "type": "boolean"
204 205
        }
205 206
      },
206 207
      "description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests."
207 208
    },
208 209
    "feedViewPost": {
209 210
      "type": "object",
210 211
      "required": [
211 212
        "post"
212 213
      ],
213 214
      "properties": {
214 215
        "post": {
215 216
          "ref": "#postView",
216 217
          "type": "ref"
217 218
        },
218 219
        "reply": {
219 220
          "ref": "#replyRef",
220 221
          "type": "ref"
221 222
        },
222 223
        "reqId": {
223 224
          "type": "string",
224 225
          "maxLength": 100,
225 226
          "description": "Unique identifier per request that may be passed back alongside interactions."
226 227
        },
227 228
        "reason": {
228 229
          "refs": [
229 230
            "#reasonRepost",
230 231
            "#reasonPin"
231 232
          ],
232 233
          "type": "union"
233 234
        },
234 235
        "feedContext": {
235 236
          "type": "string",
236 237
          "maxLength": 2000,
237 238
          "description": "Context provided by feed generator that may be passed back alongside interactions."
238 239
        }
239 240
      }
240 241
    },
241 242
    "notFoundPost": {
242 243
      "type": "object",
243 244
      "required": [
244 245
        "uri",
245 246
        "notFound"
246 247
      ],
247 248
      "properties": {
248 249
        "uri": {
249 250
          "type": "string",
250 251
          "format": "at-uri"
251 252
        },
252 253
        "notFound": {
253 254
          "type": "boolean",
254 255
          "const": true
255 256
        }
256 257
      }
257 258
    },
258 259
    "reasonRepost": {
259 260
      "type": "object",
260 261
      "required": [
261 262
        "by",
262 263
        "indexedAt"
263 264
      ],
264 265
      "properties": {
265 266
        "by": {
266 267
          "ref": "app.bsky.actor.defs#profileViewBasic",
267 268
          "type": "ref"
268 269
        },
269 270
        "cid": {
270 271
          "type": "string",
271 272
          "format": "cid"
272 273
        },
273 274
        "uri": {
274 275
          "type": "string",
275 276
          "format": "at-uri"
276 277
        },
277 278
        "indexedAt": {
278 279
          "type": "string",
279 280
          "format": "datetime"
280 281
        }
281 282
      }
282 283
    },
283 284
    "blockedAuthor": {
284 285
      "type": "object",
285 286
      "required": [
286 287
        "did"
287 288
      ],
288 289
      "properties": {
289 290
        "did": {
290 291
          "type": "string",
291 292
          "format": "did"
292 293
        },
293 294
        "viewer": {
294 295
          "ref": "app.bsky.actor.defs#viewerState",
295 296
          "type": "ref"
296 297
        }
297 298
      }
298 299
    },
299 300
    "generatorView": {
300 301
      "type": "object",
301 302
      "required": [
302 303
        "uri",
303 304
        "cid",
304 305
        "did",
305 306
        "creator",
306 307
        "displayName",
307 308
        "indexedAt"
308 309
      ],
309 310
      "properties": {
310 311
        "cid": {
311 312
          "type": "string",
312 313
          "format": "cid"
313 314
        },
314 315
        "did": {
315 316
          "type": "string",
316 317
          "format": "did"
317 318
        },
318 319
        "uri": {
319 320
          "type": "string",
320 321
          "format": "at-uri"
321 322
        },
322 323
        "avatar": {
323 324
          "type": "string",
324 325
          "format": "uri"
325 326
        },
326 327
        "labels": {
327 328
          "type": "array",
328 329
          "items": {
329 330
            "ref": "com.atproto.label.defs#label",
330 331
            "type": "ref"
331 332
          }
332 333
        },
333 334
        "viewer": {
334 335
          "ref": "#generatorViewerState",
335 336
          "type": "ref"
336 337
        },
337 338
        "creator": {
338 339
          "ref": "app.bsky.actor.defs#profileView",
339 340
          "type": "ref"
340 341
        },
341 342
        "indexedAt": {
342 343
          "type": "string",
343 344
          "format": "datetime"
344 345
        },
345 346
        "likeCount": {
346 347
          "type": "integer",
347 348
          "minimum": 0
348 349
        },
349 350
        "contentMode": {
350 351
          "type": "string",
351 352
          "knownValues": [
352 353
            "app.bsky.feed.defs#contentModeUnspecified",
353 354
            "app.bsky.feed.defs#contentModeVideo"
354 355
          ]
355 356
        },
356 357
        "description": {
357 358
          "type": "string",
358 359
          "maxLength": 3000,
359 360
          "maxGraphemes": 300
360 361
        },
361 362
        "displayName": {
362 363
          "type": "string"
363 364
        },
364 365
        "descriptionFacets": {
365 366
          "type": "array",
366 367
          "items": {
367 368
            "ref": "app.bsky.richtext.facet",
368 369
            "type": "ref"
369 370
          }
370 371
        },
371 372
        "acceptsInteractions": {
372 373
          "type": "boolean"
373 374
        }
374 375
      }
375 376
    },
376 377
    "threadContext": {
377 378
      "type": "object",
378 379
      "properties": {
379 380
        "rootAuthorLike": {
380 381
          "type": "string",
381 382
          "format": "at-uri"
382 383
        }
383 384
      },
384 385
      "description": "Metadata about this post within the context of the thread it is in."
385 386
    },
386 387
    "threadViewPost": {
387 388
      "type": "object",
388 389
      "required": [
389 390
        "post"
390 391
      ],
391 392
      "properties": {
392 393
        "post": {
393 394
          "ref": "#postView",
394 395
          "type": "ref"
395 396
        },
396 397
        "parent": {
397 398
          "refs": [
398 399
            "#threadViewPost",
399 400
            "#notFoundPost",
400 401
            "#blockedPost"
401 402
          ],
402 403
          "type": "union"
403 404
        },
404 405
        "replies": {
405 406
          "type": "array",
406 407
          "items": {
407 408
            "refs": [
408 409
              "#threadViewPost",
409 410
              "#notFoundPost",
410 411
              "#blockedPost"
411 412
            ],
412 413
            "type": "union"
413 414
          }
414 415
        },
415 416
        "threadContext": {
416 417
          "ref": "#threadContext",
417 418
          "type": "ref"
418 419
        }
419 420
      }
420 421
    },
421 422
    "threadgateView": {
422 423
      "type": "object",
423 424
      "properties": {
424 425
        "cid": {
425 426
          "type": "string",
426 427
          "format": "cid"
427 428
        },
428 429
        "uri": {
429 430
          "type": "string",
430 431
          "format": "at-uri"
431 432
        },
432 433
        "lists": {
433 434
          "type": "array",
434 435
          "items": {
435 436
            "ref": "app.bsky.graph.defs#listViewBasic",
436 437
            "type": "ref"
437 438
          }
438 439
        },
439 440
        "record": {
440 441
          "type": "unknown"
441 442
        }
442 443
      }
443 444
    },
444 445
    "interactionLike": {
445 446
      "type": "token",
446 447
      "description": "User liked the feed item"
447 448
    },
448 449
    "interactionSeen": {
449 450
      "type": "token",
450 451
      "description": "Feed item was seen by user"
451 452
    },
452 453
    "clickthroughItem": {
453 454
      "type": "token",
454 455
      "description": "User clicked through to the feed item"
455 456
    },
456 457
    "contentModeVideo": {
457 458
      "type": "token",
458 459
      "description": "Declares the feed generator returns posts containing app.bsky.embed.video embeds."
459 460
    },
460 461
    "interactionQuote": {
461 462
      "type": "token",
462 463
      "description": "User quoted the feed item"
463 464
    },
464 465
    "interactionReply": {
465 466
      "type": "token",
466 467
      "description": "User replied to the feed item"
467 468
    },
468 469
    "interactionShare": {
469 470
      "type": "token",
470 471
      "description": "User shared the feed item"
471 472
    },
472 473
    "skeletonFeedPost": {
473 474
      "type": "object",
474 475
      "required": [
475 476
        "post"
476 477
      ],
477 478
      "properties": {
478 479
        "post": {
479 480
          "type": "string",
480 481
          "format": "at-uri"
481 482
        },
482 483
        "reason": {
483 484
          "refs": [
484 485
            "#skeletonReasonRepost",
485 486
            "#skeletonReasonPin"
486 487
          ],
487 488
          "type": "union"
488 489
        },
489 490
        "feedContext": {
490 491
          "type": "string",
491 492
          "maxLength": 2000,
492 493
          "description": "Context that will be passed through to client and may be passed to feed generator back alongside interactions."
493 494
        }
494 495
      }
495 496
    },
496 497
    "clickthroughEmbed": {
497 498
      "type": "token",
498 499
      "description": "User clicked through to the embedded content of the feed item"
499 500
    },
500 501
    "interactionRepost": {
501 502
      "type": "token",
502 503
      "description": "User reposted the feed item"
503 504
    },
504 505
    "skeletonReasonPin": {
505 506
      "type": "object",
506 507
      "properties": {}
507 508
    },
508 509
    "clickthroughAuthor": {
509 510
      "type": "token",
510 511
      "description": "User clicked through to the author of the feed item"
511 512
    },
512 513
    "clickthroughReposter": {
513 514
      "type": "token",
514 515
      "description": "User clicked through to the reposter of the feed item"
515 516
    },
516 517
    "generatorViewerState": {
517 518
      "type": "object",
518 519
      "properties": {
519 520
        "like": {
520 521
          "type": "string",
521 522
          "format": "at-uri"
522 523
        }
523 524
      }
524 525
    },
525 526
    "skeletonReasonRepost": {
526 527
      "type": "object",
527 528
      "required": [
528 529
        "repost"
529 530
      ],
530 531
      "properties": {
531 532
        "repost": {
532 533
          "type": "string",
533 534
          "format": "at-uri"
534 535
        }
535 536
      }
536 537
    },
537 538
    "contentModeUnspecified": {
538 539
      "type": "token",
539 540
      "description": "Declares the feed generator returns any types of posts."
540 541
    }
541 542
  },
542 543
  "$type": "com.atproto.lexicon.schema",
543 544
  "lexicon": 1
544 545
}

Compare Other Versions

Lexicon Garden

@