app.rocksky.song.defs

rocksky.app

Schema Diff

+83 -0

From

CID
bafyreibgot3i73q...
Indexed At
2026-02-18 18:25 UTC
View this version

To

CID
bafyreiazvevajgt...
Indexed At
2026-05-31 08:19 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 39 non-breaking changes.

Non-Breaking Changes (39)
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.artist.defs#artistViewBasic" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.avatar" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.handle" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.timestamp" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.avatar" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.did" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.displayName" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.handle" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.id" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.scrobbleUri" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.timestamp" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.isrc" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.mbid" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists:items" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.firstScrobble" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.isrc" }
  • AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.mbid" }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.avatar", kind: "prop", name: Some("avatar") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.handle", kind: "prop", name: Some("handle") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.timestamp", kind: "prop", name: Some("timestamp") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.avatar", kind: "prop", name: Some("avatar") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.did", kind: "prop", name: Some("did") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.displayName", kind: "prop", name: Some("displayName") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.handle", kind: "prop", name: Some("handle") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.scrobbleUri", kind: "prop", name: Some("scrobbleUri") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.timestamp", kind: "prop", name: Some("timestamp") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.isrc", kind: "prop", name: Some("isrc") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.mbid", kind: "prop", name: Some("mbid") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.artists", kind: "prop", name: Some("artists") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.firstScrobble", kind: "prop", name: Some("firstScrobble") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.isrc", kind: "prop", name: Some("isrc") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.mbid", kind: "prop", name: Some("mbid") }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists", tgt: "app.rocksky.song.defs#songViewDetailed.artists:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists:items", tgt: "app.rocksky.artist.defs#artistViewBasic", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.firstScrobble", tgt: "app.rocksky.song.defs#firstScrobbleView", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.rocksky.artist.defs#artistViewBasic" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.avatar" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.handle" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.timestamp" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.avatar" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.did" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.displayName" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.handle" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.id" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.scrobbleUri" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.timestamp" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.isrc" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.mbid" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists:items" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.firstScrobble" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.isrc" }
  • AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.mbid" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.avatar", kind: "prop", name: Some("avatar") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.handle", kind: "prop", name: Some("handle") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.timestamp", kind: "prop", name: Some("timestamp") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.avatar", kind: "prop", name: Some("avatar") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.did", kind: "prop", name: Some("did") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.displayName", kind: "prop", name: Some("displayName") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.handle", kind: "prop", name: Some("handle") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.scrobbleUri", kind: "prop", name: Some("scrobbleUri") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.timestamp", kind: "prop", name: Some("timestamp") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.isrc", kind: "prop", name: Some("isrc") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.mbid", kind: "prop", name: Some("mbid") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.artists", kind: "prop", name: Some("artists") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.firstScrobble", kind: "prop", name: Some("firstScrobble") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.isrc", kind: "prop", name: Some("isrc") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.mbid", kind: "prop", name: Some("mbid") }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists", tgt: "app.rocksky.song.defs#songViewDetailed.artists:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists:items", tgt: "app.rocksky.artist.defs#artistViewBasic", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.firstScrobble", tgt: "app.rocksky.song.defs#firstScrobbleView", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 +
    "firstScrobbleView": {
5 +
      "properties": {
6 +
        "avatar": {
7 +
          "description": "The avatar URL of the user who first scrobbled this song.",
8 +
          "format": "uri",
9 +
          "type": "string"
10 +
        },
11 +
        "handle": {
12 +
          "description": "The handle of the user who first scrobbled this song.",
13 +
          "type": "string"
14 +
        },
15 +
        "timestamp": {
16 +
          "description": "The timestamp of the first scrobble.",
17 +
          "format": "datetime",
18 +
          "type": "string"
19 +
        }
20 +
      },
21 +
      "type": "object"
22 +
    },
23 +
    "recentListenerView": {
24 +
      "properties": {
25 +
        "avatar": {
26 +
          "description": "The URL of the listener's avatar image.",
27 +
          "format": "uri",
28 +
          "type": "string"
29 +
        },
30 +
        "did": {
31 +
          "description": "The DID of the listener.",
32 +
          "type": "string"
33 +
        },
34 +
        "displayName": {
35 +
          "description": "The display name of the listener.",
36 +
          "type": "string"
37 +
        },
38 +
        "handle": {
39 +
          "description": "The handle of the listener.",
40 +
          "type": "string"
41 +
        },
42 +
        "id": {
43 +
          "description": "The unique identifier of the listener.",
44 +
          "type": "string"
45 +
        },
46 +
        "scrobbleUri": {
47 +
          "description": "The URI of the listener's most recent scrobble of this song.",
48 +
          "format": "at-uri",
49 +
          "type": "string"
50 +
        },
51 +
        "timestamp": {
52 +
          "description": "The timestamp of the listener's most recent scrobble of this song.",
53 +
          "format": "datetime",
54 +
          "type": "string"
55 +
        }
56 +
      },
57 +
      "type": "object"
58 +
    },
