A decentralized music tracking and discovery platform built on AT Protocol 🎵
listenbrainz
spotify
atproto
lastfm
musicbrainz
scrobbling
Rocksky#
A decentralized music tracking and discovery platform built on the AT Protocol 🎵 , see Rocksky.
✨ Features#
🎵 Scrobbling APIs#
- Last.fm Compatible API – drop-in replacement for Last.fm scrobblers
- ListenBrainz Compatible API – works with clients that support ListenBrainz
🕒 Playback & History#
- Recently Played Timeline – browse your listening history
- Stories View – see what other users are playing in real time
- Stats – visualize scrobbles per day
📊 User Insights#
- Top Artists, Tracks, and Albums – personalized charts of your listening habits
- Shoutbox & Likes – interact with other listeners and share reactions
🌐 Client Integrations#
- Spotify – detect now playing tracks and scrobble directly from Spotify
- Jellyfin – track plays from your media server
- Pano Scrobbler – Android/Linux/Windows support
- WebScrobbler – scrobble directly from your browser
🔍 Search#
- Search Engine – fast search powered by MeiliSearch
🚧 Coming Soon / Roadmap#
- Webhooks - subscribe to scrobble events and integrate with Discord or your own apps
- Personalized Feeds – discover music through community-driven feed algorithms
- Last.fm → Rocksky Mirroring (Future Scrobbles) – automatically mirror new scrobbles from Last.fm into Rocksky
- Rocksky Connect – remote playback across devices (similar to Spotify Connect)
- Multi-Source Libraries – browse and scrobble from Google Drive, Dropbox, S3, FTP, and more
- Stream & Scrobble Your Own Music – upload your library and play directly on Rocksky
- Extensions – customize and extend Rocksky with your own logic
- Crossfade & Equalizer Settings Sync – carry your playback preferences across devices
📦 Prerequisites#
- Node.js (v22 or later)
- Deno
- Rust
- Go
- Turbo
- Docker
- Wasm Pack https://github.com/drager/wasm-pack
- DuckDB https://duckdb.org/docs/installation
1.2.0 - Spotify
SPOTIFY_CLIENT_IDandSPOTIFY_CLIENT_SECRETfrom setup in Spotify developer dashboard
🚀 Getting Started#
-
Clone the repository:
git clone git@tangled.sh:rocksky.app/rocksky cd rocksky -
Install dependencies:
npm install -g turbo bun install bun run build:raichu -
Set up the environment variables:
cp apps/api/.env.example apps/api/.env cp apps/web/.env.example apps/web/.env cp apps/feeds/.env.example apps/feeds/.env cp .env.example .env # Edit the .env files to add your configurations -
Start the Docker containers:
docker compose up -
Run the database migrations:
turbo db:migrate --filter=@rocksky/api -
Setup Spotify App:
# don't forget to set SPOTIFY_ENCRYPTION_KEY and SPOTIFY_ENCRYPTION_IV environment variables bun run spotify <client_id> <client_secret> -
Populate database (Optional):
bun run db:pgpull -
Start Analytics API:
bun run dev:analytics -
Start jetstream:
bun run dev:jetstream -
Start musicbrainz:
bun run mb
- Start feeds:
bun run feeds
- Start the development server:
turbo dev --filter=@rocksky/api --filter=@rocksky/web
📚 Documentation#
✍️ Feedback#
This repository is the central place to collect feedback and issues related to Rocksky.
Please open an issue if you want to leave feedback. Feel free to also join our Discord server
🤝 Contributing#
We would love to hear your feedback or suggestions. The best way to reach us is on Discord.
We also welcome pull requests into this repo. See CONTRIBUTING.md for information on setting up this repo locally.