at.inlay.component

inlay.at

Schema Diff

+64 -74

From

CID
bafyreie34glisqg...
Indexed At
2026-02-18 18:28 UTC
View this version

To

CID
bafyreicl425kwjr...
Indexed At
2026-03-19 20:26 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

30 breaking changes, 21 non-breaking changes.

Breaking Changes (30)
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.collection" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.format" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.prop" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.type" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#viewCollection" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#viewCollection.collection" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component#viewIdentity" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.accepts" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.accepts:items" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.view:items" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant0" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant1" }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant2" }
  • RemovedEdge RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.collection", kind: "prop", name: Some("collection") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.format", kind: "prop", name: Some("format") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.prop", kind: "prop", name: Some("prop") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.type", kind: "prop", name: Some("type") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component#viewCollection", tgt: "at.inlay.component#viewCollection.collection", kind: "prop", name: Some("collection") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body", tgt: "at.inlay.component:body.accepts", kind: "prop", name: Some("accepts") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body.accepts", tgt: "at.inlay.component:body.accepts:items", kind: "items", name: None }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body.view", tgt: "at.inlay.component:body.view:items", kind: "items", name: None }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant0", kind: "variant", name: Some("#viewRecord") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant1", kind: "variant", name: Some("#viewCollection") }
  • RemovedEdge RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant2", kind: "variant", name: Some("#viewIdentity") }
  • KindChanged KindChanged { vertex_id: "at.inlay.component:body.view", old_kind: "array", new_kind: "ref" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewPrimitive.format", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#view.prop", sort: "maxLength", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewRecord.rkey", sort: "maxLength", value: "512" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewPrimitive.type", sort: "maxLength", value: "128" }
