social.colibri.beta.actor.defs

colibri.social

Schema Diff

+69 -0

From

CID
bafyreihleg7aur4...
Indexed At
2026-08-23 17:25 UTC
View this version

To

CID
bafyreigphoaoi45...
Indexed At
2026-08-25 14:45 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 21 non-breaking changes.

Breaking Changes (3)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.source", kind: "prop", name: Some("source") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.title", kind: "prop", name: Some("title") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.kind", kind: "prop", name: Some("kind") }
Non-Breaking Changes (21)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.detail" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.endsAt" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.imageUri" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.kind" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.linkUri" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.source" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.startedAt" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.subtitle" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.title" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#preferences.shareActivity" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#presence.activity" }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.detail", kind: "prop", name: Some("detail") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.endsAt", kind: "prop", name: Some("endsAt") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.imageUri", kind: "prop", name: Some("imageUri") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.linkUri", kind: "prop", name: Some("linkUri") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.startedAt", kind: "prop", name: Some("startedAt") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.subtitle", kind: "prop", name: Some("subtitle") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#preferences", tgt: "social.colibri.beta.actor.defs#preferences.shareActivity", kind: "prop", name: Some("shareActivity") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#presence", tgt: "social.colibri.beta.actor.defs#presence.activity", kind: "prop", name: Some("activity") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#presence.activity", tgt: "social.colibri.beta.actor.defs#activity", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.detail" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.endsAt" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.imageUri" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.kind" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.linkUri" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.source" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.startedAt" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.subtitle" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#activity.title" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#preferences.shareActivity" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#presence.activity" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.source", kind: "prop", name: Some("source") }
  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.title", kind: "prop", name: Some("title") }
  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#activity", src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.kind", kind: "prop", name: Some("kind") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.detail", kind: "prop", name: Some("detail") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.endsAt", kind: "prop", name: Some("endsAt") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.imageUri", kind: "prop", name: Some("imageUri") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.linkUri", kind: "prop", name: Some("linkUri") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.startedAt", kind: "prop", name: Some("startedAt") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#activity", tgt: "social.colibri.beta.actor.defs#activity.subtitle", kind: "prop", name: Some("subtitle") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#preferences", tgt: "social.colibri.beta.actor.defs#preferences.shareActivity", kind: "prop", name: Some("shareActivity") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#presence", tgt: "social.colibri.beta.actor.defs#presence.activity", kind: "prop", name: Some("activity") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#presence.activity", tgt: "social.colibri.beta.actor.defs#activity", kind: "ref", name: None }
1 1
{
2 2
  "id": "social.colibri.beta.actor.defs",
3 3
  "defs": {
4 4
    "mute": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "subject",
8 8
        "createdAt"
9 9
      ],
10 10
      "properties": {
11 11
        "subject": {
12 12
          "refs": [
13 13
            "#mutedActor",
14 14
            "#mutedChannel"
15 15
          ],
16 16
          "type": "union",
17 17
          "closed": true,
18 18
          "description": "What is muted. A user or a community is named by DID, a channel by its space."
19 19
        },
20 20
        "createdAt": {
21 21
          "type": "string",
22 22
          "format": "datetime",
23 23
          "description": "When the mute was created."
24 24
        }
25 25
      },
26 26
      "description": "A muted subject."
27 27
    },
28 28
    "status": {
29 29
      "type": "object",
30 30
      "required": [
31 31
        "text"
32 32
      ],
33 33
      "properties": {
34 34
        "text": {
35 35
          "type": "string",
36 36
          "maxLength": 32,
37 37
          "description": "The status text."
38 38
        },
39 39
        "emoji": {
40 40
          "type": "string",
41 41
          "description": "An emoji shown beside the status."
42 42
        }
43 43
      },
44 44
      "description": "A user's status line."
45 45
    },
