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”

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”

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”

Picard 3 beta 5 released

Today, we’re making available the fifth beta version for the upcoming MusicBrainz Picard 3. This new versions brings some important changes:

  • The Options menu was reworked with generalized quick settings and easier access to scripts and options.
  • Handling of the Options dialog and the File Naming Script Editor was streamlined. Editing file naming scripts is now available in the menu in Options > File naming scripts > Edit scripts… or via Ctrl+Shift+S.
  • Option profiles can now be used with plugin settings, the “Attached option profiles” dialog allows changing selected options.
  • Plugins can be installed from a local directory without git, which simplifies local development and plugins created just for personal use.

Download links and a detailed list of changes since Picard 3 beta 4 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 5 released”

Phishing attempts using MetaBrainz messages

There have been reports of users receiving phishing messages via the MetaBrainz messaging service.

Remember: MetaBrainz staff will never ask for your password. MetaBrainz staff will never ask you to log in to a third-party site (or ‘verify’ your username and password in any other way).

Continue reading “Phishing attempts using MetaBrainz messages”

Picard 3 beta 4 fixes startup issues on macOS

We have released Picard 3 beta 4. The recently released beta 3 did crash on macOS and when running the picard-plugins command line tool, both has been fixed in this. In addition beta 4 fixes display issues in the new log view.

Download links and a detailed list of changes since Picard 3 beta 3 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 4 fixes startup issues on macOS”

Picard 3 beta 3 released

Today, we’re making available another pre-release version for the upcoming MusicBrainz Picard 3. This beta release offers various bugfixes and improvements over the last beta. Most notably the release lookup and matching was improved, several cover art related issues were fixed, the UI got more responsive during file load and the log view became faster and allows better filtering.

Download links and a detailed list of changes since Picard 3 beta 1 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 3 released”

Downtime for PostgreSQL / MusicBrainz schema change upgrade: Monday, May 11, 15:00 UTC

On Monday, May 11, at 15:00 UTC (8am PT, 11am ET, 5:00pm CEST), we’ll be:

  • Upgrading our production database server to PostgreSQL v18.
  • Performing the MusicBrainz schema version 31 upgrade.

See the previous announcement for more information.

We’ll be working to restore services as quickly as possible, but expect MusicBrainz, ListenBrainz, the Cover Art Archive, and BookBrainz to be down for the hour. Thanks in advance for your patience!

Afterward, we’ll post instructions on the blog about how to upgrade your MusicBrainz mirror server.

Picard 3 beta 1 released

Today, we’re making available another pre-release version for the upcoming MusicBrainz Picard 3. Beta 1 focuses on fixing issues that were found in the previous releases as well as some minor improvements and updated translations.

Download links and a list of changes since Picard 3 alpha 4 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 1 released”