fyi.atstore.listing.detail

atstore.fyi

Schema Diff

+45 -0

From

CID
bafyreigkuqax7u4...
Indexed At
2026-04-23 00:44 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 10 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.type", kind: "prop", name: Some("type") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.url", kind: "prop", name: Some("url") }
Non-Breaking Changes (10)
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link" }
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.label" }
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.type" }
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.url" }
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links" }
  • AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links:items" }
  • AddedEdge AddedEdge { src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.label", kind: "prop", name: Some("label") }
  • AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.links", kind: "prop", name: Some("links") }
  • AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body.links", tgt: "fyi.atstore.listing.detail:body.links:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body.links:items", tgt: "fyi.atstore.listing.detail#link", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "fyi.atstore.listing.detail#link" }
  • AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.label" }
  • AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.type" }
  • AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.url" }
  • AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links" }
  • AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links:items" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@