fyi.opensocial.template

lexicons.opensocial.fyi

Schema Diff

+26 -2

From

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

To

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

Compatibility Analysis

Backward Compatible

Backward compatible. 12 non-breaking changes.

Non-Breaking Changes (12)
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews:items" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.network" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.network:items" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#pick.link" }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.appviews", kind: "prop", name: Some("appviews") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.network", kind: "prop", name: Some("network") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.appviews", tgt: "fyi.opensocial.template#entry.appviews:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.network", tgt: "fyi.opensocial.template#entry.network:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.template#pick", tgt: "fyi.opensocial.template#pick.link", kind: "prop", name: Some("link") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
  • AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews" }
  • AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews:items" }
  • AddedVertex { vertex_id: "fyi.opensocial.template#entry.network" }
  • AddedVertex { vertex_id: "fyi.opensocial.template#entry.network:items" }
  • AddedVertex { vertex_id: "fyi.opensocial.template#pick.link" }

Additional Notes

  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.appviews", kind: "prop", name: Some("appviews") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.network", kind: "prop", name: Some("network") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.appviews", tgt: "fyi.opensocial.template#entry.appviews:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.network", tgt: "fyi.opensocial.template#entry.network:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.template#pick", tgt: "fyi.opensocial.template#pick.link", kind: "prop", name: Some("link") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "asGroup": {
5 5
      "properties": {
6 6
        "collection": {
7 7
          "format": "nsid",
8 8
          "type": "string"
9 9
        },
10 10
        "in": {
11 11
          "description": "The type of space it goes in.",
12 12
          "format": "nsid",
13 13
          "type": "string"
14 14
        }
15 15
      },
16 16
      "required": [
17 17
        "collection",
18 18
        "in"
19 19
      ],
20 20
      "type": "object"
21 21
    },
22 22
    "entry": {
23 23
      "description": "A tab, as the template suggests it, without the template itself.",
24 24
      "properties": {
25 +
        "appviews": {
26 +
          "description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
27 +
          "items": {
28 +
            "ref": "fyi.opensocial.site#appview",
29 +
            "type": "ref"
30 +
          },
31 +
          "maxLength": 10,
32 +
          "type": "array"
33 +
        },
25 34
        "asGroup": {
26 35
          "description": "What it writes as the group rather than as the viewer, and the kind of space each goes in. Who may is up to each space's access record.",
27 36
          "items": {
28 37
            "ref": "#asGroup",
29 38
            "type": "ref"
30 39
          },
31 40
          "type": "array"
32 41
        },
33 42
        "calls": {
34 -
          "description": "The host methods it may call for the viewer.",
43 +
          "description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
35 44
          "items": {
36 45
            "format": "nsid",
37 46
            "type": "string"
38 47
          },
39 48
          "maxLength": 50,
40 49
          "type": "array"
41 50
        },
42 51
        "for": {
43 -
          "description": "The kind of thing a tab of it is about, if it is about one: a collection of records in the group's spaces, or a type of space. Such a tab's `about` is one of them.",
52 +
          "description": "The kind of thing a tab of it is about, if it is about one: a collection of records in the group's spaces, or a type of space; or, with pick.link, records anywhere on the network. Such a tab's `about` is one of them.",
44 53
          "format": "nsid",
45 54
          "type": "string"
46 55
        },
47 56
        "labels": {
48 57
          "description": "Its words for what it lets people do, by record kind or method, to follow 'Lets people': 'post events'.",
49 58
          "items": {
50 59
            "ref": "#label",
51 60
            "type": "ref"
52 61
          },
53 62
          "type": "array"
54 63
        },
55 64
        "members": {
56 65
          "description": "Shown to members only.",
57 66
          "type": "boolean"
58 67
        },
68 +
        "network": {
69 +
          "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.",
70 +
          "items": {
71 +
            "format": "nsid",
72 +
            "type": "string"
73 +
          },
74 +
          "maxLength": 20,
75 +
          "type": "array"
76 +
        },
59 77
        "pick": {
60 78
          "description": "With for, how choosing which one is put, and what a tab about none of them shows. Without none, a tab of it must be about one.",
61 79
          "ref": "#pick",
62 80
          "type": "ref"
63 81
        },
64 82
        "reads": {
65 83
          "description": "The collections it may read from the group, its members and its spaces.",
66 84
          "items": {
67 85
            "format": "nsid",
68 86
            "type": "string"
69 87
          },
70 88
          "maxLength": 50,
71 89
          "type": "array"
72 90
        },
73 91
        "slug": {
74 92
          "maxLength": 64,
75 93
          "type": "string"
76 94
        },
77 95
        "summary": {
78 96
          "description": "One short line on what a tab of it shows, for choosing it.",
79 97
          "maxGraphemes": 100,
80 98
          "maxLength": 1000,
81 99
          "type": "string"
82 100
        },
83 101
        "title": {
84 102
          "maxGraphemes": 64,
85 103
          "maxLength": 640,
86 104
          "type": "string"
87 105
        },
88 106
        "writes": {
89 107
          "description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
90 108
          "items": {
91 109
            "format": "nsid",
92 110
            "type": "string"
93 111
          },
94 112
          "maxLength": 50,
95 113
          "type": "array"
96 114
        }
97 115
      },
98 116
      "required": [
99 117
        "slug"
100 118
      ],
101 119
      "type": "object"
102 120
    },
