It's been another (very) busy month here at Funkwhale HQ. Before the trick-or-treaters run us all off our feet, let's take a moment to look back at the month's progress.
We had an unexpected, but very pleasant, surprise to start our October. NLNet approached us and offered us an additional pot of money to complete tasks during the month of October as a last push. Naturally, we accepted the offer. As you can imagine it made the month quite hectic!
New audio player
One of our funded tasks this month was a complete rewrite of our audio player. Previously, we used a Javascript library called Howler to handle our player and queue. Howler has served us well for many years, but we wanted to start expanding on our audio capabilities. @wvffle has spent the month working on rewriting our player and queue logic from scratch. He's replaced Howler with web audio APIs and has crafted new logic to make managing your playback and queue quicker, simpler, and more robust.
Switching to web APIs also opens the door for future development, such as an equalizer and a visualizer. We're incredibly excited to see what we can do with this to make Funkwhale better. Thanks for all the hard work @wvffle!
Improved SPA manifest endpoint
One of our projects this month was to align our SPA manifest endpoint more closely to the specs. We've added a new serializer to this endpoint and updated our assets to match. This will provide a much cleaner PWA experience going forward. Thanks to @georgkrause and @wvffle for their work on this!
APIv2 foundation
Funkwhale's API has served us well for the last few years. However, as we look to the future we decided we want to give ourselves a fresh start. To support this, we have introduced a new API path for Funkwhale: /api/v2/
.
You can see this in action on Tanukitunes. Currently, we don't have any new endpoints set up on v2, but we can now serve data on this path. We've got some big plans for where we want v2 to go, so this was an important step. Thanks for all the work on this @georgkrause!
Reduced latency with reachability task
Funkwhale is a pretty chatty app. To keep up-to-date with federated instances, pods have to talk to each other pretty frequently. This can lead to quite a lot of resources being used. While looking at our logs, we noticed we were receiving quite a few communication failures due to pods being offline or unavailable.
@petitminion took some time this month to address this by creating a new task that checks the availability of pods on the network. If a pod isn't available, this information is stored in the database. Once it comes back online, this is updated and the last reachable date is recorded. We can use this information to stop calls to unavailable pods, reducing the resource usage. Thanks @petitminion!
New developer and contributor documentation
I've also been pretty busy this month. One of the items we decided to tackle were the last documentation rewrites. This included our developer documentation and contributor documentation. As of this month, every single piece of documentation has been overhauled, and all reStructuredText files have been replaced with Markdown files 🥳
We hope the new documentation makes it easier for people to get involved with the project!
Recommendation system testing
@petitminion also took some time this month to do some investigation into the troi recommendation playground. This is a collection of tools made by the Metabrainz foundation to facilitate music recommendations and playlist generation.
As part of this investigation we've drafted a feature spec to showcase how we might be able to integrate this feature in future. We haven't got any plans for it yet, and the library still isn't stable. However, all signs point to it being compatible, so we're keeping it in our minds!
New collections spec
One of the biggest issues facing Funkwhale users is content curation. Funkwhale's library system grew organically with the platform. It's been there since the beginning and has been tweaked with each new update to user access and sharing. We know that our current tooling doesn't suit everyone's needs, so @mjourdan spent some time this month coming up with a solution.
Following a long discussion in our forum as well as some online meetings between the team, we've come up with a direction we're happy with. The resulting spec for the new Collections mechanic can be found here. There isn't a timescale for this yet, but @mjourdan has already done a lot of the hard work by providing the logic and designs.
Anything else?
Phew, that was a lot to go through. This month has been dominated by these funded tasks, but we've also been busy fixing bugs for 1.3.0 and have received a few nice contributions from community members. We'll talk about these when they're released!
One other thing we've been doing this month is discussing changes to our release cycle. 1.3.0 has been in the making for nearly a year now. While this has been necessary due to the number of underlying changes, we don't want to leave you waiting this long again! We've opened up a discussion in our forum about release planning and cycles. If you've got some thoughts, we'd love to hear them!
We're planning a final bugfix release (1.2.9) before we release 1.3.0. Obviously, if anything critical happens in between we'll keep you all informed.
Thanks again to NLNet for their extraordinary generosity and their help with these projects 🎉