fyi.atstore.listing.detail

atstore.fyi

Schema Diff

+5 -1

From

CID
bafyreico3oumjzo...
Indexed At
2026-04-23 03:48 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 0 non-breaking changes.

Breaking Changes (4)
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "fyi.atstore.listing.detail:body", src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.heroImage", kind: "prop", name: Some("heroImage") }
  • 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" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@