103 121
    "label": {
104 122
      "properties": {
105 123
        "action": {
106 124
          "description": "For that write alone.",
107 125
          "knownValues": [
108 126
            "create",
109 127
            "update",
110 128
            "delete"
111 129
          ],
112 130
          "type": "string"
113 131
        },
114 132
        "nsid": {
115 133
          "description": "A record kind it writes, or a method it calls.",
116 134
          "format": "nsid",
117 135
          "type": "string"
118 136
        },
119 137
        "text": {
120 138
          "maxGraphemes": 80,
121 139
          "maxLength": 300,
122 140
          "type": "string"
123 141
        }
124 142
      },
125 143
      "required": [
126 144
        "nsid",
127 145
        "text"
128 146
      ],
129 147
      "type": "object"
130 148
    },
131 149
    "main": {
132 150
      "description": "A template for a tab for a group's site, published by whoever made it. A site names it by URI; an agent installs it as a skill. Keyed by the template's name.",
133 151
      "key": "any",
134 152
      "record": {
135 153
        "properties": {
136 154
          "createdAt": {
137 155
            "format": "datetime",
138 156
            "type": "string"
139 157
          },
140 158
          "description": {
141 159
            "description": "One line saying what it is and when to use it; what an agent matches a request against.",
142 160
            "maxGraphemes": 300,
143 161
            "maxLength": 3000,
144 162
            "type": "string"
145 163
          },
146 164
          "entry": {
147 165
            "description": "How a site uses it unless told otherwise; what it reads, writes and calls are what it needs to be allowed for it to work.",
148 166
            "ref": "#entry",
149 167
            "type": "ref"
150 168
          },
151 169
          "guide": {
152 170
            "description": "How to use it, in markdown: what it shows, what it reads and who can see that, how to make it a group's own.",
153 171
            "maxLength": 50000,
154 172
            "type": "string"
155 173
          },
156 174
          "html": {
157 175
            "description": "The page: a whole HTML document, drawn in a sandboxed frame with the site kit in front of it.",
158 176
            "maxLength": 200000,
159 177
            "type": "string"
160 178
          },
161 179
          "name": {
162 180
            "description": "What a site and an agent call it: lowercase letters, digits and dashes. The same as the record key.",
163 181
            "maxLength": 64,
164 182
            "type": "string"
165 183
          },
166 184
          "preview": {
167 185
            "description": "A small drawing of a tab of it, as SVG, for choosing it: drawn in the site's colours by the tokens var(--bg), var(--ink), var(--muted), var(--line), var(--accent), var(--surface) and var(--soft). Shown as an image, so nothing in it runs.",
168 186
            "maxLength": 20000,
169 187
            "type": "string"
170 188
          }
171 189
        },
172 190
        "required": [
173 191
          "name",
174 192
          "description",
175 193
          "guide",
176 194
          "html",
177 195
          "createdAt"
178 196
        ],
179 197
        "type": "object"
180 198
      },
181 199
      "type": "record"
182 200
    },
183 201
    "pick": {
184 202
      "properties": {
185 203
        "label": {
186 204
          "maxGraphemes": 64,
187 205
          "maxLength": 640,
188 206
          "type": "string"
189 207
        },
208 +
        "link": {
209 +
          "description": "Picked by pasting a link to one, anywhere on the network, rather than from the group's own: a Bluesky feed's. The field's hint.",
210 +
          "maxGraphemes": 64,
211 +
          "maxLength": 640,
212 +
          "type": "string"
213 +
        },
190 214
        "new": {
191 215
          "description": "Making a new place of its own instead, from Add a tab: a space of this type, readable by everyone or some roles.",
192 216
          "ref": "#pickNew",
193 217
          "type": "ref"
194 218
        },
195 219
        "none": {
196 220
          "maxGraphemes": 64,
197 221
          "maxLength": 640,
198 222
          "type": "string"
199 223
        }
200 224
      },
201 225
      "required": [
202 226
        "label"
203 227
      ],
204 228
      "type": "object"
205 229
    },
206 230
    "pickNew": {
207 231
      "properties": {
208 232
        "in": {
209 233
          "description": "The type of space to make.",
210 234
          "format": "nsid",
211 235
          "type": "string"
212 236
        },
213 237
        "label": {
214 238
          "maxGraphemes": 60,
215 239
          "maxLength": 300,
216 240
          "type": "string"
217 241
        }
218 242
      },
219 243
      "required": [
220 244
        "label",
221 245
        "in"
222 246
      ],
223 247
      "type": "object"
224 248
    }
225 249
  },
226 250
  "id": "fyi.opensocial.template",
227 251
  "lexicon": 1
228 252
}

Compare Other Versions

Lexicon Garden

@