at.inlay.component

inlay.at

Schema Diff

+9 -12

From

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

To

CID
bafyreid76brwsr2...
Indexed At
2026-03-27 06:44 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 2 non-breaking changes.

Breaking Changes (3)
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.inlay.component:body", src: "at.inlay.component:body", tgt: "at.inlay.component:body.type", kind: "prop", name: Some("type") }
  • RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.type" }
  • ConstraintTightened ConstraintTightened { vertex_id: "at.inlay.component:body.imports:items", sort: "format", old_value: "at-uri", new_value: "did" }
Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "at.inlay.component#bodyExternal.personalized" }
  • AddedEdge AddedEdge { src: "at.inlay.component#bodyExternal", tgt: "at.inlay.component#bodyExternal.personalized", kind: "prop", name: Some("personalized") }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.inlay.component:body.type" }

Added Elements

  • AddedVertex { vertex_id: "at.inlay.component#bodyExternal.personalized" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "at.inlay.component:body.imports:items", sort: "format", old_value: "at-uri", new_value: "did" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@