From
bafyreiatfgiklalqv7hufdjhofh33lwkfprtzprrhhrbyjlrtpimlc4xma
indexed 2026-11-04 01:29 UTC
View this version
To
bafyreid6xkwqfqw374stldddzmbuk675k6jfykvpb3jypzki2622ju4vbu
indexed 2026-11-06 02:31 UTC
View this version
Compatibility
backward compatible Backward compatible. 2 non-breaking changes.
Non-breaking changes (2)
- AddedVertex AddedVertex { vertex_id: "place.stream.livestream#viewerCount.presence" }
- AddedEdge AddedEdge { src: "place.stream.livestream#viewerCount", tgt: "place.stream.livestream#viewerCount.presence", kind: "prop", name: Some("presence") }
Migration guidance
Added
AddedVertex { vertex_id: "place.stream.livestream#viewerCount.presence" }
Notes
- Non-breaking: AddedEdge { src: "place.stream.livestream#viewerCount", tgt: "place.stream.livestream#viewerCount.presence", kind: "prop", name: Some("presence") }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"livestreamView": {55
"properties": {66
"author": {77
"ref": "app.bsky.actor.defs#profileViewBasic",88
"type": "ref"99
},1010
"cid": {1111
"format": "cid",1212
"type": "string"1313
},1414
"indexedAt": {1515
"format": "datetime",1616
"type": "string"1717
},1818
"record": {1919
"type": "unknown"2020
},2121
"uri": {2222
"format": "at-uri",2323
"type": "string"2424
},2525
"viewerCount": {2626
"description": "The number of viewers watching this livestream. Use when you can't reasonably use #viewerCount directly.",2727
"ref": "#viewerCount",2828
"type": "ref"2929
}3030
},3131
"required": [3232
"uri",3333
"cid",3434
"author",3535
"record",3636
"indexedAt"3737
],3838
"type": "object"3939
},4040
"main": {4141
"description": "Record announcing a livestream is happening",4242
"key": "tid",4343
"record": {4444
"properties": {4545
"activity": {4646
"description": "The game or activity being streamed.",4747
"refs": [4848
"place.stream.defs#activityGame",4949
"place.stream.defs#activityLabel"5050
],5151
"type": "union"5252
},5353
"agent": {5454
"description": "The source of the livestream, if available, in a User Agent format: `<product> / <product-version> <comment>` e.g. Streamplace/0.7.5 iOS",5555
"type": "string"5656
},5757
"canonicalUrl": {5858
"description": "The primary URL where this livestream can be viewed, if available.",5959
"format": "uri",6060
"type": "string"6161
},6262
"createdAt": {6363
"description": "Client-declared timestamp when this livestream started.",6464
"format": "datetime",6565
"type": "string"6666
},6767
"endedAt": {6868
"description": "Client-declared timestamp when this livestream ended. Ended livestreams are not supposed to start up again.",6969
"format": "datetime",7070
"type": "string"7171
},7272
"idleTimeoutSeconds": {7373
"description": "Time in seconds after which this livestream should be automatically ended if idle. Zero means no timeout.",7474
"type": "integer"7575
},7676
"lastSeenAt": {7777
"description": "Client-declared timestamp when this livestream was last seen by the Streamplace station.",7878
"format": "datetime",7979
"type": "string"8080
},8181
"notificationSettings": {8282
"ref": "place.stream.livestream#notificationSettings",8383
"type": "ref"8484
},8585
"post": {8686
"description": "The post that announced this livestream.",8787
"ref": "com.atproto.repo.strongRef",8888
"type": "ref"8989
},9090
"tags": {9191
"description": "Freeform tags for this stream. Each tag must be alphanumeric (a-z, A-Z, 0-9) plus colon. Tags with colons indicate a specific tag group (e.g. 'lang:en' indicates the stream's primary language).",9292
"items": {9393
"maxGraphemes": 64,9494
"maxLength": 640,9595
"type": "string"9696
},9797
"maxLength": 10,9898
"type": "array"9999
},100100
"thumb": {101101
"accept": [102102
"image/*"103103
],104104
"maxSize": 1000000,105105
"type": "blob"106106
},107107
"title": {108108
"description": "The title of the livestream, as it will be announced to followers.",109109
"maxGraphemes": 140,110110
"maxLength": 1400,111111
"type": "string"112112
},113113
"url": {114114
"description": "The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream.",115115
"format": "uri",116116
"type": "string"117117
}118118
},119119
"required": [120120
"title",121121
"createdAt"122122
],123123
"type": "object"124124
},125125
"type": "record"126126
},127127
"notificationSettings": {128128
"properties": {129129
"pushNotification": {130130
"description": "Whether this livestream should trigger a push notification to followers.",131131
"type": "boolean"132132
}133133
},134134
"required": [],135135
"type": "object"136136
},137137
"streamplaceAnything": {138138
"properties": {139139
"livestream": {140140
"refs": [141141
"#livestreamView",142142
"#viewerCount",143143
"#teleportArrival",144144
"#teleportCanceled",145145
"place.stream.defs#blockView",146146
"place.stream.defs#renditions",147147
"place.stream.defs#rendition",148148
"place.stream.chat.defs#messageView",149149
"place.stream.chat.defs#pinnedRecordView"150150
],151151
"type": "union"152152
}153153
},154154
"required": [155155
"livestream"156156
],157157
"type": "object"158158
},159159
"teleportArrival": {160160
"properties": {161161
"chatProfile": {162162
"description": "The chat profile of the source streamer",163163
"ref": "place.stream.chat.profile",164164
"type": "ref"165165
},166166
"source": {167167
"description": "The streamer who is teleporting their viewers here",168168
"ref": "app.bsky.actor.defs#profileViewBasic",169169
"type": "ref"170170
},171171
"startsAt": {172172
"description": "When this teleport started",173173
"format": "datetime",174174
"type": "string"175175
},176176
"teleportUri": {177177
"description": "The URI of the teleport record",178178
"format": "at-uri",179179
"type": "string"180180
},181181
"viewerCount": {182182
"description": "How many viewers are arriving from this teleport",183183
"type": "integer"184184
}185185
},186186
"required": [187187
"teleportUri",188188
"source",189189
"viewerCount",190190
"startsAt"191191
],192192
"type": "object"193193
},194194
"teleportCanceled": {195195
"properties": {196196
"reason": {197197
"description": "Why this teleport was canceled",198198
"enum": [199199
"deleted",200200
"denied",201201
"expired"202202
],203203
"type": "string"204204
},205205
"teleportUri": {206206
"description": "The URI of the teleport record that was canceled",207207
"format": "at-uri",208208
"type": "string"209209
}210210
},211211
"required": [212212
"teleportUri",213213
"reason"214214
],215215
"type": "object"216216
},217217
"viewerCount": {218218
"properties": {219219
"count": {220220
"description": "Viewers watching right now.",221221
"type": "integer"222222
},223
"presence": {224
"description": "Current channel WebSocket connections on this node, including while offline. Counts connections, not unique people, separately from playback viewers.",225
"minimum": 0,226
"type": "integer"227
},223228
"total": {224229
"description": "Running number of playback sessions this livestream has had (cumulative, session-based; the X-style 'views' beside the concurrent count).",225230
"type": "integer"226231
}227232
},228233
"required": [229234
"count"230235
],231236
"type": "object"232237
}233238
},234239
"id": "place.stream.livestream",235240
"lexicon": 1236241
}