app.rocksky/sdk binds the shared Rocksky Rust core via the JVM Panama FFM
API (rocksky.core, JDK 22+): AppView reads, AT Protocol PDS writes, and the
identity hashes — the same engine behind every Rocksky SDK.
Install
deps.edn:--enable-native-access=ALL-UNNAMED (the :native alias adds it).
Quickstart
API
Reads/writes return plain maps; write verbs throwex-info on failure.
Reads — rocksky.core: named reads (profile actor),
(scrobbles actor limit), (top-tracks limit offset), (global-stats) — each
accepts a trailing base.
Universal escape hatch: (query nsid params) reaches the whole
app.rocksky.* read catalog and returns parsed data — e.g.
"app.rocksky.album.getAlbums", "app.rocksky.album.getAlbumTracks",
"app.rocksky.graph.getFollows", "app.rocksky.actor.getActorLovedSongs",
"app.rocksky.stats.getStats", "app.rocksky.charts.getScrobblesChart".
(query nsid params base token) sends token as Authorization: Bearer for
auth-gated queries.
Typed date-window charts: (top-tracks-interval limit offset interval) and
(top-artists-interval limit offset interval) — interval is :all or
[:days n] / [:weeks n] / [:months n] / [:years n] / [:range start end],
e.g. (top-tracks-interval 5 0 [:days 7]).
Match: (match-song title artist) resolves a bare title + artist into full
canonical metadata.
Writes — rocksky.core: (login ... :dedup-path "./dedup"), then
(scrobble agent track) (full metadata) or (scrobble-match agent params) — a
map with camelCase keys, required :title/:artist, optional :album, :mbId,
:isrc (match anchors) and :timestamp (scrobbled-at Unix seconds) —
match-then-write, (like agent uri cid),
(follow agent did), (shout ...), (refresh-session agent),
(agent-close agent). With :dedup-path set, (sync-repo agent) (repo backfill)
and (hydrate-from-jetstream agent) (live stream) run deduped against the
on-disk store.
Identity hashes: (song-hash title artist album).