[Feature] Native Last.fm and ListenBrainz scrobbling
- Dominant language
- Dart
- Stars
- 4.2k
- Forks
- 385
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 17
Description
## Feature Request: Native Last.fm / ListenBrainz Scrobbling
### Problem
Musify has no built-in Last.fm or ListenBrainz scrobbling. There are no open or closed issues tracking this. Users who maintain a listening history on Last.fm or ListenBrainz cannot use Musify without losing scrobble data, and third-party scrobblers on Windows (where Musify also runs) often cannot detect playback from apps that do not expose SMTC metadata.
### Proposed Solution
Add a **Scrobbling** section in Settings > Integrations:
1. **Last.fm login** via the official Last.fm authentication API (web OAuth, session key stored in secure storage)
2. **Scrobble submission** when >=50% of a track plays: sends track title, artist, album, duration, and Unix timestamp per the Last.fm scrobble protocol
3. **Now playing** update at track start
4. Optional **ListenBrainz** parallel submission (same UX, different API endpoint — free, privacy-respecting alternative)
### Why it matters
Last.fm scrobbling is a standard feature expected in any serious music player. Musify targets users who want a privacy-respecting, open-source alternative to Spotify/YouTube Music. Those users frequently maintain listening history on Last.fm or ListenBrainz as part of their music metadata workflow. Flutter/Dart has existing packages for the Last.fm API that make implementation straightforward.
### References
- Last.fm scrobbling API: https://www.last.fm/api/scrobbling
- ListenBrainz API: https://listenbrainz.readthedocs.io/en/latest/users/api/core.html
- Dart `lastfm` package on pub.dev
### Platform
Android + Windows (cross-platform).
Contributor guide
Research direction
Start with Settings > Integrations and the playback lifecycle, then review the Last.fm scrobbling API, ListenBrainz API, and the referenced Dart lastfm package. Done means users can authenticate securely, submit now-playing and 50%-complete scrobbles, and optionally enable both services on Android and Windows.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- api, authentication, desktop, mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 32/100