app.standard-reader.sidebarPref
Schema Diff
+22 -2
Compatibility Analysis
Backward Compatible
Backward compatible. 6 non-breaking changes.
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.subscriptionSort" }
- AddedVertex AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.treeOrder" }
- AddedVertex AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.treeOrder:items" }
- AddedEdge AddedEdge { src: "app.standard-reader.sidebarPref:body", tgt: "app.standard-reader.sidebarPref:body.subscriptionSort", kind: "prop", name: Some("subscriptionSort") }
- AddedEdge AddedEdge { src: "app.standard-reader.sidebarPref:body", tgt: "app.standard-reader.sidebarPref:body.treeOrder", kind: "prop", name: Some("treeOrder") }
- AddedEdge AddedEdge { src: "app.standard-reader.sidebarPref:body.treeOrder", tgt: "app.standard-reader.sidebarPref:body.treeOrder:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.subscriptionSort" }AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.treeOrder" }AddedVertex { vertex_id: "app.standard-reader.sidebarPref:body.treeOrder:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.standard-reader.sidebarPref:body", tgt: "app.standard-reader.sidebarPref:body.subscriptionSort", kind: "prop", name: Some("subscriptionSort") }
- Non-breaking: AddedEdge { src: "app.standard-reader.sidebarPref:body", tgt: "app.standard-reader.sidebarPref:body.treeOrder", kind: "prop", name: Some("treeOrder") }
- Non-breaking: AddedEdge { src: "app.standard-reader.sidebarPref:body.treeOrder", tgt: "app.standard-reader.sidebarPref:body.treeOrder:items", kind: "items", name: None }
1
1
{
2
2
"id": "app.standard-reader.sidebarPref",
3
3
"defs": {
4
4
"main": {
5
5
"key": "literal:self",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"updatedAt"
11
11
],
12
12
"properties": {
13
13
"collapsed": {
14
14
"type": "array",
15
15
"items": {
16
16
"type": "string",
17
17
"format": "at-uri"
18
18
},
19
19
"maxLength": 1000,
20
20
"description": "AT URIs of the list groups the reader has collapsed in the sidebar."
21
21
},
22
22
"hiddenNav": {
23
23
"type": "array",
24
24
"items": {
25
25
"type": "string",
26
26
"maxLength": 64
27
27
},
28
28
"maxLength": 32,
29
29
"description": "Stable ids of the primary sidebar nav items the reader has hidden (e.g. 'home', 'latest', 'discover', 'search', 'saved', 'collections'). Subscriptions and its list groups are never hideable."
30
30
},
31
31
"listOrder": {
32
32
"type": "array",
33
33
"items": {
34
34
"type": "string",
35
35
"format": "at-uri"
36
36
},
37
37
"maxLength": 1000,
38
-
"description": "Ordered AT URIs of the reader's list groups (own + saved) as shown top-to-bottom in the sidebar. Groups not present are appended in their default order."
38
+
"description": "Legacy: ordered AT URIs of the reader's list groups (own + saved), used as a fallback top-level list order only while `treeOrder` is empty. Superseded by `treeOrder`, which also carries ungrouped subscriptions interleaved with lists; new writes should prefer `treeOrder`."
39
+
},
40
+
"treeOrder": {
41
+
"type": "array",
42
+
"items": {
43
+
"type": "string",
44
+
"maxLength": 512
45
+
},
46
+
"maxLength": 2000,
47
+
"description": "Manual top-level order of the sidebar's subscriptions tree: list-group AT URIs interleaved with ungrouped publication AT URIs / person DIDs, exactly as arranged via drag-and-drop. Applies only when `subscriptionSort` is 'default'. Entries not present are appended in their natural order. Takes precedence over the legacy `listOrder` once populated."
39
48
},
40
49
"updatedAt": {
41
50
"type": "string",
42
51
"format": "datetime",
43
52
"description": "When these preferences were last changed."
44
53
},
45
54
"customizeNav": {
46
55
"type": "boolean",
47
56
"description": "Whether the reader has enabled 'Customize sidebar'. When true, the `hiddenNav` items are hidden; when false or absent, every primary nav item is shown regardless of `hiddenNav`."
57
+
},
58
+
"subscriptionSort": {
59
+
"type": "string",
60
+
"maxLength": 16,
61
+
"description": "How the sidebar's subscriptions are ordered: 'default' (the reader's manual arrangement per `treeOrder`, or natural/stored order — the default), 'recent' (most recent activity first, interleaving publications and people), 'alpha' (name), or 'unread' (highest unread count first). Absent means 'default'.",
62
+
"knownValues": [
63
+
"default",
64
+
"recent",
65
+
"alpha",
66
+
"unread"
67
+
]
48
68
}
49
69
}
50
70
},
51
-
"description": "A reader's personal sidebar preferences: the display order of their subscription list groups, which groups are collapsed, and which primary nav items are hidden. A singleton record (rkey `self`)."
71
+
"description": "A reader's personal sidebar preferences: the top-level arrangement of list groups and ungrouped subscriptions (one level deep), which groups are collapsed, how automatic sort orders subscriptions, and which primary nav items are hidden. A singleton record (rkey `self`)."
52
72
}
53
73
},
54
74
"$type": "com.atproto.lexicon.schema",
55
75
"lexicon": 1
56
76
}