A decentralized music tracking and discovery platform built on AT Protocol 🎡

README.md

Rocksky #

ci build discord FlakeHub

A decentralized, open-source Last.fm alternative built on the AT Protocol (Bluesky).

Rocksky automatically tracks ("scrobbles") the music you listen to from Spotify, Jellyfin, Navidrome, browsers, Android, and more β€” then publishes it to your decentralized identity. Own your listening history, see what friends are playing in real time, get rich stats, and discover new music β€” all without a central company controlling your data.

rocksky.app β€’ Docs β€’ Discord

Preview

Contents #

✨ Features #

🎡 Scrobbling #

  • Last.fm compatible API β€” works with almost any existing Last.fm scrobbler
  • ListenBrainz compatible API β€” broad client support
  • Spotify β€” direct "now playing" detection
  • Jellyfin, Navidrome β€” media server scrobbling
  • Pano Scrobbler (Android/Linux/Windows), WebScrobbler (browser)
  • Rocksky Connect β€” scrobble from MPD, Mopidy, VLC, Kodi, and any MPRIS player
  • Automatic Last.fm mirroring of new scrobbles
  • Import your history from Last.fm or ListenBrainz

πŸ“š Your library #

  • Upload your own music and stream it back from anywhere
  • Bring your own storage β€” keep the files in your own S3 bucket, or use the managed one
  • Import from Dropbox and Google Drive
  • Browse by track, album, artist, playlist or favorites
  • Playlists mirrored to your AT Protocol repo, so they travel with your identity rather than living only on a server

▢️ Playback #

  • Plays in the browser β€” decoding and DSP run in WebAssembly, with no streaming server in the middle
  • Rocksky Connect β€” start something on one device and control it from another
  • Queue, shuffle, repeat, crossfade and a parametric equalizer
  • Fullscreen player with a live scrobble timeline

🏷️ Physical shortcuts #

Tap or insert a card and the album, playlist or your favorites starts playing.

  • NFC tags β€” NTAG213/215/216, MIFARE Ultralight, and MIFARE Classic (formatted automatically on first write)
  • Smart cards β€” SLE5528 memory cards and ACOS3 processor cards
  • Tags carry the record's AT-URI, so one written on any Rocksky player works on every other β€” with the library id behind it as a fallback
  • Write them from the desktop app, the CLI, or the terminal UI

🌐 Social & discovery #

  • Stories β€” see what everyone is listening to, live
  • Shouts and likes on songs, albums, artists and profiles
  • Follow other listeners; see who else plays what you play
  • Recommendations precomputed from your history and audio features
  • Wrapped β€” your listening year, summarised

πŸ“Š Insights #

  • Top artists, tracks and albums over any period
  • Charts, listening analytics and daily/weekly visualisations
  • Explorer β€” query your own listening data with RSQL
  • Blazing-fast search powered by Typesense

πŸ’» Apps & clients #

  • Web β€” rocksky.app, with a dedicated mobile build
  • Desktop β€” native app for macOS, Linux and Windows
  • CLI β€” scrobble, search, browse, upload and import from the terminal, including a full TUI player
  • MCP server β€” let Claude and other assistants read your listening history

πŸ”§ Build on it #

  • SDKs for TypeScript, Python, Rust, Go, Ruby, Kotlin, Elixir, Erlang, Clojure and Gleam
  • Public HTTP API with an OpenAPI spec, plus AT Protocol lexicons
  • API keys and long-lived access tokens for your own integrations
  • Embeddable player for sharing what you are listening to

🚧 Roadmap #

  • Webhooks (Discord, custom integrations)
  • Extensions system
  • Cross-device settings sync
  • More storage backends and media servers

Quick Start (for users) #

  1. Go to rocksky.app and sign in with your Bluesky account
  2. Connect your music apps (Spotify, Jellyfin, etc.)
  3. Start scrobbling β€” your data stays under your control

Self-hosting and advanced usage instructions are below.

Desktop app #

brew install --cask tsirysndr/tap/rocksky

The macOS build is ad-hoc signed and not notarized (no Apple Developer account yet), so Gatekeeper blocks the first launch. Open Rocksky once, then go to System Settings β†’ Privacy & Security and click Open Anyway next to the Rocksky message β€” macOS remembers it from then on. The terminal equivalent is xattr -dr com.apple.quarantine /Applications/Rocksky.app.

Linux .deb, .rpm and .AppImage bundles are attached to each desktop-v* release. See desktop/README.md for details.

πŸš€ Self-Hosting / Development #

Prerequisites #

  • Node.js (v22+)
  • Bun
  • Docker + Docker Compose
  • Rust (for some crates)
  • Deno, Go, Turbo, Wasm Pack (see full docs)

Getting Started #

# 1. Clone the repo
git clone https://github.com/tsirysndr/rocksky.git
cd rocksky

# 2. Install dependencies
npm install -g turbo
bun install

# 3. 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 as needed
# 4. Start services
docker compose up -d

# 5. Database migrations
turbo db:migrate --filter=@rocksky/api

# 6. Spotify integration (optional but recommended)
# Set SPOTIFY_ENCRYPTION_KEY and SPOTIFY_ENCRYPTION_IV first
bun run spotify <your_client_id> <your_client_secret>

Then run the dev servers:

bun run dev:jetstream
bun run mb
bun run feeds
turbo dev --filter=@rocksky/api --filter=@rocksky/web

Operations console (Clojure REPL) #

tools/console/ is a Clojure project that centralizes every operational script in the monorepo β€” lexicon codegen, DB migrations, data sync/backfill, Rust daemons, devops glue β€” behind one discoverable REPL. Instead of remembering which package.json script lives in which workspace or which cargo run -p ... invokes which daemon, you call functions:

cd tools/console
mise install                       # locks JDK 21, Clojure, Babashka
clj -M:rebel                       # pretty terminal REPL (try `(help)`)
clj -M:dev                         # nREPL on :7888 for CIDER / Calva / Cursive
bb help                            # or fast one-shot CLI tasks
bb sync did:plc:abc123             # e.g. sync one user's scrobbles

See tools/console/README.md for the full command catalog and design notes.

Comparison #

Feature Last.fm ListenBrainz Rocksky
Open Source No Yes Yes
Decentralized Identity No No Yes (AT Protocol)
Social Feed Limited Basic Real-time Stories
Data Ownership Last.fm You (export) You (on your PDS)
Last.fm Compatibility β€” Partial Strong

πŸ“š Documentation #

Full documentation is available at docs.rocksky.app.

Feedback & Contributing #

This repo is the central place for issues and discussions.


Made with ❀️ for music lovers who want control over their data.

rocksky.app β€’ Docs