fyi.atstore.listing.detail
Schema Diff
+5 -0
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 0 non-breaking changes.
Breaking Changes (3)
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.url", sort: "maxLength", value: "2048" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "maxLength", value: "32" }
- ConstraintTightened ConstraintTightened { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "knownValues", old_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"other\"]", new_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"community\",\"donate\",\"license\",\"other\"]" }
Migration Guidance
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "maxLength", value: "32" }
- ConstraintTightened ConstraintTightened { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "knownValues", old_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"other\"]", new_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"community\",\"donate\",\"license\",\"other\"]" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.url", sort: "maxLength", value: "2048" }
1
1
{
2
2
"id": "fyi.atstore.listing.detail",
3
3
"defs": {
4
4
"link": {
5
5
"type": "object",
6
6
"required": [
7
7
"type",
8
8
"url"
9
9
],
10
10
"properties": {
11
11
"url": {
12
12
"type": "string",
13
13
"format": "uri",
14
+
"maxLength": 2048,
14
15
"description": "The destination URL."
15
16
},
16
17
"type": {
17
18
"type": "string",
19
+
"maxLength": 32,
18
20
"description": "The kind of link.",
19
21
"knownValues": [
20
22
"privacy",
21
23
"terms",
22
24
"support",
23
25
"contact",
24
26
"docs",
25
27
"blog",
26
28
"changelog",
27
29
"source",
28
30
"status",
31
+
"community",
32
+
"donate",
33
+
"license",
29
34
"other"
30
35
]
31
36
},
32
37
"label": {
33
38
"type": "string",
34
39
"maxLength": 100,
35
40
"description": "Optional human-readable label, especially useful when type is 'other'.",
36
41
"maxGraphemes": 50
37
42
}
38
43
}
39
44
},
40
45
"main": {
41
46
"key": "tid",
42
47
"type": "record",
43
48
"record": {
44
49
"type": "object",
45
50
"required": [
46
51
"slug",
47
52
"name",
48
53
"tagline",
49
54
"externalUrl",
50
55
"icon",
51
56
"categorySlug",
52
57
"createdAt",
53
58
"updatedAt"
54
59
],
55
60
"properties": {
56
61
"icon": {
57
62
"type": "blob",
58
63
"accept": [
59
64
"image/png",
60
65
"image/jpeg",
61
66
"image/webp",
62
67
"image/gif",
63
68
"image/svg+xml"
64
69
],
65
70
"maxSize": 2000000,
66
71
"description": "Square / app icon (uploaded to repo via com.atproto.repo.uploadBlob)."
67
72
},
68
73
"name": {
69
74
"type": "string",
70
75
"maxLength": 640
71
76
},
72
77
"slug": {
73
78
"type": "string",
74
79
"maxLength": 512,
75
80
"minLength": 1,
76
81
"description": "Stable URL slug; unique within the publishing account."
77
82
},
78
83
"links": {
79
84
"type": "array",
80
85
"items": {
81
86
"ref": "#link",
82
87
"type": "ref"
83
88
},
84
89
"maxLength": 12,
85
90
"description": "Relevant links for the app, including trust/compliance, support, and project resources."
86
91
},
87
92
"appTags": {
88
93
"type": "array",
89
94
"items": {
90
95
"type": "string",
91
96
"maxLength": 96
92
97
},
93
98
"maxLength": 64
94
99
},
95
100
"tagline": {
96
101
"type": "string",
97
102
"maxLength": 300
98
103
},
99
104
"createdAt": {
100
105
"type": "string",
101
106
"format": "datetime"
102
107
},
103
108
"heroImage": {
104
109
"type": "blob",
105
110
"accept": [
106
111
"image/png",
107
112
"image/jpeg",
108
113
"image/webp",
109
114
"image/gif",
110
115
"image/svg+xml"
111
116
],
112
117
"maxSize": 12000000,
113
118
"description": "Hero / cover image blob."
114
119
},
115
120
"updatedAt": {
116
121
"type": "string",
117
122
"format": "datetime"
118
123
},
119
124
"description": {
120
125
"type": "string",
121
126
"maxLength": 20000
122
127
},
123
128
"externalUrl": {
124
129
"type": "string",
125
130
"format": "uri",
126
131
"maxLength": 2048,
127
132
"description": "Primary product or project URL."
128
133
},
129
134
"screenshots": {
130
135
"type": "array",
131
136
"items": {
132
137
"type": "blob",
133
138
"accept": [
134
139
"image/png",
135
140
"image/jpeg",
136
141
"image/webp",
137
142
"image/gif",
138
143
"image/svg+xml"
139
144
],
140
145
"maxSize": 12000000
141
146
},
142
147
"maxLength": 20
143
148
},
144
149
"categorySlug": {
145
150
"type": "array",
146
151
"items": {
147
152
"type": "string",
148
153
"maxLength": 256
149
154
},
150
155
"maxLength": 32,
151
156
"minLength": 1,
152
157
"description": "Browse category keys (e.g. protocol/pds). First entry is the primary category for legacy surfaces."
153
158
},
154
159
"migratedFromAtUri": {
155
160
"type": "string",
156
161
"format": "at-uri",
157
162
"maxLength": 8192,
158
163
"description": "When this listing.detail record supersedes a prior record in another repo (e.g. moved from the AT Store publisher to a product owner PDS), the at:// URI of that prior fyi.atstore.listing.detail record."
159
164
},
160
165
"productAccountDid": {
161
166
"type": "string",
162
167
"maxLength": 2048,
163
168
"description": "Bluesky DID for the product, app, or tool (not the AT Store publisher). Handle is resolved and stored in Postgres only."
164
169
}
165
170
}
166
171
},
167
172
"description": "Public protocol or app listing in the AT Store directory. Images are stored as repo blobs (Kitchen-style); the web app caches HTTPS URLs in Postgres separately."
168
173
}
169
174
},
170
175
"$type": "com.atproto.lexicon.schema",
171
176
"lexicon": 1
172
177
}