fyi.opensocial.site
Schema Diff
+9 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 4 non-breaking changes.
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.network" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.network:items" }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.network", kind: "prop", name: Some("network") }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.network", tgt: "fyi.opensocial.site#tab.network:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.opensocial.site#tab.network" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.network:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.network", kind: "prop", name: Some("network") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.network", tgt: "fyi.opensocial.site#tab.network:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"appview": {
5
5
"description": "An app server a tab reads for the viewer: what its methods' names start with, and the service, by DID and id.",
6
6
"properties": {
7
7
"prefix": {
8
8
"description": "social.grain",
9
9
"maxLength": 253,
10
10
"type": "string"
11
11
},
12
12
"service": {
13
13
"description": "did:web:grain.social#grain_appview",
14
14
"maxLength": 2048,
15
15
"type": "string"
16
16
}
17
17
},
18
18
"required": [
19
19
"prefix",
20
20
"service"
21
21
],
22
22
"type": "object"
23
23
},
24
24
"channel": {
25
25
"properties": {
26
26
"front": {
27
27
"description": "The site's front page, drawn across the whole window with nothing around it, at every path at the group's address but the channels' (/c/<channel>/<tab>). Members land in the channels at the address itself, and see it at any other of its paths. One tab at most, and one anyone may see.",
28
28
"type": "boolean"
29
29
},
30
30
"members": {
31
31
"description": "Shown to members only.",
32
32
"type": "boolean"
33
33
},
34
34
"name": {
35
35
"maxGraphemes": 64,
36
36
"maxLength": 640,
37
37
"type": "string"
38
38
},
39
39
"roles": {
40
40
"description": "Shown only to members with one of these roles, by the group's role ids: a channel for those who run part of the group. Implies members.",
41
41
"items": {
42
42
"maxLength": 128,
43
43
"type": "string"
44
44
},
45
45
"maxLength": 20,
46
46
"type": "array"
47
47
},
48
48
"slug": {
49
49
"description": "Lowercase letters, digits and dashes; its address within the site.",
50
50
"maxLength": 64,
51
51
"type": "string"
52
52
},
53
53
"tabs": {
54
54
"items": {
55
55
"ref": "#tab",
56
56
"type": "ref"
57
57
},
58
58
"maxLength": 50,
59
59
"type": "array"
60
60
}
61
61
},
62
62
"required": [
63
63
"slug",
64
64
"tabs"
65
65
],
66
66
"type": "object"
67
67
},
68
68
"file": {
69
69
"properties": {
70
70
"file": {
71
71
"maxSize": 5000000,
72
72
"type": "blob"
73
73
},
74
74
"path": {
75
75
"maxLength": 512,
76
76
"type": "string"
77
77
}
78
78
},
79
79
"required": [
80
80
"path",
81
81
"file"
82
82
],
83
83
"type": "object"
84
84
},
85
85
"main": {
86
86
"description": "A group's site, in its members space: channels of tabs, shown one at a time, each a whole HTML document drawn in a sandboxed frame. Authored by the group DID; written through putSite by whoever holds group.configure. Anyone else is handed only its public part, by the host. A group without one is shown the starter.",
87
87
"key": "literal:self",
88
88
"record": {
89
89
"properties": {
90
90
"channels": {
91
91
"items": {
92
92
"ref": "#channel",
93
93
"type": "ref"
94
94
},
95
95
"maxLength": 50,
96
96
"type": "array"
97
97
},
98
98
"files": {
99
99
"description": "Everything the site is made of, by path. A tab's page is `<channel>/<tab>.html`, or `<channel>/<tab>/index.html` with what it uses beside it; `site.css` is put in front of every tab.",
100
100
"items": {
101
101
"ref": "#file",
102
102
"type": "ref"
103
103
},
104
104
"maxLength": 500,
105
105
"type": "array"
106
106
},
107
107
"theme": {
108
108
"ref": "#theme",
109
109
"type": "ref"
110
110
},
111
111
"updatedAt": {
112
112
"format": "datetime",
113
113
"type": "string"
114
114
}
115
115
},
116
116
"required": [
117
117
"channels",
118
118
"files",
119
119
"updatedAt"
120
120
],
121
121
"type": "object"
122
122
},
123
123
"type": "record"
124
124
},
125
125
"tab": {
126
126
"properties": {
127
127
"about": {
128
128
"description": "The one thing it is for, which its page shows: an event's or a chat room's URI in one of the group's spaces, a board's space, or a member's DID. Its tab comes and goes with it.",
129
129
"maxLength": 512,
130
130
"type": "string"
131
131
},
132
132
"appviews": {
133
133
"description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
134
134
"items": {
135
135
"ref": "fyi.opensocial.site#appview",
136
136
"type": "ref"
137
137
},
138
138
"maxLength": 10,
139
139
"type": "array"
140
140
},
141
141
"asGroup": {
142
142
"description": "What it writes as the group rather than as the viewer, and the kind of space each goes in.",
143
143
"items": {
144
144
"ref": "fyi.opensocial.template#asGroup",
145
145
"type": "ref"
146
146
},
147
147
"type": "array"
148
148
},
149
149
"calls": {
150
150
"description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
151
151
"items": {
152
152
"format": "nsid",
153
153
"type": "string"
154
154
},
155
155
"maxLength": 50,
156
156
"type": "array"
157
157
},
158
158
"cid": {
159
159
"description": "With a template URI: that version only.",
160
160
"format": "cid",
161
161
"type": "string"
162
162
},
163
163
"labels": {
164
164
"description": "Its words for what it lets people do, by record kind or method.",
165
165
"items": {
166
166
"ref": "fyi.opensocial.template#label",
167
167
"type": "ref"
168
168
},
169
169
"type": "array"
170
170
},
171
171
"members": {
172
172
"description": "Shown to members only.",
173
173
"type": "boolean"
174
174
},
175
+
"network": {
176
+
"description": "Collections it reads from everyone on the network who writes them, not only the group and its members: the host keeps each one whole from when the site is saved, and won't save one more accounts write than it can keep.",
177
+
"items": {
178
+
"format": "nsid",
179
+
"type": "string"
180
+
},
181
+
"maxLength": 20,
182
+
"type": "array"
183
+
},
175
184
"page": {
176
185
"description": "One of the site's files to show, which tabs alike share (every event's tab, say). Read before the tab's own file and its template.",
177
186
"maxLength": 256,
178
187
"type": "string"
179
188
},
180
189
"reads": {
181
190
"description": "The collections it may read from the group, its members and its spaces.",
182
191
"items": {
183
192
"format": "nsid",
184
193
"type": "string"
185
194
},
186
195
"maxLength": 50,
187
196
"type": "array"
188
197
},
189
198
"roles": {
190
199
"description": "For members with one of these roles, by the group's role ids. Others don't see it, or its tab. Members only.",
191
200
"items": {
192
201
"maxLength": 64,
193
202
"type": "string"
194
203
},
195
204
"maxLength": 20,
196
205
"type": "array"
197
206
},
198
207
"slug": {
199
208
"maxLength": 64,
200
209
"type": "string"
201
210
},
202
211
"template": {
203
212
"description": "Drawn from a template when the site has no page of its own for it: a bundled one by name, a fyi.opensocial.template by URI, or a member's fyi.opensocial.page by its URI in the group's space for members' work. A member's page is only ever drawn for members.",
204
213
"maxLength": 512,
205
214
"type": "string"
206
215
},
207
216
"title": {
208
217
"maxGraphemes": 64,
209
218
"maxLength": 640,
210
219
"type": "string"
211
220
},
212
221
"writes": {
213
222
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
214
223
"items": {
215
224
"format": "nsid",
216
225
"type": "string"
217
226
},
218
227
"maxLength": 50,
219
228
"type": "array"
220
229
}
221
230
},
222
231
"required": [
223
232
"slug"
224
233
],
225
234
"type": "object"
226
235
},
227
236
"theme": {
228
237
"description": "Colours, fonts and corners as CSS values, and what sits behind the tabs.",
229
238
"properties": {
230
239
"accent": {
231
240
"maxLength": 200,
232
241
"type": "string"
233
242
},
234
243
"accentInk": {
235
244
"maxLength": 200,
236
245
"type": "string"
237
246
},
238
247
"bg": {
239
248
"maxLength": 200,
240
249
"type": "string"
241
250
},
242
251
"fontBody": {
243
252
"maxLength": 200,
244
253
"type": "string"
245
254
},
246
255
"fontDisplay": {
247
256
"maxLength": 200,
248
257
"type": "string"
249
258
},
250
259
"ink": {
251
260
"maxLength": 200,
252
261
"type": "string"
253
262
},
254
263
"line": {
255
264
"maxLength": 200,
256
265
"type": "string"
257
266
},
258
267
"muted": {
259
268
"maxLength": 200,
260
269
"type": "string"
261
270
},
262
271
"radius": {
263
272
"maxLength": 200,
264
273
"type": "string"
265
274
},
266
275
"surface": {
267
276
"maxLength": 200,
268
277
"type": "string"
269
278
},
270
279
"wallpaper": {
271
280
"description": "A built-in wallpaper by name, `banner` for the group's banner, or the path of an image in the site's files.",
272
281
"maxLength": 512,
273
282
"type": "string"
274
283
}
275
284
},
276
285
"type": "object"
277
286
}
278
287
},
279
288
"id": "fyi.opensocial.site",
280
289
"lexicon": 1
281
290
}