Weeknote: 2024-W28-29

22 July 2024

The last couple of weeks have been a mixed bag of goodies, as I work through the last remaining funded core features and improvements, before moving on to ActivityPub stuff.

Docker improvements

First thing I did in week 28 was to spend some time working on deployment improvements. This meant a few different things…

I managed to make the Docker image size about 6 times smaller by using multistage builds; basically all the dev tools that are needed to run things like the asset precompilation aren’t actually used in a live service, so we throw it all away and just copy over what’s actually needed. I was surprised by two things; one, the size of the unoptimised image (1.5GB!) and two, the amount it went down to (~260MB).

Since the early days, I’ve also wanted to create a simpler deployment using a single container, rather than needing separate PostgreSQL and Redis instances. After spending a bit of time making sure that MySQL and SQLite databases work in production as well as dev, I then dug into the workings of s6-overlay to get multiple processes nicely working inside a single container. That was not too difficult in the end, and I managed to create a new image called manyfold-solo which includes its own Redis instance, and uses an SQLite database on disk. That means that you can now deploy Manyfold with a single command!

Excitingly, there’s another thing on the horizon, which is a Linuxserver.io release of Manyfold, currently in testing. Their team have built their own image that conforms to their way of doing things, and I learned a bunch about s6 from looking at what they’d done. I’m super excited to get Manyfold included in the list of Linuxserver apps; I run a load of them at home, and to be part of that list is awesome.

All this makes it easier to get Manyfold up and running, and I’m in the process of revamping the installation docs on the website as well, to guide people through it.

This work was released in v0.72.0, followed rapidly by a couple of patch releases for bugs that cropped up in the solo image build.

Sustainability

I used to work in sustainability-focused tech, building things like carbon calculation tools, so I was excited recently to see the launch of the Web Sustainability Guidelines, a W3C draft aimed at making the web more sustainable, analogous to what WCAG does for accessibility. As I was putting milestones for security and accessibility audits into Manyfold’s NGI Zero funding, I decided to put in a sustainability audit as well.

Now, this draft is in the early days still, so there’s not really anyone out there doing assessments that I could call on, so I ended up coming up with and then using my own approach to self-assessment. It’s not precise by any means, and it’s very rough and ready, but it has pointed out to me a bunch of things that I should focus on to improve the sustainability of the service.

I’ll revisit this assessment in a few months, and hopefully I’ve have turned a few reds into greens (or at least amber). The progressive mesh transmission format that I’ve talked about before is certainly going to be a big part of making that better.

The road to 1.0

I’ve put together a list of things I want to get done before I announce a v1.0 release, and am slowly working through them. A lot of that is unfunded work on bugfixes and features that are still missing but important, like better download options and things.

I’d like to release v1.0 before I add in the big work on ActivityPub and progressive meshes, so that I can say that the original vision of Manyfold has been fulfilled. However, as those other bits of tech are funded and I need to pay the bills, I’m not sure how the ordering will pan out. Could be that a lot of the tech gets built in before 1.0, but only glued together fully afterwards. Not sure.

Anyway, v0.73.0 came out last week with a load of v1.0-related fixes and improvements, along with a few quick additions like GLTF file support that I realised I could do really easily.

Funding

As you may know, Manyfold is only approaching v1.0 because of money from NLNet and NGI Zero, and I’ve applied for another round through the next call for the NGI Zero Commons fund.

Unfortunately the NGI Zero funding stream from the EU Horizon programme is under threat; it seems to have been cut right back in the 2025 round, replacing this brilliant open source funding model with a focus on the current AI hype train. Lots of people think this is a bad idea, and I was proud to co-sign an open letter to that effect. The story has since been picked up by The Register, so hopefully we can make some sort of impact.

Either way though, our grant funding won’t last forever, so if you use and enjoy Manyfold, please consider setting up a regular donation - your support is the only way we’ll make it work in the long run!

Next up

So, what’s next? This week I want to get a user manual written, which explains what everything does and how it’s supposed to work. I’m highly aware that Manyfold is very much the product of my own head, and so there are things that make sense to me that won’t make sense to anyone else. A user manual should help fill those gaps (though the ideal outcome is that nobody ever needs it). Then, it’s on to some social features like feeds and following, which the last funded v1.0 feature, and also an essential component of the future ActivityPub work.