{"id":31297940,"url":"https://github.com/tsirysndr/rocksky","last_synced_at":"2026-04-04T13:50:28.157Z","repository":{"id":316023113,"uuid":"923758699","full_name":"tsirysndr/rocksky","owner":"tsirysndr","description":"A decentralized music tracking and discovery platform built on AT Protocol 🎵 ","archived":false,"fork":false,"pushed_at":"2026-04-03T10:45:37.000Z","size":8855,"stargazers_count":17,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T15:57:36.166Z","etag":null,"topics":["atproto","lastfm","listenbrainz","musicbrainz","scrobbling"],"latest_commit_sha":null,"homepage":"https://rocksky.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tsirysndr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["tsirysndr"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-01-28T19:33:42.000Z","updated_at":"2026-04-03T10:45:40.000Z","dependencies_parsed_at":"2026-01-11T21:25:11.788Z","dependency_job_id":null,"html_url":"https://github.com/tsirysndr/rocksky","commit_stats":null,"previous_names":["tsirysndr/rocksky"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tsirysndr/rocksky","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Frocksky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Frocksky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Frocksky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Frocksky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsirysndr","download_url":"https://codeload.github.com/tsirysndr/rocksky/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Frocksky/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31402276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atproto","lastfm","listenbrainz","musicbrainz","scrobbling"],"created_at":"2025-09-24T23:02:54.778Z","updated_at":"2026-04-04T13:50:28.141Z","avatar_url":"https://github.com/tsirysndr.png","language":"TypeScript","funding_links":["https://github.com/sponsors/tsirysndr"],"categories":["TypeScript"],"sub_categories":[],"readme":"# Rocksky\n\n[![ci](https://github.com/tsirysndr/rocksky/actions/workflows/ci.yml/badge.svg)](https://github.com/tsirysndr/rocksky/actions/workflows/ci.yml)\n[![discord](https://img.shields.io/discord/1103720908104929321?label=discord\u0026logo=discord\u0026color=5865F2)](https://discord.gg/EVcBy2fVa3)\n\nA decentralized music tracking and discovery platform built on AT Protocol 🎵 , see [Rocksky](https://rocksky.app).\n\n\u003ca href=\"https://pocketenv.io/new?repo=tangled:rocksky.app/rocksky\" target=\"_blank\"\u003e\u003cimg src=\"https://pocketenv.io/open-in-pocketenv.svg\" alt=\"Open in Pocketenv\" /\u003e\u003c/a\u003e\n\n![Preview](./.github/assets/preview.png)\n\n\n## ✨ Features\n\n### 🎵 Scrobbling APIs\n- **Last.fm Compatible API** – drop-in replacement for Last.fm scrobblers\n- **ListenBrainz Compatible API** – works with clients that support ListenBrainz\n\n### 🕒 Playback \u0026 History\n\n- **Recently Played Timeline** – browse your listening history\n- **Stories View** – see what other users are playing in real time\n- **Stats** – visualize scrobbles per day\n\n### 📊 User Insights\n\n- **Top Artists, Tracks, and Albums** – personalized charts of your listening habits\n- **Shoutbox \u0026 Likes** – interact with other listeners and share reactions\n\n### 🌐 Client Integrations\n- **Spotify** – detect now playing tracks and scrobble directly from Spotify\n- **Jellyfin** – track plays from your media server\n- **Pano Scrobbler** – Android/Linux/Windows support\n- **WebScrobbler** – scrobble directly from your browser\n\n### 🔍 Search\n- **Search Engine** – fast search powered by MeiliSearch\n\n## 🚧 Coming Soon / Roadmap\n- **Webhooks** - subscribe to scrobble events and integrate with Discord or your own apps\n- **Personalized Feeds** – discover music through community-driven feed algorithms\n- **Last.fm → Rocksky** Mirroring (Future Scrobbles) – automatically mirror new scrobbles from Last.fm into Rocksky\n- **Rocksky Connect** – remote playback across devices (similar to Spotify Connect)\n- **Multi-Source Libraries** – browse and scrobble from Google Drive, Dropbox, S3, FTP, and more\n- **Stream \u0026 Scrobble Your Own Music** – upload your library and play directly on Rocksky\n- **Extensions** – customize and extend Rocksky with your own logic\n- **Crossfade \u0026 Equalizer Settings Sync** – carry your playback preferences across devices\n\n## 📦 Prerequisites\n\n- Node.js (v22 or later)\n- Deno\n- Rust\n- Go\n- Turbo\n- Docker\n- Wasm Pack https://github.com/drager/wasm-pack\n- DuckDB https://duckdb.org/docs/installation `1.2.0`\n- Spotify `SPOTIFY_CLIENT_ID` and `SPOTIFY_CLIENT_SECRET` from setup in [Spotify developer dashboard](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)\n\n## 🚀 Getting Started\n\n1. Clone the repository:\n   ```bash\n   git clone git@tangled.sh:rocksky.app/rocksky\n   cd rocksky\n   ```\n2. Install dependencies:\n   ```bash\n   npm install -g turbo\n   bun install\n   bun run build:raichu\n   ```\n3. Set up the environment variables:\n   ```bash\n   cp apps/api/.env.example apps/api/.env\n   cp apps/web/.env.example apps/web/.env\n   cp apps/feeds/.env.example apps/feeds/.env\n   cp .env.example .env\n   # Edit the .env files to add your configurations\n   ```\n4. Start the Docker containers:\n   ```bash\n   docker compose up\n   ```\n5. Run the database migrations:\n   ```bash\n   turbo db:migrate --filter=@rocksky/api\n   ```\n6. Setup Spotify App:\n   ```bash\n   # don't forget to set SPOTIFY_ENCRYPTION_KEY and SPOTIFY_ENCRYPTION_IV environment variables\n   bun run spotify \u003cclient_id\u003e \u003cclient_secret\u003e\n   ```\n7. Populate database (Optional):\n   ```bash\n   bun run db:pgpull\n   ```\n\n8. Start Analytics API:\n   ```bash\n   bun run dev:analytics\n   ```\n9. Start jetstream:\n   ```bash\n   bun run dev:jetstream\n   ```\n10. Start musicbrainz:\n   ```bash\n   bun run mb\n   ```\n11. Start feeds:\n   ```bash\n   bun run feeds\n   ```\n12. Start the development server:\n   ```bash\n   turbo dev --filter=@rocksky/api --filter=@rocksky/web\n   ```\n\n## 📚 Documentation\n[View the full documentation](https://docs.rocksky.app)\n\n## ✍️ Feedback\nThis repository is the central place to collect feedback and issues related to [Rocksky](https://rocksky.app).\n\nPlease [**open an issue**](https://tangled.org/@rocksky.app/rocksky/issues/new) if you want to leave feedback. Feel free to also join our [**Discord server**](https://discord.gg/EVcBy2fVa3)\n\n## 🤝 Contributing\nWe would love to hear your feedback or suggestions. The best way to reach us is on [Discord](https://discord.gg/EVcBy2fVa3).\n\nWe also welcome pull requests into this repo. See [CONTRIBUTING.md](CONTRIBUTING.md)  for information on setting up this repo locally.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsirysndr%2Frocksky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsirysndr%2Frocksky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsirysndr%2Frocksky/lists"}