fyi.atstore.listing.detail

atstore.fyi

Schema Diff

+3 -0

From

CID
bafyreib2rqlirrk...
Indexed At
2026-05-02 04:06 UTC
View this version

To

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

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
}

Compare Other Versions

Lexicon Garden

@