fyi.opensocial.site

lexicons.opensocial.fyi

Schema Diff

+30 -1

From

CID
bafyreickpwogiob...
Indexed At
2026-10-09 00:22 UTC
View this version

To

CID
bafyreihgpgpdj2x...
Indexed At
2026-10-09 16:55 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 8 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }
  • AddedEdge AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
  • AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }
  • AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }
  • AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }
  • AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
  • Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 +
    "appview": {
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 +
      "properties": {
7 +
        "prefix": {
8 +
          "description": "social.grain",
9 +
          "maxLength": 253,
10 +
          "type": "string"
11 +
        },
12 +
        "service": {
13 +
          "description": "did:web:grain.social#grain_appview",
14 +
          "maxLength": 2048,
15 +
          "type": "string"
16 +
        }
17 +
      },
18 +
      "required": [
19 +
        "prefix",
20 +
        "service"
21 +
      ],
22 +
      "type": "object"
23 +
    },
4 24
    "channel": {
5 25
      "properties": {
6 26
        "front": {
7 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.",
8 28
          "type": "boolean"
9 29
        },
10 30
        "members": {
11 31
          "description": "Shown to members only.",
12 32
          "type": "boolean"
13 33
        },
14 34
        "name": {
15 35
          "maxGraphemes": 64,
16 36
          "maxLength": 640,
17 37
          "type": "string"
18 38
        },
19 39
        "roles": {
20 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.",
21 41
          "items": {
22 42
            "maxLength": 128,
23 43
            "type": "string"
24 44
          },
25 45
          "maxLength": 20,
26 46
          "type": "array"
27 47
        },
28 48
        "slug": {
29 49
          "description": "Lowercase letters, digits and dashes; its address within the site.",
30 50
          "maxLength": 64,
31 51
          "type": "string"
32 52
        },
33 53
        "tabs": {
34 54
          "items": {
35 55
            "ref": "#tab",
36 56
            "type": "ref"
37 57
          },
38 58
          "maxLength": 50,
39 59
          "type": "array"
40 60
        }
41 61
      },
42 62
      "required": [
43 63
        "slug",
44 64
        "tabs"
45 65
      ],
46 66
      "type": "object"
47 67
    },
48 68
    "file": {
49 69
      "properties": {
50 70
        "file": {
51 71
          "maxSize": 5000000,
52 72
          "type": "blob"
53 73
        },
54 74
        "path": {
55 75
          "maxLength": 512,
56 76
          "type": "string"
57 77
        }
58 78
      },
59 79
      "required": [
60 80
        "path",
61 81
        "file"
62 82
      ],
63 83
      "type": "object"
64 84
    },
65 85
    "main": {
66 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.",
67 87
      "key": "literal:self",
68 88
      "record": {
69 89
        "properties": {
70 90
          "channels": {
71 91
            "items": {
72 92
              "ref": "#channel",
73 93
              "type": "ref"
74 94
            },
75 95
            "maxLength": 50,
76 96
            "type": "array"
77 97
          },
78 98
          "files": {
79 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.",
80 100
            "items": {
81 101
              "ref": "#file",
82 102
              "type": "ref"
83 103
            },
84 104
            "maxLength": 500,
85 105
            "type": "array"
86 106
          },
87 107
          "theme": {
88 108
            "ref": "#theme",
89 109
            "type": "ref"
90 110
          },
91 111
          "updatedAt": {
92 112
            "format": "datetime",
93 113
            "type": "string"
94 114
          }
95 115
        },
96 116
        "required": [
97 117
          "channels",
98 118
          "files",
99 119
          "updatedAt"
100 120
        ],
101 121
        "type": "object"
102 122
      },
103 123
      "type": "record"
104 124
    },
