A decentralized music tracking and discovery platform built on AT Protocol 🎵 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz

feat(riff): riff-mb — MusicBrainz ws/2 API served from the JSON dumps via DuckDB master

Two new binaries in the riff crate: - riff-mb-import streams each MusicBrainz NDJSON dump entity into one DuckDB file: the ws/2 document kept verbatim, plus extracted columns (id, name, aliases, ISRCs, artist credits) so lookups and searches are index probes. Entities import independently and re-importing replaces the table, so a run resumes after failure and each dump can be deleted as soon as its row count verifies — the dumps and the database never need to coexist on disk. Reader memory scales with --max-object-size; size it per entity (the 2025-03 artist dump tops out at a 41MB line). - riff-mb serves ws/2 on port 8094: lookup for all nine dumped entities, search in the Lucene dialect Rocksky emits (exact, case-insensitive, aliases included), browse by artist, and ISRC lookup. fmt/inc are accepted and ignored — the stored documents already carry every inline expansion. The musicbrainz/ Go proxy now queries riff-mb first (MBRIFF_URL, default localhost:8094, no rate limit) on /search, /hydrate and /recording/:mbid, and falls back to the real 1 rps musicbrainz.org only when riff-mb has nothing — which release data always is, since the dumps ship no release entity and only standalone recordings. tests/mb_e2e.rs runs the real routes over tests/mb-sample/, a committed slice of the actual dumps, with assertions discovered from the slice.