Okay, to be fair, we messed up a little and shipped a broken release. But we fixed it immediately with another release! 1.1.3 is broken, so go straight to 1.1.4 when you upgrade.
As the version number implies, this is a patch release. It includes some important security and quality of life fixes:
worker-src
to nginx header to prevent issues.Some of these issues are findings of a “Security Quickscan” provided as part of our NLNet funding. We’ll publish the full report soon.
If you’re using our Docker images we have another interesting update. All issues are now tagged with their major and minor versions. This means that 1
, 1.1.1
, and 1.1.4
refer to the same image, so you can use 1.1
in your compose file to receive all patches automatically.
You can check it out and sign up over at https://forum.funkwhale.audio. This will be replacing our existing forums over at https://governance.funkwhale.audio for future community discussions.
Forums are an important part of a lot of software projects and communities. They offer a place for communities to gather and talk about a project asynchronously. For some, they are more accessible and understandable than fast-moving chats and email threads. Because of this, we’ve kept our forums at the heart of Funkwhale-related discussions and communications.
Back when the project was starting to pick up, we decided upon Loomio as our forum software. This was due to Loomio’s polling tools, which helped us conduct community decision-making. But over the last few years the forums have grown more complex. People have sometimes found it a bit difficult to navigate and understand. The layout of topics and discoverability of threads is a bit lacking in Loomio compared to other forum software. Since we want the forums to be the center of community engagement, this is not ideal!
A few weeks ago, a user enquired about whether we’d considered alternatives to Loomio. They pointed out some areas where Loomio was lacking, such as a lack of social log in and poor post editing tools. Off the back of this discussion, we decided to take a look at what was out there.
When looking at alternative software, we had a few requirements:
The two main alternatives we considered were Discourse and Flarum.
Discourse is a very well-known piece of software that many projects use day-to-day. It has a user-friendly interface, good layout options, and offers many prebuilt plugins. But when we looked at it we found a couple of issues with it. Discourse is quite a resource-intensive application, and can get quite slow. It is also written in Ruby, which nobody in the project is very familiar with. While neither of these issues would block a deployment, they could lead to issues later on.
Flarum, by comparison, is pretty lightweight. It also offers a pleasant user interface and simple tools, and has many prebuilt plugins. The biggest advantage of Flarum is that it is written in PHP.
A million developers cry out in pain.
All jokes aside, PHP is a very capable language and one that many people on the project have some experience with. Sticking to software written in familiar languages enables us to maintain and build upon our forums much more easily.
Once we’d picked our software, we decided to create a test instance for the community to check out. We set up some spaces to separate out content and test how the forum would look, then started posting content like normal.
The new forums contain more clearly separated topics. We now have dedicated topics for:
Each of these topics has subtopics to help keep discussions navigable. We’re open to feedback about more topics/subtopics going forward, so please feel free to open up a discussion!
If you’re an existing user or just someone who wants to get involved, please come and join us. If you want to get more involved with the community, make a post in the introduction topic telling us a bit about yourself!
We are looking to add more language-specific topics for people who don’t speak English. Currently, we have German and French spaces set up. However, we need help maintaining and moderating these spaces as we don’t speak other languages fluently. If you’d like to volunteer to moderate a new language, open up a thread about it in the community topic!
We’re looking forward to seeing everyone there 👋
]]>It is easy to pay lip service to the subject of diversity. Words and platitudes are cheap, and many in the technology world like to wax philosophical about how much they are in support of under-represented communities. Putting these sentiments into practice, however, is much more challenging. For all of our best efforts, we need to acknowledge we are far from perfect. Most of the people who hold positions in the Funkwhale community are male, based in Europe, and white. That’s not an equal representation of the people around the world or the users of Funkwhale, and is something we are keen to address.
Lets elaborate why this is so important to us. Humans are quite different, they have different use cases for and different access to our software. There are different devices, different languages, different abilities and many more differences than we can even think about. On the one hand its simply discriminatory to exclude some people from using or developing our software or take part in shaping the community. On the other hand this exclusion is a huge loss for the community, since we loose perspectives, opinions and contributors. And this is exclusion is not only happening explicitly. We also exclude people by not making our places welcoming or making it not easy enough for people to join us.
We have had some discussions about this topic. We know we cannot remedy every factor that has led us to where we are currently. But we typify these issues at Funkwhale, too, and this is something we think we can change. We want to be more inclusive and welcoming, and we want to make sure that people can not only enjoy our software, but feel positive about contributing to the project and community as well.
This is where you come in. Besides having our own thoughts about the topic and doing some research, we want to open the discussion and get your feedback, so that we are not just acting on our own myopic points of view. So, if you want to give us some input, have some ideas, or want to point out places where we have messed up, let us know! Tell us everything you think about this topic, especially if you don’t feel represented in the community already.
You can write us an E-Mail (private), contact us on Mastodon or Twitter (private or publicly), you can post to our Forums (public) or provide your feedback here (private & anonymous).
]]>Since this is a bugfix release, we’ve focused mostly on fixing smaller issues which have been impacting both app behavior and appearance:
tracks
endpoint which allows us to filter results by whether or not they are playable by the current user. This means we can hide unplayable content and prevent some of the confusion people have experienced when browsing content.We’ve also added a new behavior for unauthenticated users who try to subscribe to channels. Previously, the subscribe button would treat the user as though they were logged in and register the subscription even though the request had failed. Now unauthenticated users will be met with a popup prompting them to log in or sign up (if registrations are open) to subscribe to channels.
Happy upgrade!
]]>We have some good news: the Funkwhale community is slowly becoming more organized again and we are getting stuff done. We are quite close to publishing another bugfix release and the development for the next minor version has already started.
In the background there is a lot of stuff going on, too. Our infrastructure is being revisited, all tools are getting updates, deprecated tools are being replaced and new tools are already planned. Additionally we have been talking about the state of the Funding with NLNet and have got a few extra offers, namely a security audit, packaging for NixOS and an accessibility audit.
Enough of the boring stuff, you are here to hear about the new features we plan to ship in the following releases. As I said, development for 1.2 has already started. There are already some minor improvements merged: If you click on a track in a playlist, e.g. an album, the whole context gets added to the queue instead of the single song and track pages now show a cover image. There is also some refactoring of the lists in the UI in progress, which is especially useful on mobile devices. Check this video to see what we are working on:
Some more UI improvements will be included in 1.2. Most of the work will be done under the hood, though. We need to update a lot of dependencies, prepare ourselves for a new major version of our UI toolkit and build a solid base for future versions. We have a lot of great feature requests, but before we start to work on them we need to built a solid base and iron out technical debts.
None of this is set in stone yet, but we have some plans for 1.3: we want to refactor the UI to provide a better experience.
On this side, our goal is to provide people with a more welcoming landing page, and offer an easier navigation throughout content.
Additionally we want to implement some tools to have a wider view at the network. Due to the distributed nature of Funkwhale, there is no single database containing all the music. We want to built some mechanics to increase the amount of content which is visible for the user, no matter which instance they are using!
This is a community project. If you want to support us, check out our support page or join our Community spaces if you want to contribute to Funkwhale!
]]>Since then, some things happened. Lately we realized there was not enough transparency about the process and a update is needed. Thats the motivation for this post.
I used the term “we” in the previous paragraph and this is probably the point, where this update should start. Who are we? My name is Georg, I am actually quite new to this great community. My instance was started in May 2020. Since I was using mopidy before my first contributions were made for the mopidy plugin. When I saw the mentioned blog post, I stepped up for maintaining this plugin. Some people gathered together in a maintainers chat room to coordinate the work on the whole project. When I entered this room in February, it was quite silent. There already were some contributions from several people merged into the develop branch and a release was needed to ship them. So we worked towards a 1.1 release, published an release candidate, fixed some bugs and the first release made by the community was there \o/
While I did some coordination, a lot of work was done by others: We had a bunch of contributors (See the Changelog), petitminion helps with managing the issues, mjourdan works on concepts to improve the design of the Funkwhale interface and reviews changes if they are a step in the right direction. Agate is still there for answering questions while Ginny moderated open.audio and was available to handle any case of abuse. Additionally we had a lot of users reporting issues and help to debug them.
By getting deeper into the project I noticed there are still a lot of responsibilities for Agate. The project was raised by her and thats a natural thing, but still a burden for her and sometimes a brake when she is not available. A huge task was the maintaince of our self hosted systems: Our project management, our forum and a lot of other services. Luckyly @egon0 stepped up to care for our infrastructure in the future. This takes another load from Agate.
So lets sum this up. As a reminder, here is the list of tasks collected by Agate in November 2020.
As mentioned above, petitminion covers point 9., egon0 handles 6., while I take care of publishing releases, supporting users and admins and hunting bugs. Some points are still not covered. I wish I could spend more time to work on Funkwhale and implement new features, but this is not going to work for me this year. Additionally there are points 7 and 8. Especially moderation and handling of abuses are important tasks.
Agate will continue to be around to answer questions about the existing processes, organization, infrastructure and codebase, but plans to slowly move to other horizons.
If you are interested in helping out there, please get in touch! :)
~Georg
]]>Today we tagged version 1.1.1 of Funkwhale.
The update instructions are available in our docs. The changelog can be read on the Gitlab release page.
Please note we increased the default number of FUNKWHALE_WEB_WORKERS
and recommend to check your configuration and apply this change. In some cases having only one web worker available seems to break the federation. We are still working on improving the situation, until than please evaluate if more web workers work for you.
If there are any problems or difficulties, feel free to reach out to us :) Take care!
]]>Funkwhale 1.1 has been released this afternoon, and we encourage all pod admins to upgrade, as this version contains no breaking changes, and many improvements and bugfixes.
Many thanks to Georg for managing and publishing this release and to our amazing community of testers, contributors, developpers, users, admins, designers and translators!
You can read the full changelog, but here is an excerpt of the main changes and enhancements included in this release:
This release also fix a lot issues on both the UI and the backend.
Happy upgrade <3
]]>While developpment and activity slowed down for a while since our call for maintainers, a few months ago, we're really excited to announce the upcoming release of Funkwhale 1.1!
Our first release candidate (RC) is out and ready for wider testing by the community!
It should be stable enough for further testing, although some bugs may occur. If you feel like it, have a look at the forum post linked above to get instructions on how to upgrade and what to test.
We want to get as much feedback as possible regarding bugs and regressions before the final release, scheduled around March 15, so don't wait too much ;)
You can share your feedback on the forum link above, or by opening new issues on our issue tracker.
You can read the full changelog, but here is an excerpt of the main changes and enhancements included in this release:
This release also fix a lot issues on both the UI and the backend.
For the first time in more than 5 years, this release wasn't supervised and published by Agate, but by Georg, a new maintainer.
We're really grateful to him for stepping up, and also to all the people who joined the #funkwhale-maintainers:matrix.org Matrix room to help us with the transition.
To the amazing community who continued to translate, test, design, debug, document, enhance and fix Funkwhale during this difficult and uncertain period, we also say a big thank you!
We're still looking for additional maintainers who could take ownership on certain portions of the codebase and project management tasks. If you're interested, you can get in touch via Matrix (using the channel linked above), or by email at maintainers@funkwhale.audio.
Take care <3
]]>It's been a while since our last blog post. Lots of things happened, in particular Funkwhale 1.0 and 1.0.1 were released, eventhough we didn't publish proper announcements on the blog, so congratulation to the community for this big milestone.
I come today with some important news that are going to impact the future of the project.
When I (Agate) started Funkwhale, five years ago, it was a personal hobby. Over the years, it has grown to become much, much more. New people joined the effort, we built a collective to support the project and work together, Funkwhale itself grew and many, many new features were implemented.
While the collective effort of our community made a lot of things possible, like keeping the documentation accurate and up-to-date, translating Funkwhale to new languages, packaging it to several platforms, integrating it with third-party projects, giving feedback on new features or developing a dedicated Android application, some tasks kept being handled almost exclusively by me.
In particular, I'm thinking about project management, development and maintenance tasks, such as:
Some people helped or are still helping with those tasks but overall, it has been my responsibility to handle all of this (and possibly more).
As you're probably already guessing from our silence and the post title, I am not able to do this work anymore.
I won't dive too much in the details, but I had serious health issues this summer, and the dust is only starting to settle. This affected my ability to work on the project on more important scale than expected, and I haven't been able to achieve anything lately but the most basic tasks.
Initially, I thought my energy and motivation would eventually come back as they were before. They didn't, however, and I think it's time I communicate clearly about this and take a step back from my current role as a project maintainer.
For the time being, I am still willing to perform some of the tasks listed above, mainly maintenance tasks like basic support, infrastructure and open.audio maintenance or critical bugfixing and releases. Everything else, I won't do anymore (I haven't in a while, anyway).
I don't want to put what we have built in danger, and I want to leave some time for new people to take over.
Me reducing my involvement in the project doesn't necessarily mean Funkwhale will die, though this implies members of the community take ownership on the unfullfilled tasks and responsibilities. I've been amazed by our collective strength in the past, and I'm quite eager to see what will happen next.
As much as possible, I'll try to help with the transition, if people have questions or need pointers. I'm not leaving the community after all ;)
Some of the development tasks can be paid, as we still have some of the NLNet funding. This could be an opportunity for you to get paid working on open-source software!
If you are willing to help with one or many of the tasks listed above, please get in touch with us on our forum, or on Matrix.
Thank you so much for reading and helping with Funkwhale <3
]]>With the new features and the player/queue redesign introduced in v0.21, we've introduced new bugs and issues.
As a result, we've started to work on fixing these, and will release a patch release, v0.21.1, probably by the end of the month.
This release will only include bugfixes and fully backward compatible enhancements that can be backported from the incoming 1.0 release.
It will also bring several enhancements that have been requested by the community regarding the import_files
command, and in particular:
--watch
flag to react to filesystem events (file creation, update, removal, move)--prune
flag to easily prune library from dangling metadata after a scanIf you've encountered new bugs in Funkwhale 0.21 that are not yet scheduled for the 0.21.1 milestone, don't hesitate to open new tickets!
As already announced during our last community consultation when building the roadmap for Funkwhale 0.21, Funkwhale 0.22 will in fact be 1.0.
Let's take a moment to review the reasons and implications of that.
The current Funkwhale codebase will be three-years old on June 23, 2020. Over the years, we've introduced a lot of new features, and barely removed any. This means that the amount of existing bugs has grown in the app.
In addition to this, working on new exciting features meant we have postponed some important enhancements that were requested by our community:
This list is not exhaustive.
Finally, we've accumulated a fair share of technical debt. For instance, we're still supporting Python 3.5, which was released in 2015, and is not supported anymore by many of our dependencies, leading to a wide range of bugs and unexpected behaviours (as well as some performance or security issues).
Other examples of technical debt that currently exist in the project:
Here again, the list isn't exhaustive.
Funkwhale 1.0 will allow us to address these issues and work on the overall stability of the project. By releasing our first stable version (that's what 1.0 means), we're also sending a signal to our community.
When Funkwhale 1.0 is released, it means we consider Funkwhale is mature enough for you to use, and we're committed to keep it that way.
We won't break Funkwhale REST API compatibility in future minor releases (1.1, 1.2, etc.), meaning developers can safely build new clients, apps and integrations on top of it.
However, to get there and ensure Funkwhale 1.0 is as stable and clean as possible, we will have to break compatibility in some places (e.g by removing JWT auth, or Python 3.5 support). As always, we'll document such breaking changes and offer guidance to upgrade.
Finally, the 1.0 release will be an opportunity for us to complete the API documentation, as many endpoints are not currently documented.
Thank you for staying with us, and let's build an awesome and stable 1.0 release!
]]>Visit https://open.audio/signup to get started or continue reading to learn more.
Hi there, fellow podcasters!
Over the past 6 months, we've worked really hard to make it possible to publish and host podcasts on Funkwhale, and we're now confident enough to communicate more widely about it.
To celebrate this, we're opening subscriptions for a couple of weeks at https://open.audio. Any account created in this period will get 3GB of storage to publish podcast episodes!
To avoid abuse and ensure the best quality of service, we'll review registrations manually, typically in a few hours so don't panic if there is a small delay before you get your confirmation.
As soon as your account is confirmed, you can create channels and publish your podcasts there. Here is an example of a podcast page.
A couple features that you may like:
Because Funkwhale is free software, you can also host your own pod or let someone else, such as SpaceBear host it for you, under your own domain.
We'd love to hear what you think about it, and of course, let us know if you have any questions! You can contact us by email at contact@open.audio.
]]>Our first release candidate (RC) is out and ready for wider testing by the community!
It should be stable enough for further testing, although some bugs may occur. If you feel like it, have a look at the forum post linked above to get instructions on how to upgrade and what to test.
We want to get as much feedback as possible regarding bugs and regressions before the final release, scheduled around April 21, so don't wait too much ;)
You can read the full changelog, but here is an excerpt of the main changes and features included in this release:
Ginny put together a couple of blog posts to give you an in-depth preview of the new moderation features, and the new channels features, you should definitely have a look if you're curious!
Overall, more than 35 people contributed to this release, and counting. Be it with feedback, translations, design, development, third-party integrations, testing, their work is truly invaluable.
Thank you Agate, annando, Anton Strömkvist, Audrey, ButterflyOfFire, Ciarán Ainsworth, dashie, Eloisa, eorn, Francesc Galí, GinnyMcQueen, guillermau, Haelwenn, jinxx, Jonathan Aylard, Keunes, M.G, marzzzello, Mathé Grievink, Mélanie Chauvel, Mjourdan, Morgan Kesler, Noe Gaumont, Noureddine HADDAG, Ollie, Peter Wickenberg, Renon, Satsuki Yanagi, Shlee, techknowlogick, ThibG, Tony Wasserka, unklebonehead, wakest, wxcafé, Xosé M and everyone else way me have forgot in this list <3
We're also extremely grateful to NLNet and all our supporters and donors, for making it possible to work on Funkwhale in a sustainable way!
]]>First, we have screening for sign-ups. In addition to enabling and disabling public registrations, admins can now require new users to fill out a form to request membership for the pod. When submitted, the new user request will go into a queue in the moderation dashboard where admin/moderators can manually approve/deny sign-ups. Admins can add up to three form questions as well custom help text (with markdown capabilities) for information and clarification for potential users before they sign up.
Admins/moderators will receive and email when there is a new sign-up in the queue, and users will receive an email when their sign-up request is approved or denied.
This feature helps filter out spam and other unwanted accounts while remaining accessible to new users.
Next, we now have federated reports both between Funkwhale pods, and with other ActivityPub software. You can report users and content, and choose to forward your reports to the offending instance if necessary. This makes it easier for admins and moderators to keep on top of abuse issues and to share information between pods and platforms.
And last but not least, we now have email verification during sign-up. Admins can now choose to enforce email verification to prevent signup with fake email addresses. This is another barrier to keep spam and other unwanted accounts out of your pod. Nothing to fancy to show in the user interface, but it’s quite helpful!
Thank you to all in our community for your support, and stay tuned for more feature previews as we near the release of Funkwhale 0.21!
]]>This post won't focus on Funkwhale as a sotfware, and deal more with the tools, processes and workflows we use to manage Funkwhale as a community project.
Please note most if not all of the tools we use are already listed on our website. However, today's about the big picture and how the pieces of the puzzle fits together.
Within the project, there are different people, groups, tasks and needs, which has concrete implications on how we organize and communicate. In particular, the people working on Funkwhale:
In that context, we are looking for tools and workflows that are flexible enough to accomodate this diversity, as much as possible. That's why we tend to favour:
I'll dive into the details, but basically, our main set of tools is made of:
Instead of theoritical stuff, I'm going to describe a few concrete examples on how we used these tools during important milestones of the project ot:
Back in early 2019, Funkwhale was not a formal collective, and we wanted to change that. As part of this process, we decided to build a French Association to back the project, and drafted our statutes.
As per our statutes, the last step to incorporate the collective was to have our first general assembly, approve the statutes, and a few other important decisions.
The statutes were drafted with CodiMD over the course of a few months, with several rounds of review. Once we were confident enough, we made several public threads on Loomio:
Both topics were publicly accessible, and remained open for several weeks, at least. In the second one, we used the voting features of Loomio to reach consensus regarding:
Both topics feature several of the principles I described earlier, in particular:
After we agreed on the date and logistics for the assembly, we setup another topic for the assembly itself: this one was dedicated to keep a track of the decisions and agenda of the assembly, for archiving and communication purposes.
On the day of the assembly, we had a synchronous discussion on Mumble, an audio/text chat server. We discussed all the items listed in the agenda, had the corresponding votes on the Loomio topic, and the notes were included at the end of the topic after the meeting.
While we could have used Matrix/Riot for the synchronous discussion, instead of Mumble, we didn't because Mumble was our tool of choice for this kind of discussions at the time. We'd probably do this on Matrix today.
As you can see, thanks to the advanced collaboration features of CodiMD, and the voting/organization features of Loomio, we were able to draft, review, discuss, reach consensus and vote on complex documents and issues, without too much hassle.
And almost one year later, anyone can still go through these topics to understand, in context, what was going on, what we decided, how, and why, why I find quite exciting!
As part of our effort to transition to a community project, we wanted to agree collectively on a roadmap, instead of letting the developpers work only on what they wanted.
The entire process was asynchronous, and relied on Loomio and CodiMD. All the discussions happened in a dedicated forum topic
At first, we had an open consultation, for several weeks, during which we asked people to submit ideas for the roadmap. Unfortunately, we were in the process of migrating to Loomio at the time, and this part of the discussion was lost, so I cannot share it here.
Once the consultation was over, I collected the ideas, detailed them, and setup a public dot vote to identify priorities. A dote vote is a type of vote where each votant get the same amount of points and can dispatch these as they want between the available options. For example, if you had 10 points, and 5 options, you could give 5 points to option 1, 3 to option 2, 2 to option 3 and 0 to option 4 and 5.
This kind of vote works extremely well when you want to identify priorities, because it allows you to give more weight to options you consider important, without forcing you to completely ignore other, less important, but still relevant options.
After the vote itself, we collected the priorities, and put them in a new, public CodiMD document.
Since then, we followed a similar process for the 0.20 and 0.21 roadmaps. Each time, we included the new priorities/items into the CodiMD document, to reflect our new goals and priorities.
As you can see, here again, Loomio and CodiMD makes a potentially complex concertation rather easy. Also, we really benefit for the diversity of voting systems included in loomio.
The case I'm about to describe is slightly different, and still ongoing! Let me tell you how we're using Loomio, CodiMD and Matrix to gather a working group, design and implement the podcasts/channels feature that will land in Funkwhale 0.21. Slightly different because, this time, it spans on both project management and software development.
With our Funkwhale 0.21 roadmap, we had to start implementing the new features. We expected one of them, the podcasts/channels feature, to prove especially complex and difficult.
As a result, in november 2019, we opened a dedicated, public Matrix room, and invited as many interested people as we could. People willing to help design the feature, test it, or just willing to follow the discussions and share some feedback from time to time.
With this working group in place, we had our first synchronous meeting, in the same Matrix room, to agree on our organization. Before having the meeting, we followed a now proven recipe to agree on the date/time and agenda:
To help manage the complexity, we also setup a CodiMD pad prior to the meeting to gather links, notes and tasks related to this new feature.
Since this initial meeting, we've met roughly every week on the Matrix room for a synchronous text discussion. During this occasion, we talk about feature design, potential blockers, share progress and, more generally, spend 30-60 minutes together to appreciate the work we're doing.
Asynchronous discussions continue during the week in the same room, and we also publish progress updates on the forum:
Overall, it's been working for us, and really helped to progress on the feature. However, there are a few pain points:
I'm not especially worried, given it's our first attempt at building such a working group. We will probably do better next time, and I'm thinking about sending an anonymous form the participant to gather more feedback about what should be changed or updated in the way we worked.
I'd like to talk about another missing piece of the puzzle: how do we reach out to the community? How do we ensure the discussions we have on Matrix or Loomio reach their audience? How do we build a working group, get people to vote on the roadmap or attend an assembly?
You probably won't be surprised if I say posting on Loomio or Matrix isn't enough. When we want to involve more people, we usually have to actively communicate in other space about what we are doing.
Within Funkwhale, this is accomplished by:
This is another moment where favoring structured communication tools and formats comes in handy, because it means we can include links to these discussions and posts, and ensure people from social media can get all the context they need.
Ideally, we would also communicate on other platforms, such as Twitter or Reddit but this is not always possible due to our limited resources.
That's pretty much it, I hope you enjoyed this blog post, and I'd be happy to answer your questions if you have any ;)
]]>