46 +
    "activity": {
47 +
      "type": "object",
48 +
      "required": [
49 +
        "kind",
50 +
        "title",
51 +
        "source"
52 +
      ],
53 +
      "properties": {
54 +
        "kind": {
55 +
          "type": "string",
56 +
          "description": "What sort of activity this is. A client that does not know a kind falls back to naming the source.",
57 +
          "knownValues": [
58 +
            "listening",
59 +
            "playing",
60 +
            "streaming"
61 +
          ]
62 +
        },
63 +
        "title": {
64 +
          "type": "string",
65 +
          "maxLength": 256,
66 +
          "description": "The main line: a track, a game, or a stream title."
67 +
        },
68 +
        "detail": {
69 +
          "type": "string",
70 +
          "maxLength": 256,
71 +
          "description": "A third line naming where the title sits, such as the album."
72 +
        },
73 +
        "endsAt": {
74 +
          "type": "string",
75 +
          "format": "datetime",
76 +
          "description": "After this the activity is no longer current. The AppView clears it and says so, and a client treats a lapsed activity as absent."
77 +
        },
78 +
        "source": {
79 +
          "type": "string",
80 +
          "maxLength": 64,
81 +
          "description": "The service the activity was read from, such as 'teal.fm'."
82 +
        },
83 +
        "linkUri": {
84 +
          "type": "string",
85 +
          "format": "uri",
86 +
          "description": "Where the activity points, such as the track's page on the service it was played from."
87 +
        },
88 +
        "imageUri": {
89 +
          "type": "string",
90 +
          "format": "uri",
91 +
          "description": "Artwork for the activity, served by this AppView. Absent when none could be resolved."
92 +
        },
93 +
        "subtitle": {
94 +
          "type": "string",
95 +
          "maxLength": 256,
96 +
          "description": "The second line, such as the artist."
97 +
        },
98 +
        "startedAt": {
99 +
          "type": "string",
100 +
          "format": "datetime",
101 +
          "description": "When the activity began."
102 +
        }
103 +
      },
104 +
      "description": "Something the user is doing right now, read from another service they publish to. A client renders it beside their presence."
105 +
    },
46 106
    "presence": {
47 107
      "type": "object",
48 108
      "required": [
49 109
        "onlineState"
50 110
      ],
51 111
      "properties": {
52 112
        "voice": {
53 113
          "ref": "#voiceState",
54 114
          "type": "ref",
55 115
          "description": "Where the user is connected for voice, if anywhere."
56 116
        },
57 117
        "status": {
58 118
          "ref": "#status",
59 119
          "type": "ref",
60 120
          "description": "The user's status line."
61 121
        },
122 +
        "activity": {
123 +
          "ref": "#activity",
124 +
          "type": "ref",
125 +
          "description": "What the user is doing right now, when they share it and the AppView has something current."
126 +
        },
62 127
        "onlineState": {
63 128
          "type": "string",
64 129
          "description": "Derived online state.",
65 130
          "knownValues": [
66 131
            "online",
67 132
            "away",
68 133
            "dnd",
69 134
            "offline"
70 135
          ]
71 136
        }
72 137
      },
73 138
      "description": "A user's live, off-protocol state."
74 139
    },
75 140
    "mutedActor": {
76 141
      "type": "object",
77 142
      "required": [
78 143
        "did"
79 144
      ],
80 145
      "properties": {
81 146
        "did": {
82 147
          "type": "string",
83 148
          "format": "did",
84 149
          "description": "The muted user or community."
85 150
        }
86 151
      },
87 152
      "description": "A muted user or community."
88 153
    },
89 154
    "voiceState": {
90 155
      "type": "object",
91 156
      "required": [
92 157
        "channel"
93 158
      ],
94 159
      "properties": {
95 160
        "muted": {
96 161
          "type": "boolean",
97 162
          "description": "Whether the user's microphone is muted, for any reason."
98 163
        },
99 164
        "channel": {
100 165
          "type": "string",
101 166
          "format": "space-ref",
102 167
          "description": "The voice channel the user is connected to."
103 168
        },
104 169
        "deafened": {
105 170
          "type": "boolean",
106 171
          "description": "Whether the user has incoming audio silenced, for any reason."
107 172
        },
108 173
        "serverMuted": {
109 174
          "type": "boolean",
110 175
          "description": "Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control."
111 176
        },
112 177
        "serverDeafened": {
113 178
          "type": "boolean",
114 179
          "description": "Whether a moderator deafened them. When this is true they cannot undeafen themselves."
115 180
        }
116 181
      },
117 182
      "description": "A user's voice connection."
118 183
    },