105 125
    "tab": {
106 126
      "properties": {
107 127
        "about": {
108 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.",
109 129
          "maxLength": 512,
110 130
          "type": "string"
111 131
        },
132 +
        "appviews": {
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 +
          "items": {
135 +
            "ref": "fyi.opensocial.site#appview",
136 +
            "type": "ref"
137 +
          },
138 +
          "maxLength": 10,
139 +
          "type": "array"
140 +
        },
112 141
        "asGroup": {
113 142
          "description": "What it writes as the group rather than as the viewer, and the kind of space each goes in.",
114 143
          "items": {
115 144
            "ref": "fyi.opensocial.template#asGroup",
116 145
            "type": "ref"
117 146
          },
118 147
          "type": "array"
119 148
        },
120 149
        "calls": {
121 -
          "description": "The host methods it may call for the viewer.",
150 +
          "description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
122 151
          "items": {
123 152
            "format": "nsid",
124 153
            "type": "string"
125 154
          },
126 155
          "maxLength": 50,
127 156
          "type": "array"
128 157
        },
129 158
        "cid": {
130 159
          "description": "With a template URI: that version only.",
131 160
          "format": "cid",
132 161
          "type": "string"
133 162
        },
134 163
        "labels": {
135 164
          "description": "Its words for what it lets people do, by record kind or method.",
136 165
          "items": {
137 166
            "ref": "fyi.opensocial.template#label",
138 167
            "type": "ref"
139 168
          },
140 169
          "type": "array"
141 170
        },
142 171
        "members": {
143 172
          "description": "Shown to members only.",
144 173
          "type": "boolean"
145 174
        },
146 175
        "page": {
147 176
          "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.",
148 177
          "maxLength": 256,
149 178
          "type": "string"
150 179
        },
151 180
        "reads": {
152 181
          "description": "The collections it may read from the group, its members and its spaces.",
153 182
          "items": {
154 183
            "format": "nsid",
155 184
            "type": "string"
156 185
          },
157 186
          "maxLength": 50,
158 187
          "type": "array"
159 188
        },
160 189
        "roles": {
161 190
          "description": "For members with one of these roles, by the group's role ids. Others don't see it, or its tab. Members only.",
162 191
          "items": {
163 192
            "maxLength": 64,
164 193
            "type": "string"
165 194
          },
166 195
          "maxLength": 20,
167 196
          "type": "array"
168 197
        },
169 198
        "slug": {
170 199
          "maxLength": 64,
171 200
          "type": "string"
172 201
        },
173 202
        "template": {
174 203
          "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.",
175 204
          "maxLength": 512,
176 205
          "type": "string"
177 206
        },
178 207
        "title": {
179 208
          "maxGraphemes": 64,
180 209
          "maxLength": 640,
181 210
          "type": "string"
182 211
        },
183 212
        "writes": {
184 213
          "description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
185 214
          "items": {
186 215
            "format": "nsid",
187 216
            "type": "string"
188 217
          },
189 218
          "maxLength": 50,
190 219
          "type": "array"
191 220
        }
192 221
      },
193 222
      "required": [
194 223
        "slug"
195 224
      ],
196 225
      "type": "object"
197 226
    },
198 227
    "theme": {
199 228
      "description": "Colours, fonts and corners as CSS values, and what sits behind the tabs.",
200 229
      "properties": {
201 230
        "accent": {
202 231
          "maxLength": 200,
203 232
          "type": "string"
204 233
        },
205 234
        "accentInk": {
206 235
          "maxLength": 200,
207 236
          "type": "string"
208 237
        },
209 238
        "bg": {
210 239
          "maxLength": 200,
211 240
          "type": "string"
212 241
        },
213 242
        "fontBody": {
214 243
          "maxLength": 200,
215 244
          "type": "string"
216 245
        },
217 246
        "fontDisplay": {
218 247
          "maxLength": 200,
219 248
          "type": "string"
220 249
        },
221 250
        "ink": {
222 251
          "maxLength": 200,
223 252
          "type": "string"
224 253
        },
225 254
        "line": {
226 255
          "maxLength": 200,
227 256
          "type": "string"
228 257
        },
229 258
        "muted": {
230 259
          "maxLength": 200,
231 260
          "type": "string"
232 261
        },
233 262
        "radius": {
234 263
          "maxLength": 200,
235 264
          "type": "string"
236 265
        },
237 266
        "surface": {
238 267
          "maxLength": 200,
239 268
          "type": "string"
240 269
        },
241 270
        "wallpaper": {
242 271
          "description": "A built-in wallpaper by name, `banner` for the group's banner, or the path of an image in the site's files.",
243 272
          "maxLength": 512,
244 273
          "type": "string"
245 274
        }
246 275
      },
247 276
      "type": "object"
248 277
    }
249 278
  },
250 279
  "id": "fyi.opensocial.site",
251 280
  "lexicon": 1
252 281
}

Compare Other Versions

Lexicon Garden

@