The path to Funkwhale 2.0: more federation!

Funkwhale's selling point compare to other self-hosted media platforms is federation: the ability to talk to other software. Federation was initially introduced in Funkwhale 0.9 and expanded with Channels in Funkwhale 0.21. However, Funkwhale's federation features still lag behind other Fediverse software. This is something we want to address in Funkwhale 2.0.

The story so far

Federation describes a process by which software can communicate and interoperate across a network. It enables platforms such as Mastodon, Pixelfed, Peertube, and Funkwhale to communicate with one another by speaking a common language known as ActivityPub.

Funkwhale first introduced limited ActivityPub support back in version 0.9. At the time, federation only worked between Funkwhale pods, and was limited to sharing libraries with people on other servers. In the years that followed, more ActivityPub support was added such as making users ActivityPub "Actors", as well as the addition of Channels. Channels are the most federation-aware feature of Funkwhale: you can easily follow a channel and see its content in other platforms such as Mastodon!

More federation

While Channels work pretty well, there's a lot more that Funkwhale could be doing in the federation space. We want to make Funkwhale a truly interoperable and social platform for audio enthusiasts and content creators everywhere!

To do this, we're looking at the different parts of Funkwhale to see what we can federate and how it would work. I've been working on an overview of the ActivityPub usage in Funkwhale with petitminion to work out how we can do this while sticking as closely as possible to the ActivityPub spec. You can join in the discussion in the forum. The goal is to look at all mechanisms in Funkwhale and determine whether they can usefully federate and, if so, to build them in an ActivityPub-first way to ensure that Funkwhale isn't just useful to Funkwhale users.

This is a big undertaking as it requires us to add ActivityPub mechanisms in a lot of our code. To make this easier, georgkrause has been working on a fully-featured ActivityPub and ActivityStreams library for Python. By maintaining a library that aligns with the ActivityPub spec, we hope to make it easier for Funkwhale (and other Python-based Fediverse software) to federate cleanly.

What will this look like?

From a user's point of view, improved federation support will present a lot more options for sharing activity and content across different platforms. Here are a few things we'll be introducing:

  • Following users and seeing a stream of their listenings/favorites
  • Federating all public content of a Funkwhale server with other Funkwhale servers
  • Making music collections federation-aware for more ActivityPub-based platforms
  • Improving the presentation of Funkwhale channel content on other platforms

How you can help

If you want to help us to add more ActivityPub support here are a few ways you can help:

Donations

Running the Funkwhale project costs money. We have to pay for hosting, external audits, and paying a part-time maintainer to manage everything.

If you are willing and able to offer money to the project - either a one-time donation or a recurring donation - please check out our donation page. Any amount helps us enormously.

Talk about us

If you're excited about these changes, talking about them and spreading the word to your followers is a great way to help! The more people hear about the project and use it, the more support the project receives.

Contribute to the project

Designing and building a new web app is no small task, and the more people we can get involved the better. Specifically, you can help with the following:

  • Feeding back on specifications and features to let us know if anything could be improved
  • Testing new federation features when they get implemented
  • Getting involved in the development process

If you have the time to spare and want to get involved, check out our contribution page for more information.

By @Sporiff in Community