119 184
    "preferences": {
120 185
      "type": "object",
121 186
      "required": [
122 187
        "notificationLevel",
123 188
        "communityOrder",
124 189
        "mutes",
125 190
        "gifFavorites"
126 191
      ],
127 192
      "properties": {
128 193
        "mutes": {
129 194
          "type": "array",
130 195
          "items": {
131 196
            "ref": "#mute",
132 197
            "type": "ref"
133 198
          },
134 199
          "description": "Subjects the user has muted."
135 200
        },
136 201
        "gifFavorites": {
137 202
          "type": "array",
138 203
          "items": {
139 204
            "ref": "social.colibri.beta.embed.defs#gifView",
140 205
            "type": "ref"
141 206
          },
142 207
          "description": "GIFs saved from the picker, stored whole."
143 208
        },
209 +
        "shareActivity": {
210 +
          "type": "boolean",
211 +
          "description": "Whether the AppView may read what the user is listening to and show it to others."
212 +
        },
144 213
        "communityOrder": {
145 214
          "type": "array",
146 215
          "items": {
147 216
            "type": "string",
148 217
            "format": "did",
149 218
            "description": "A community."
150 219
          },
151 220
          "description": "Communities in preferred sidebar order."
152 221
        },
153 222
        "notificationLevel": {
154 223
          "type": "string",
155 224
          "description": "Which messages produce a notification.",
156 225
          "knownValues": [
157 226
            "all",
158 227
            "mentionsAndReplies"
159 228
          ]
160 229
        }
161 230
      },
162 231
      "description": "The authenticated user's own settings, as the AppView currently holds them."
163 232
    },
164 233
    "profileView": {
165 234
      "type": "object",
166 235
      "required": [
167 236
        "did",
168 237
        "handle",
169 238
        "displayName",
170 239
        "isBot",
171 240
        "syncBluesky"
172 241
      ],
173 242
      "properties": {
174 243
        "did": {
175 244
          "type": "string",
176 245
          "format": "did",
177 246
          "description": "The user's DID."
178 247
        },
179 248
        "isBot": {
180 249
          "type": "boolean",
181 250
          "description": "Whether the account is labelled as an automated account."
182 251
        },
183 252
        "theme": {
184 253
          "ref": "social.colibri.beta.actor.profile#theme",
185 254
          "type": "ref",
186 255
          "description": "Colibri-only profile theming, read from the profile record even when the mirrored fields come from Bluesky."
187 256
        },
188 257
        "avatar": {
189 258
          "type": "string",
190 259
          "format": "uri",
191 260
          "description": "URL of the user's avatar, served by this AppView's blob proxy."
192 261
        },
193 262
        "banner": {
194 263
          "type": "string",
195 264
          "format": "uri",
196 265
          "description": "URL of the user's profile banner, served by this AppView's blob proxy."
197 266
        },
198 267
        "handle": {
199 268
          "type": "string",
200 269
          "format": "handle",
201 270
          "description": "The user's handle, or 'handle.invalid' when it does not resolve."
202 271
        },
203 272
        "presence": {
204 273
          "ref": "#presence",
205 274
          "type": "ref",
206 275
          "description": "Live presence, when the AppView is tracking any."
207 276
        },
208 277
        "description": {
209 278
          "type": "string",
210 279
          "description": "Resolved bio."
211 280
        },
212 281
        "displayName": {
213 282
          "type": "string",
214 283
          "description": "Resolved display name, falling back to the handle."
215 284
        },
216 285
        "syncBluesky": {
217 286
          "type": "boolean",
218 287
          "description": "Whether the mirrored profile fields come from app.bsky.actor.profile."
219 288
        },
220 289
        "preferredBadge": {
221 290
          "type": "string",
222 291
          "description": "Label value of the badge the user chose to display."
223 292
        }
224 293
      },
225 294
      "description": "A Colibri user as the AppView serves them: identity, resolved profile, and presence."
226 295
    },
227 296
    "mutedChannel": {
228 297
      "type": "object",
229 298
      "required": [
230 299
        "channel"
231 300
      ],
232 301
      "properties": {
233 302
        "channel": {
234 303
          "type": "string",
235 304
          "format": "space-ref",
236 305
          "description": "The muted channel's space."
237 306
        }
238 307
      },
239 308
      "description": "A muted channel. Muting a channel silences it without leaving the community it belongs to."
240 309
    }
241 310
  },
242 311
  "$type": "com.atproto.lexicon.schema",
243 312
  "lexicon": 1
244 313
}

Compare Other Versions

Lexicon Garden

@