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