fyi.atstore.listing.detail

atstore.fyi

Schema Diff

+5 -0

From

CID
bafyreietn3ivreh...
Indexed At
2026-04-27 18:13 UTC
View this version

To

CID
bafyreics2gap553...
Indexed At
2026-05-02 07:46 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@