---
title: Rocksky
toc_min_heading_level: 2
toc_max_heading_level: 5
---

import Bluesky from "@site/src/components/snippets/_bluesky.mdx";
import JsonConfig from '!!raw-loader!@site/../config/rocksky.json.example';

:::tip[Other Uses]

To monitor and re-scrobble activity **from** Rocksky create a [Rocksky (Source)](/configuration/sources/rocksky-source)

:::

[**Rocksky**](https://rocksky.app/) is music tracking and discovery platform built on the AT Protocol (Bluesky).

<details>

<summary>How does that work?</summary>

<Bluesky name="Rocksky" lexicon="app.rocksky"/>

</details>

<DetailsAdmo type="important" summary="Your Data Is Public">

The default Bluesky PDS is **public**, meaning your scrobbles are also public (read-only). This isn't any different than using Last.fm or Listenbrainz, in terms of privacy.

</DetailsAdmo>

<DetailsAdmo type="important" summary="No Scrobbling Guarantee">

Rocksky **does not guarantee** that every scrobble you send will be persisted. Rocksky's design goal is to store scrobbles with **metdata-complete, 3rd party verifiable track information** so that it can be a metadata-rich discovery platform, rather than an exhaustive scrobble data source-of-truth.

To do this it *asynchronously* matches your scrobble data against Musicbrainz's and/or Spotify's catalogs, *after the scrobble has been submitted.* **If the scrobble does not end up matching then it is not persisted.**

If you need your scrobbles to be 100% captured then you should scrobble to an *additional* [Scrobble Client](/configuration/clients).

</DetailsAdmo>

## Setup

You will need a [Bluesky](https://bsky.app/), or other [ATmosphere](https://atproto.brussels/about-the-atmosphere), account to use Rocksky.

* Navigate to [rocksky.app](https://rocksky.app/) and sign up/logn using your ATmosphere account
* Then, navigate to the [Access Tokens](https://rocksky.app/access-tokens) in the Rocksky settings dropdown, and create a new token

## Configuration

### Handle

The handle used with multi-scrobbler should be your **full** ATProto handle, including TLD.

* For regular Bluesky account this will be like: `alice.bsky.social`
* For Bluesky accounts that [use their website as their account](https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial) this is your domain: `mydomain.com`
* For non-Bluesky users, you probably already know your handle

If you do not include a TLD then multi-scrobbler will automatically append `.bsky.social` to your handle value.

<DetailsAdmo type="warning" summary="API Applications Deprecated">

In < 0.14.1, Multi-Scrobber used Rocksky's API Appication "API Key" for communication with a Listenbrainz-compatible API from Rocksky.

Going forward, this should be replaced with the official guidance in the [Setup](#setup) section above: use an **Access Token**. This uses the native Rocksky API which has more functionality.

If your configuration is using either

* (File/AIO) `'key': ...`
* (ENV) `ROCKSKY_KEY`

you should redo the [Setup](#setup) modify your configuration to use an Access Token instead.

Keys are now **deprecated** and functionality for them will be removed in a future version of Multi-Scrobbler. 

</DetailsAdmo>

<Config config="RockSkyClientConfig" fileContent={JsonConfig} client name="rocksky">
        | Environmental Variable | Required? | Default | Description                                                                         |
        | :--------------------- | --------- | ------- | ----------------------------------------------------------------------------------- |
        | `ROCKSKY_ID`           | Yes       |         | A unique ID used in MS                                                              |
        | `ROCKSKY_HANDLE`       | Yes       |         | Your **full** ATProto handle. For Bluesky account this is like `myUser.bsky.social` |
        | `ROCKSKY_TOKEN`        | Yes       |         | Access Token obtained from Rocksky                                                  |
        | `ROCKSKY_NAME`         | No        |         | A vanity name different than ID                                                     |
</Config>