Non-Breaking Changes (21)
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view.accepts" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view.accepts:items" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view.accepts:items:variant0" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view.accepts:items:variant1" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#view.prop" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#viewPrimitive" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#viewPrimitive.format" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#viewPrimitive.type" }
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#viewRecord.rkey" }
  • AddedEdge AddedEdge { src: "at.inlay.component#view", tgt: "at.inlay.component#view.accepts", kind: "prop", name: Some("accepts") }
  • AddedEdge AddedEdge { src: "at.inlay.component#view", tgt: "at.inlay.component#view.prop", kind: "prop", name: Some("prop") }
  • AddedEdge AddedEdge { src: "at.inlay.component#view.accepts", tgt: "at.inlay.component#view.accepts:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "at.inlay.component#view.accepts:items", tgt: "at.inlay.component#view.accepts:items:variant0", kind: "variant", name: Some("#viewRecord") }
  • AddedEdge AddedEdge { src: "at.inlay.component#view.accepts:items", tgt: "at.inlay.component#view.accepts:items:variant1", kind: "variant", name: Some("#viewPrimitive") }
  • AddedEdge AddedEdge { src: "at.inlay.component#viewPrimitive", tgt: "at.inlay.component#viewPrimitive.format", kind: "prop", name: Some("format") }
  • AddedEdge AddedEdge { src: "at.inlay.component#viewPrimitive", tgt: "at.inlay.component#viewPrimitive.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "at.inlay.component#viewRecord", tgt: "at.inlay.component#viewRecord.rkey", kind: "prop", name: Some("rkey") }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.prop", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.format", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.type", sort: "maxLength" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry" }
  • RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.collection" }
  • RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.format" }
  • RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.prop" }
  • RemovedVertex { vertex_id: "at.inlay.component#acceptsEntry.type" }
  • RemovedVertex { vertex_id: "at.inlay.component#viewCollection" }
  • RemovedVertex { vertex_id: "at.inlay.component#viewCollection.collection" }
  • RemovedVertex { vertex_id: "at.inlay.component#viewIdentity" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.accepts" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.accepts:items" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.view:items" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant0" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant1" }
  • RemovedVertex { vertex_id: "at.inlay.component:body.view:items:variant2" }

Added Elements

  • AddedVertex { vertex_id: "at.inlay.component#view" }
  • AddedVertex { vertex_id: "at.inlay.component#view.accepts" }
  • AddedVertex { vertex_id: "at.inlay.component#view.accepts:items" }
  • AddedVertex { vertex_id: "at.inlay.component#view.accepts:items:variant0" }
  • AddedVertex { vertex_id: "at.inlay.component#view.accepts:items:variant1" }
  • AddedVertex { vertex_id: "at.inlay.component#view.prop" }
  • AddedVertex { vertex_id: "at.inlay.component#viewPrimitive" }
  • AddedVertex { vertex_id: "at.inlay.component#viewPrimitive.format" }
  • AddedVertex { vertex_id: "at.inlay.component#viewPrimitive.type" }
  • AddedVertex { vertex_id: "at.inlay.component#viewRecord.rkey" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewRecord.rkey", sort: "maxLength", value: "512" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewPrimitive.format", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#view.prop", sort: "maxLength", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.inlay.component#viewPrimitive.type", sort: "maxLength", value: "128" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.prop", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.format", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.inlay.component#acceptsEntry.type", sort: "maxLength" }

Additional Notes

  • Breaking: RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.collection", kind: "prop", name: Some("collection") }
  • Breaking: RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.format", kind: "prop", name: Some("format") }
  • Breaking: RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.prop", kind: "prop", name: Some("prop") }
  • Breaking: RemovedEdge { src: "at.inlay.component#acceptsEntry", tgt: "at.inlay.component#acceptsEntry.type", kind: "prop", name: Some("type") }
  • Breaking: RemovedEdge { src: "at.inlay.component#viewCollection", tgt: "at.inlay.component#viewCollection.collection", kind: "prop", name: Some("collection") }
  • Breaking: RemovedEdge { src: "at.inlay.component:body", tgt: "at.inlay.component:body.accepts", kind: "prop", name: Some("accepts") }
  • Breaking: RemovedEdge { src: "at.inlay.component:body.accepts", tgt: "at.inlay.component:body.accepts:items", kind: "items", name: None }
  • Breaking: RemovedEdge { src: "at.inlay.component:body.view", tgt: "at.inlay.component:body.view:items", kind: "items", name: None }
  • Breaking: RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant0", kind: "variant", name: Some("#viewRecord") }
  • Breaking: RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant1", kind: "variant", name: Some("#viewCollection") }
  • Breaking: RemovedEdge { src: "at.inlay.component:body.view:items", tgt: "at.inlay.component:body.view:items:variant2", kind: "variant", name: Some("#viewIdentity") }
  • Breaking: KindChanged { vertex_id: "at.inlay.component:body.view", old_kind: "array", new_kind: "ref" }
  • Non-breaking: AddedEdge { src: "at.inlay.component#view", tgt: "at.inlay.component#view.accepts", kind: "prop", name: Some("accepts") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#view", tgt: "at.inlay.component#view.prop", kind: "prop", name: Some("prop") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#view.accepts", tgt: "at.inlay.component#view.accepts:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "at.inlay.component#view.accepts:items", tgt: "at.inlay.component#view.accepts:items:variant0", kind: "variant", name: Some("#viewRecord") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#view.accepts:items", tgt: "at.inlay.component#view.accepts:items:variant1", kind: "variant", name: Some("#viewPrimitive") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#viewPrimitive", tgt: "at.inlay.component#viewPrimitive.format", kind: "prop", name: Some("format") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#viewPrimitive", tgt: "at.inlay.component#viewPrimitive.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "at.inlay.component#viewRecord", tgt: "at.inlay.component#viewRecord.rkey", kind: "prop", name: Some("rkey") }
1 1
{
2 2
  "id": "at.inlay.component",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "type"
11 11
        ],
12 12
        "properties": {
13 13
          "via": {
14 14
            "refs": [
15 15
              "at.inlay.defs#viaValtown"
16 16
            ],
17 17
            "type": "union",
18 18
            "description": "Platform-managed deployment metadata"
19 19
          },
20 20
          "body": {
21 21
            "refs": [
22 22
              "#bodyExternal",
23 23
              "#bodyTemplate"
24 24
            ],
25 25
            "type": "union",
26 26
            "description": "How this component is rendered. Omit for primitives rendered by the host."
27 27
          },
28 28
          "type": {
29 29
            "type": "string",
30 30
            "format": "nsid",
31 31
            "description": "NSID this component implements (also the XRPC procedure)"
32 32
          },
33 33
          "view": {
34 -
            "type": "array",
35 -
            "items": {
36 -
              "refs": [
37 -
                "#viewRecord",
38 -
                "#viewCollection",
39 -
                "#viewIdentity"
40 -
              ],
41 -
              "type": "union"
42 -
            },
43 -
            "description": "What kinds of pages this component is a view for"
44 -
          },
45 -
          "accepts": {
46 -
            "type": "array",
47 -
            "items": {
48 -
              "ref": "#acceptsEntry",
49 -
              "type": "ref"
50 -
            },
51 -
            "description": "Data types this component can render. Used for data-driven discovery."
34 +
            "ref": "#view",
35 +
            "type": "ref",
36 +
            "description": "What data this component views and which prop receives it"
52 37
          },
53 38
          "imports": {
54 39
            "type": "array",
55 40
            "items": {
56 41
              "type": "string",
57 42
              "format": "at-uri"
58 43
            },
59 44
            "description": "Ordered list of pack URIs (import stack). First pack that exports an NSID wins."
60 45
          },
61 46
          "createdAt": {
62 47
            "type": "string",
63 48
            "format": "datetime"
64 49
          },
65 50
          "updatedAt": {
66 51
            "type": "string",
67 52
            "format": "datetime",
68 53
            "description": "Last update timestamp. Set by the publish flow to bust cached responses."
69 54
          },
70 55
          "description": {
71 56
            "type": "string",
72 57
            "maxLength": 10000,
73 58
            "maxGraphemes": 1000
74 59
          }
75 60
        }
76 61
      },
77 62
      "description": "Component record - declares an implementation of a type"
78 63
    },
79 -
    "viewRecord": {
80 -
      "type": "object",
81 -
      "properties": {
82 -
        "collection": {
83 -
          "type": "string",
84 -
          "format": "nsid",
85 -
          "description": "The collection this component views. Omit for any-collection."
86 -
        }
87 -
      },
88 -
      "description": "Component is a view for individual records of a collection. Omit collection for a generic record view."
89 -
    },
90 -
    "acceptsEntry": {
64 +
    "view": {
91 65
      "type": "object",
92 66
      "required": [
93 -
        "type",
94 -
        "prop"
67 +
        "prop",
68 +
        "accepts"
95 69
      ],
96 70
      "properties": {
97 71
        "prop": {
98 72
          "type": "string",
99 73
          "maxLength": 256,
100 -
          "description": "Prop to bind matched data to."
74 +
          "description": "Which component prop receives the view data."
101 75
        },
102 -
        "type": {
76 +
        "accepts": {
77 +
          "type": "array",
78 +
          "items": {
79 +
            "refs": [
80 +
              "#viewRecord",
81 +
              "#viewPrimitive"
82 +
            ],
83 +
            "type": "union"
84 +
          },
85 +
          "minLength": 1,
86 +
          "description": "Data types this view accepts."
87 +
        }
88 +
      },
89 +
      "description": "Declares what data this component views and which prop receives it."
90 +
    },
91 +
    "viewRecord": {
92 +
      "type": "object",
93 +
      "properties": {
94 +
        "rkey": {
103 95
          "type": "string",
104 -
          "maxLength": 128,
105 -
          "description": "Lexicon field type.",
106 -
          "knownValues": [
107 -
            "string",
108 -
            "integer",
109 -
            "boolean",
110 -
            "blob",
111 -
            "cid-link",
112 -
            "bytes"
113 -
          ]
96 +
          "maxLength": 512,
97 +
          "description": "The record key, baked from the collection's lexicon at authoring time. Presence enables DID expansion and identity page routing."
114 98
        },
115 -
        "format": {
116 -
          "type": "string",
117 -
          "maxLength": 64,
118 -
          "description": "String format constraint. Only applies when type is 'string'.",
119 -
          "knownValues": [
120 -
            "at-uri",
121 -
            "did",
122 -
            "datetime",
123 -
            "uri",
124 -
            "handle",
125 -
            "at-identifier",
126 -
            "nsid",
127 -
            "cid",
128 -
            "language",
129 -
            "record-key",
130 -
            "tid"
131 -
          ]
132 -
        },
133 99
        "collection": {
134 100
          "type": "string",
135 101
          "format": "nsid",
136 -
          "description": "For at-uri strings, restricts to this collection."
102 +
          "description": "The collection this component views. Omit for any-collection."
137 103
        }
138 104
      },
139 -
      "description": "Declares a data type this component can handle, routed to a specific prop."
105 +
      "description": "View accepts individual records of a collection. Omit collection for a generic record view. When rkey is present, the component accepts bare DIDs (expanded to full AT URIs) and appears on identity pages."
140 106
    },
141 107
    "bodyExternal": {
142 108
      "type": "object",
143 109
      "required": [
144 110
        "did"
145 111
      ],
146 112
      "properties": {
147 113
        "did": {
148 114
          "type": "string",
149 115
          "format": "did",
150 116
          "description": "DID of the service hosting this component"
151 117
        }
152 118
      },
153 119
      "description": "Component rendered by calling a remote XRPC endpoint"
154 120
    },
155 121
    "bodyTemplate": {
156 122
      "type": "object",
157 123
      "required": [
158 124
        "node"
159 125
      ],
160 126
      "properties": {
161 127
        "node": {
162 128
          "type": "unknown",
163 129
          "description": "Serialized element tree with bindings"
164 130
        }
165 131
      },
166 132
      "description": "Component rendered by the host from a serialized element tree"
167 133
    },
168 -
    "viewIdentity": {
169 -
      "type": "object",
170 -
      "properties": {},
171 -
      "description": "Component is a view for an identity (person/DID)."
172 -
    },
173 -
    "viewCollection": {
134 +
    "viewPrimitive": {
174 135
      "type": "object",
136 +
      "required": [
137 +
        "type"
138 +
      ],
175 139
      "properties": {
176 -
        "collection": {
140 +
        "type": {
177 141
          "type": "string",
178 -
          "format": "nsid",
179 -
          "description": "The collection this component lists. Omit for any-collection."
142 +
          "maxLength": 128,
143 +
          "description": "Lexicon primitive type.",
144 +
          "knownValues": [
145 +
            "string",
146 +
            "integer",
147 +
            "boolean",
148 +
            "blob",
149 +
            "cid-link",
150 +
            "bytes"
151 +
          ]
152 +
        },
153 +
        "format": {
154 +
          "type": "string",
155 +
          "maxLength": 64,
156 +
          "description": "String format constraint. Only applies when type is 'string'.",
157 +
          "knownValues": [
158 +
            "at-uri",
159 +
            "did",
160 +
            "datetime",
161 +
            "uri",
162 +
            "handle",
163 +
            "at-identifier",
164 +
            "nsid",
165 +
            "cid",
166 +
            "language",
167 +
            "record-key",
168 +
            "tid"
169 +
          ]
180 170
        }
181 171
      },
182 -
      "description": "Component is a view for a collection listing. Omit collection for a generic collection view."
172 +
      "description": "View accepts a primitive value type."
183 173
    }
184 174
  },
185 175
  "$type": "com.atproto.lexicon.schema",
186 176
  "lexicon": 1
187 177
}

Compare Other Versions

Lexicon Garden

@