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. 36 non-breaking changes.

Non-Breaking Changes (36)
  • 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 }

Migration Guidance

Added Elements

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

Compare Other Versions

Lexicon Garden

@