Blocked ListenBrainz services/User Agent strings

Unfortunately some legitimate services got caught up in our recent attempts to mitigate (yet another) bot-net attack on ListenBrainz.

You may find that a service you use is now being blocked, including Navidrome. We have also had reports of multi-scrobbler submissions being blocked, and there may be other affected services that haven’t yet been reported to us.

These services got caught up in recent blocks because they are/were not setting a proper user agent when calling the LB API. Navidrome and multi-scrobbler are already pushing fixes!

If you are experiencing issues on another service, we would like to let you through, but without a user agent (UA) string we can’t identify the service’s traffic. Please ask your service to add a meaningful UA string (in a format like described in https://musicbrainz.org/doc/MusicBrainz_API/Rate_Limiting) so we can get you back up and running.

Continue reading “Blocked ListenBrainz services/User Agent strings”

GSoC 2026: Playlists Sorting and Organization

Helloo Everyone!
My name is Yateen, a final year cse student at Indian Institute of Technology Jodhpur. My matrix username is (@yateen) and GitHub. I started open source at the beginning of this year. I was selected as a gsoc contributor and worked on Playlists Sorting and Organization project. It was a wonderful experience working on Tech Stack like React, Databases, API’s, Jest + Testing Library, etc and what was more amazing was to work under the mentorship of Ansh Goyal (Github), Monkey (Github) and Jade (Github) and be a part of wonderful MetaBrainz team.

Pre-selection Contributions

Before GSoC officially started, I contributed to ListenBrainz through several smaller PRs that helped me learn the codebase and review process. Firstly I started with exploring some small UI , UX issues such as preventing duplicate error toasts and fixing toast overlap with the YouTube player, accessibility improvements like adding aria-labels to icon-only playback buttons. Then I started solving tickets which are feature-oriented like including auto-save for settings, showing artist name relationships. This pre-selection period helped me get comfortable with ListenBrainz patterns and mentor feedback before taking on the larger GSoC features.

Project Overview

Over the summer I worked on the playlist features , improved the existing playlist structure . I shipped four related features that turn ListenBrainz playlists from a flat list into something you can search, tag, sort for listening, and import from MusicBrainz collections.

Continue reading “GSoC 2026: Playlists Sorting and Organization”

GSoC 2026: Compose Multiplatform Migration of ListenBrainz-Android

Hi everyone,

I’m Nirvan Jain (nirvan_jain on IRC, nirvan73 on GitHub), I’m currently a pre-final year student at IIIT Jabalpur. This summer I was offered this opportunity to work with MetaBrainz through Google Summer of Code on migrating the ListenBrainz android app to Kotlin Multiplatform and Compose Multiplatform, so that most of the same codebase can eventually run on iOS under the mentorship of Jasjeet Singh (jasje on IRC).

This post covers what the project was, everything I worked on, the parts that went wrong, what’s still left, and what the summer was actually like.

How I got here

I started contributing to ListenBrainz in December 2025. It was the first external open source project I’d worked on. Everything before that was coursework, side projects, or intra-college events.

My first PRs were small work which helped me a lot to understand the codebase from the ground, the shimmer effect across the Feed and Profile tabs, then extending search to cover playlists, artists, albums and tracks, plus some bug fixes. Small changes, but they taught me the codebase and how review works when nobody knows you and the code has to stand on its own.

I picked ListenBrainz because music is a constant in my day, whether I’m coding or not, and because I like that it treats your listening history as something you own.

The Problem

ListenBrainz has an Android app but no iOS version. A previous Swift attempt just duplicated the codebase, so every bug fix had to be written twice.

This project solves that by migrating to Kotlin Multiplatform, one shared codebase for both platforms. A large part of the work is replacing Android-only libraries with multiplatform equivalents across navigation, dependency injection and paging. Media playback is the harder case. ExoPlayer and WorkManager are tied too closely to Android to share, so both go behind common interfaces, with ExoPlayer on Android and AVPlayer on iOS underneath.

Getting this foundation right is what makes the rest cheap. Once it’s in place a feature or a bug fix is written once, instead of the same business logic being implemented twice and two apps being kept in sync by hand.

One thing genuinely can’t move. The notification listener that reads what’s playing in Spotify depends on an Android-only permission, and iOS has no equivalent to offer. Those screens stay Android-only. Everything else runs from one codebase on both platforms.

Continue Reading

GSoC 2026: Modernize search storage format for the MusicBrainz database

Hello Everyone!

I’m Junaid (fettuccinae), an undergraduate Computer Science student at MGIT in India. This summer, I returned to MetaBrainz for my second GSoC project, where I worked on modernizing the MusicBrainz search under the mentorship of @kartikohri13 and @bitmap.

Project Overview:

MusicBrainz uses Apache Solr for search queries.
The previous implementation serialized all the response data into a single _store field.
The response writers reads _store, unmarshal the XML into a MusicBrainz XML Metadata Format (MMD) object and then serialize it again as XML or JSON for the response.
Few problems with this design are:
1. The indexer must construct a complete XML representation for every document, even though much of the same information is already available in normal Solr fields.
2. Most of the response data is stored in an opaque _store XML blob.

This project focused on moving the fields from one _store XML blob into their own flat fields (and JSON strings for nested fields).

The main goals of this project were:
1. Upgrade the Solr schema version from 1.5 to 1.7
2. Add fields (in configsets and indexer) to store all the data to be returned
3. Create response writers to return data from fields

The proposal for this project can be found here.

Continue reading “GSoC 2026: Modernize search storage format for the MusicBrainz database”

Growing pains: An update on the ListenBrainz service status

TL;DR: The growth of ListenBrainz has caught up with us, and our limited team is working on replacing central parts of our infrastructure. In the meantime, many features are unstable.

We are victims of our success. While in the long term this is a good problem to have, the sharp increase in users over the past year and a half has left our infrastructure cracking at the seams.

The good news: Your listens are being stored and imported without issue, even if there are delays. The core service is not compromised and we ask that you please keep submitting your listens. Your stats and playlists will be back!

However, we know that every other week your statistics, weekly playlists, and other features fail to generate for everyone, and cause crashes. We know it is frustrating, and we share that feeling.

While we are aware of the issues, fixing them is far from simple and requires us to completely rework all the crucial parts of our infrastructure.

In the interest of transparency, here are our main issues and what we are doing to fix them:

Continue reading “Growing pains: An update on the ListenBrainz service status”

Picard 3 beta 9 released

Today, we have released MusicBrainz Picard 3 beta 9. This new versions brings several fixes over the last beta 7 (yes, we have skipped a beta number again), but also improvements and some new features.

Since we are near a final release, we tried to focus on quality of life and UI/UX improvements, some changes in the UI are quite important (release preferences UI is a complete overhaul, and the new About dialog also got a nice refresh). Among the highlights are:

  • MetaBrainz OAuth2 support and various OAuth improvements and bug fixes
  • ISRC reading (from files or CD) and optional submission
  • Word diff for tags in the Metadata Box
  • UI/UX improvements: Redesign of some option pages, along re-organization and performance improvements
  • Plugin API improvements

Download links and a detailed list of changes since Picard 3 beta 7 are available below. For a more detailed overview of what is new in Picard 3 please see the previous blog post Picard 3 Alpha Release.

While we have all the major features implemented and with the latest bug fixes we are confident in the current code, this is still a pre-release and there might be bugs. If you use this, do so with care, backup your files and please report any issues you encounter.

Some of the changes are also backward incompatible, hence we recommend you make a backup of your Picard.ini config file before trying the beta version. You can do so in Picard’s Options under Advanced > Maintenance.

Continue reading “Picard 3 beta 9 released”

MusicBrainz Server update, 2026-07-30

We’re happy to release our first MusicBrainz Server update since the schema change, following our migration of user accounts to the MetaBrainz website, which we’ve been spending most of our development time on until now. (This blog post also lags a bit behind the date we tagged the release, as you can tell from the title.)

In case you’re running a local MusicBrainz Server for development purposes, know that you can preserve the ability to log in without OAuth by adding sub LOCAL_ACCOUNTS_ENABLED { 1 } to lib/DBDefs.pm. (It’s already enabled by default if DEVELOPMENT_SERVER is.)

We’ve also made changes to digest authentication in the web service, detailed in the blog post linked above. If you don’t use digest authentication or any apps that do, it’s recommended you disable it from the Applications page.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to julian45 and rinsuki for having contributed to the code. Thanks to affronttonature, Anesidora, arsinclair, chirlu, DarkAdonis, jesus2099, julian45, Lotheric, practik, rinsuki, and wileyfoxyx for having reported bugs and suggested improvements. Thanks to 7Stars, ApeKattQuest/MonkeyPython, Denatura, Early6431, EmO686, Flavia Telcean, GABG, Jeluang, JerryBest, KevinOpperman, LAY.JOSHI97, Lummerkurt, MFreedom89, Philipp Wolfer, ROManceJP, RalfZhang, The
ParaziT, afterthemagic, blueday, coffeeicus, cuhsy, jerry155756294, julian45, karpuzikov, meze, mfmeulenbelt, mr_monkey, salo.rock, sashimi3433, scientists360, silentbird, soonaf, sq, welikeheon, wileyfoxyx, and
zatto13 for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2026-07-30.1.

Continue reading “MusicBrainz Server update, 2026-07-30”

Spotify users will need to reconnect every 6 months to ListenBrainz

Spotify recently announced a drastic change in their API: connections to your account will now expire after 6 months, starting July 20th.

If you have your Spotify account connected to ListenBrainz, this means you will have to reconnect your Spotify account every 6 months, or ListenBrainz will not be able to keep your listening history in sync.
To get us started, all users will need to reconnect their Spotify account this coming Monday July 20th.

In addition to sending you an email, you will see an error message at the top of the page in ListenBrainz:


To minimize disruption and potential loss of listening history in the future, we will send you an email a month ahead, and one week ahead of the disconnection for you to disconnect and reconnect your Spotify account in your music services settings.

This is quite the thorn in our side but alas we have no other choice as the internet continues to enshittify.

Picard 3 beta 7 released

Today, we have released MusicBrainz Picard 3 beta 7. This new versions brings several fixes over the last beta 5 (yes, we have skipped a beta number again), but also improvements and some new features. Among the highlights are:

  • Option profiles can now be exported and imported as TOML files. This makes sharing options much easier. We are excited to see how this will be used by you all.
  • Artist name standardization can now be set to one of three values: no standardization, standardizing only variations of the artist name (“Beatles” vs. “The Beatles”) or standardizing also actual artist name changes (“Diddy”, who previously performed under the names “P. Diddy” and “Puff Daddy”). Standardizing name variations is the new default setting. See also the documentation.
  • Plugins can now implement custom CD ripper log file support, and there is built-in support for Cyanrip log files.
  • Picard can now much better handles wrongly or differently encoded filenames when loading files.
  • The setup wizard got some improvements, allowing users to configure their update notification settings for the app and plugins. Also the setup wizard can now be started again from the help menu. This is not yet the final version of the wizard, but it’s getting closer.
  • The User Guide was updated to document the latest changes.

Download links and a detailed list of changes since Picard 3 beta 5 are available below. For a more detailed overview of what is new in Picard 3 please see the previous blog post Picard 3 Alpha Release.

While we have all the major features implemented and with the latest bug fixes we are confident in the current code, this is still a pre-release and there might be bugs. If you use this, do so with care, backup your files and please report any issues you encounter.

Some of the changes are also backward incompatible, hence we recommend you make a backup of your Picard.ini config file before trying the beta version. You can do so in Picard’s Options under Advanced > Maintenance.

Continue reading “Picard 3 beta 7 released”

libdiscid 0.7.0

Version 0.7.0 of libdiscid has been released. libdiscid is a C library that allows applications to easily calculate MusicBrainz and freedb disc IDs from audio CDs or CD TOC details. It also can extract MCN and ISRC information.

This release fixes several issues with the build system and addresses compiler warnings. As a compile time option it is now possible to have methods returning URLs to use HTTPs instead of HTTP, see then changelog for details. Thanks to Riku Viitanen for this contribution. Also the binary packages now include a build for the Windows ARM64 platform.

Version 0.7.0 of libdiscid provides the following changes:

Continue reading “libdiscid 0.7.0”