4 59
    "songViewBasic": {
5 60
      "properties": {
6 61
        "album": {
7 62
          "description": "The album of the song.",
8 63
          "type": "string"
9 64
        },
10 65
        "albumArt": {
11 66
          "description": "The URL of the album art image.",
12 67
          "format": "uri",
13 68
          "type": "string"
14 69
        },
15 70
        "albumArtist": {
16 71
          "description": "The artist of the album the song belongs to.",
17 72
          "type": "string"
18 73
        },
19 74
        "albumUri": {
20 75
          "description": "The URI of the album the song belongs to.",
21 76
          "format": "at-uri",
22 77
          "type": "string"
23 78
        },
24 79
        "artist": {
25 80
          "description": "The artist of the song.",
26 81
          "type": "string"
27 82
        },
28 83
        "artistUri": {
29 84
          "description": "The URI of the artist of the song.",
30 85
          "format": "at-uri",
31 86
          "type": "string"
32 87
        },
33 88
        "createdAt": {
34 89
          "description": "The timestamp when the song was created.",
35 90
          "format": "datetime",
36 91
          "type": "string"
37 92
        },
38 93
        "discNumber": {
39 94
          "description": "The disc number of the song in the album.",
40 95
          "type": "integer"
41 96
        },
42 97
        "duration": {
43 98
          "description": "The duration of the song in milliseconds.",
44 99
          "type": "integer"
45 100
        },
46 101
        "id": {
47 102
          "description": "The unique identifier of the song.",
48 103
          "type": "string"
49 104
        },
105 +
        "isrc": {
106 +
          "description": "The International Standard Recording Code (ISRC) of the song.",
107 +
          "type": "string"
108 +
        },
109 +
        "mbid": {
110 +
          "description": "The MusicBrainz ID of the song.",
111 +
          "type": "string"
112 +
        },
50 113
        "playCount": {
51 114
          "description": "The number of times the song has been played.",
52 115
          "minimum": 0,
53 116
          "type": "integer"
54 117
        },
55 118
        "sha256": {
56 119
          "description": "The SHA256 hash of the song.",
57 120
          "type": "string"
58 121
        },
59 122
        "tags": {
60 123
          "items": {
61 124
            "type": "string"
62 125
          },
63 126
          "type": "array"
64 127
        },
65 128
        "title": {
66 129
          "description": "The title of the song.",
67 130
          "type": "string"
68 131
        },
69 132
        "trackNumber": {
70 133
          "description": "The track number of the song in the album.",
71 134
          "type": "integer"
72 135
        },
73 136
        "uniqueListeners": {
74 137
          "description": "The number of unique listeners who have played the song.",
75 138
          "minimum": 0,
76 139
          "type": "integer"
77 140
        },
78 141
        "uri": {
79 142
          "description": "The URI of the song.",
80 143
          "format": "at-uri",
81 144
          "type": "string"
82 145
        }
83 146
      },
84 147
      "type": "object"
85 148
    },
86 149
    "songViewDetailed": {
87 150
      "properties": {
88 151
        "album": {
89 152
          "description": "The album of the song.",
90 153
          "type": "string"
91 154
        },
92 155
        "albumArt": {
93 156
          "description": "The URL of the album art image.",
94 157
          "format": "uri",
95 158
          "type": "string"
96 159
        },
97 160
        "albumArtist": {
98 161
          "description": "The artist of the album the song belongs to.",
99 162
          "type": "string"
100 163
        },
101 164
        "albumUri": {
102 165
          "description": "The URI of the album the song belongs to.",
103 166
          "format": "at-uri",
104 167
          "type": "string"
105 168
        },
106 169
        "artist": {
107 170
          "description": "The artist of the song.",
108 171
          "type": "string"
109 172
        },
110 173
        "artistUri": {
111 174
          "description": "The URI of the artist of the song.",
112 175
          "format": "at-uri",
113 176
          "type": "string"
114 177
        },
178 +
        "artists": {
179 +
          "items": {
180 +
            "ref": "app.rocksky.artist.defs#artistViewBasic",
181 +
            "type": "ref"
182 +
          },
183 +
          "type": "array"
184 +
        },
115 185
        "createdAt": {
116 186
          "description": "The timestamp when the song was created.",
117 187
          "format": "datetime",
118 188
          "type": "string"
119 189
        },
120 190
        "discNumber": {
121 191
          "description": "The disc number of the song in the album.",
122 192
          "type": "integer"
123 193
        },
124 194
        "duration": {
125 195
          "description": "The duration of the song in milliseconds.",
126 196
          "type": "integer"
127 197
        },
198 +
        "firstScrobble": {
199 +
          "description": "The first scrobble of this song on Rocksky.",
200 +
          "ref": "app.rocksky.song.defs#firstScrobbleView",
201 +
          "type": "ref"
202 +
        },
128 203
        "id": {
129 204
          "description": "The unique identifier of the song.",
130 205
          "type": "string"
131 206
        },
207 +
        "isrc": {
208 +
          "description": "The International Standard Recording Code (ISRC) of the song.",
209 +
          "type": "string"
210 +
        },
211 +
        "mbid": {
212 +
          "description": "The MusicBrainz ID of the song.",
213 +
          "type": "string"
214 +
        },
132 215
        "playCount": {
133 216
          "description": "The number of times the song has been played.",
134 217
          "minimum": 0,
135 218
          "type": "integer"
136 219
        },
137 220
        "sha256": {
138 221
          "description": "The SHA256 hash of the song.",
139 222
          "type": "string"
140 223
        },
141 224
        "tags": {
142 225
          "items": {
143 226
            "type": "string"
144 227
          },
145 228
          "type": "array"
146 229
        },
147 230
        "title": {
148 231
          "description": "The title of the song.",
149 232
          "type": "string"
150 233
        },
151 234
        "trackNumber": {
152 235
          "description": "The track number of the song in the album.",
153 236
          "type": "integer"
154 237
        },
155 238
        "uniqueListeners": {
156 239
          "description": "The number of unique listeners who have played the song.",
157 240
          "minimum": 0,
158 241
          "type": "integer"
159 242
        },
160 243
        "uri": {
161 244
          "description": "The URI of the song.",
162 245
          "format": "at-uri",
163 246
          "type": "string"
164 247
        }
165 248
      },
166 249
      "type": "object"
167 250
    }
168 251
  },
169 252
  "id": "app.rocksky.song.defs",
170 253
  "lexicon": 1
171 254
}

Compare Other Versions

Lexicon Garden

@