Audio content is uploaded to Funkwhale by users to libraries or channels, and admins, using a server-side import from a directory. Content is also made available to a pod by users following libraries and channels.
In order to keep your library clean, browse-able, and well-stocked with relevant data about artists, albums and tracks, we fetch a lot of metadata from the MusicBrainz project. Music uploaded directly to Funkwhale can also be tagged and edited in the app itself.
The project itself is split in two parts:
The backend, a REST API developed using Python3 and Django
The frontend, that consumes the API, built as a single page application with VueJS and Fomantic UI
While the main interface to the server and API is the bundled front-end, the project itself is agnostic in the way you connect to it. Therefore, desktop clients or apps could be developed and could implement the same (or even more) features as the bundled frontend.
This modularity also makes it possible to deploy only a single component from the system.
Funkwhale makes use of the ActivityPub protocol to share activities across the fediverse. In particular, content uploaded in channels is shared publicly with other Funkwhale users as well as other ActivityPub enabled applications such as Reel2Bits and Mastodon, and can be followed using each application’s interface. Content shared in users’ libraries can be followed by users of other pods.