social.colibri.channel

colibri.social

Schema Diff

+28 -7

From

CID
bafyreiferpxh4at...
Indexed At
2026-03-26 19:30 UTC
View this version

To

CID
bafyreicizzfddvh...
Indexed At
2026-08-15 22:24 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 13 non-breaking changes.

Breaking Changes (1)
  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.channel:body.type", sort: "format", value: "nsid" }
Non-Breaking Changes (13)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers:items" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles:items" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.linkEmbeds" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.migratedFrom" }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedMembers", kind: "prop", name: Some("allowedMembers") }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedRoles", kind: "prop", name: Some("allowedRoles") }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.linkEmbeds", kind: "prop", name: Some("linkEmbeds") }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.migratedFrom", kind: "prop", name: Some("migratedFrom") }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body.allowedMembers", tgt: "social.colibri.channel:body.allowedMembers:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.channel:body.allowedRoles", tgt: "social.colibri.channel:body.allowedRoles:items", kind: "items", name: None }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.channel:body.type", sort: "enum" }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers" }
  • AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers:items" }
  • AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles" }
  • AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles:items" }
  • AddedVertex { vertex_id: "social.colibri.channel:body.linkEmbeds" }
  • AddedVertex { vertex_id: "social.colibri.channel:body.migratedFrom" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.channel:body.type", sort: "format", value: "nsid" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.channel:body.type", sort: "enum" }

Additional Notes

  • Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedMembers", kind: "prop", name: Some("allowedMembers") }
  • Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedRoles", kind: "prop", name: Some("allowedRoles") }
  • Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.linkEmbeds", kind: "prop", name: Some("linkEmbeds") }
  • Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.migratedFrom", kind: "prop", name: Some("migratedFrom") }
  • Non-breaking: AddedEdge { src: "social.colibri.channel:body.allowedMembers", tgt: "social.colibri.channel:body.allowedMembers:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "social.colibri.channel:body.allowedRoles", tgt: "social.colibri.channel:body.allowedRoles:items", kind: "items", name: None }
1 1
{
2 2
  "id": "social.colibri.channel",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "name",
11 11
          "type",
12 12
          "category",
13 13
          "community"
14 14
        ],
15 15
        "properties": {
16 16
          "name": {
17 17
            "type": "string",
18 18
            "default": "New channel",
19 19
            "maxLength": 32,
20 20
            "minLength": 1,
21 21
            "description": "The name of the channel."
22 22
          },
23 23
          "type": {
24 -
            "enum": [
25 -
              "text",
26 -
              "voice",
27 -
              "forum"
28 -
            ],
29 24
            "type": "string",
30 -
            "description": "The type of the channel."
25 +
            "format": "nsid",
26 +
            "description": "The type of the channel. Colibri provides social.colibri.channel.text, social.colibri.channel.forum, social.colibri.channel.link, and social.colibri.channel.voice."
31 27
          },
32 28
          "$type": {
33 29
            "type": "string",
34 30
            "format": "nsid",
35 31
            "description": "The type of the record."
36 32
          },
37 33
          "category": {
38 34
            "type": "string",
39 35
            "format": "record-key",
40 36
            "description": "The category this channel belongs to."
41 37
          },
42 38
          "community": {
43 39
            "type": "string",
44 40
            "format": "record-key",
45 41
            "description": "The record key of the community this channel belongs to."
46 42
          },
47 43
          "ownerOnly": {
48 44
            "type": "boolean",
49 45
            "default": false,
50 46
            "description": "Whether the owner of the community is the only one allowed to post in the channel or not."
51 47
          },
48 +
          "linkEmbeds": {
49 +
            "type": "boolean",
50 +
            "description": "Whether link previews are displayed in this channel. Absent means the community default applies."
51 +
          },
52 52
          "description": {
53 53
            "type": "string",
54 54
            "default": "",
55 55
            "maxLength": 256,
56 56
            "description": "A description of the channel."
57 +
          },
58 +
          "allowedRoles": {
59 +
            "type": "array",
60 +
            "items": {
61 +
              "type": "string",
62 +
              "format": "record-key"
63 +
            },
64 +
            "description": "Role record-keys allowed to post in this channel. Empty/absent means no role restriction."
65 +
          },
66 +
          "migratedFrom": {
67 +
            "type": "string",
68 +
            "format": "at-uri",
69 +
            "description": "Set on a channel created by migrating a legacy community. Points at the legacy channel record this one replaces, so message history for the old channel can be surfaced here."
70 +
          },
71 +
          "allowedMembers": {
72 +
            "type": "array",
73 +
            "items": {
74 +
              "type": "string",
75 +
              "format": "did"
76 +
            },
77 +
            "description": "Member DIDs explicitly allowed to post in this channel, in addition to allowedRoles."
57 78
          }
58 79
        }
59 80
      },
60 81
      "description": "A channel that belongs to a category on Colibri."
61 82
    }
62 83
  },
63 84
  "$type": "com.atproto.lexicon.schema",
64 85
  "lexicon": 1,
65 -
  "revision": 2
86 +
  "revision": 5
66 87
}

Compare Other Versions

Lexicon Garden

@