fyi.opensocial.site

lexicons.opensocial.fyi

Schema Diff

+43 -1

From

CID
bafyreif46eqqnlc...
Indexed At
2026-10-08 18:10 UTC
View this version

To

CID
bafyreifffdnhvse...
Indexed At
2026-10-09 20:04 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

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

Compare Other Versions

Lexicon Garden

@