artectrex's blog - PixelDroid Update

An update on PixelDroid and some details about the infrastructure.

📅 22 Jun 2021

As you probably know if you are reading this blogpost, PixelDroid is now available on F-Droid. To get to the point where I felt the app was usable enough to be released there, it had to change quite a bit.

Current state of the app

What is implemented?

Basic functionality for most of what you would expect from a Pixelfed client is implemented.

What is broken?

What is coming?

Continuous Integration and tests


We use GitLab at

As you might notice, this is not or GitHub. Decentralization is good, and as developers in this space we should practice what we preach, whenever possible. Thanks to for this GitLab instance :)

GitLab CI is used to:

GitLab CI uses “runners” which are computers that basically spin up docker containers to run the CI jobs on. Two runners are currently in use, one run on my server, and another donated by wisemonkey, who’s been running one for almost a year now on his PC. Thanks ❤️


To ensure correctness of an application, it’s useful to have automated tests to check it behaves as expected. This is especially useful to prevent regressions, meaning breaking something that was previously working.

Mainly the tests written for PixelDroid are UI tests, using a testing Pixelfed server. This has some advantages and also significant drawbacks.



Currently tests are less flaky than they used to be: most tests now pass reliably, and the remaining issues are getting better over time as work is put into rewriting the tests to be more reliable. Help in this department (and any other department, to be honest) is more than welcome.

Testing has helped catch issues, crashes, other bugs to prevent them getting merged into master a bunch of times, so I think it’s worth it. Of course the current approach has a lot to be desired, I would like to see more unit tests instead of almost exclusively UI tests.


Having translations enables more people to use the app. Since the main goal here is to free the world from proprietary dis-services, making sure people can actually understand what is going on seems very important (and also, languages are cool :D).

It was surprisingly easy to get translations to work. The main challenge was to set up the weblate server (I wanted to self-host this as well), but that took maybe a couple of hours to set up all in all.

This allows people to contribute translations with an easy UI, with warnings and suggestions to ensure quality translations. Weblate then pushes these contributions to a translations branch on our git repo, and from time to time I will merge this into master.

At the moment, our weblate contains 22 languages, two of them were added recently. Translating is a way to contribute that doesn’t require any coding skill, and help on that front is always welcome :)

Thanks a lot to all our translators ❤️

Crash reports through TraceDroid

Lots of apps contain “crashalytics” or other types of analytics, I feel like - in addition to often being proprietary software and thus unacceptable - this is an injustice towards users. Any feedback from users should be on a voluntary basis, with explicit consent to share the data.

However, it is useful to get information on what kinds of crashes users are getting. Sometimes a crash is caused by peculiarities of the setup of a particular user, sometimes a crash is pretty rare because of an obscure race condition, maybe sometimes it is caused by a particular post or profile containing some unexpected data.

For these reasons, I chose to add TraceDroid to PixelDroid (wow, adding -Droid to get a name for an Android thing is so original). Project repo for more information:

This has helped point out some issues multiple times, users don’t need an account to report anything (TraceDroid just uses their email client to send an email) and it’s pretty easy to get back to people for more info since I can just reply to the email the user sent when prompted by TraceDroid.

If you get a crash and you get the prompt about it, the easiest way to get it fixed is to send the report generated by TraceDroid! Thank you so much all those who sent me the reports.

NLnet grant

About the grant

As some of you might know, we got a grant through the NGI0 Discovery Fund, a fund established by NLnet with financial support from the European Commission’s Next Generation Internet programme. Thank you NLnet and the EU NGI programme for the financial and other support, it has been most helpful.

Searching for a digital artist to make some drawings of red pandas

You might have noticed the red panda used for error messages. He’s pretty cute, but we would like to have a somewhat more expressive panda, in color, with various expressions and accompanied by various items to indicate what’s happening to the user (network issue, empty feed, …). In addition it would be nice to have a mascotte for the about page and splash screens of the app (a red panda holding a phone, for example, but in the same style as the previously mentioned pandas).

This is part of one of the milestones in our agreement with NLnet, so this would be paid work. Please contact us at contact at or on Mastodon or Matrix, if you think you are the right person for this or know anyone that might be and is looking for work.


PixelDroid is - slowly but surely - getting to a usable state. I feel like the app has already come a long way, but I have big plans including making a FOSS library for image editing so that other apps can also use it.

If you want to contribute, hop in on our Matrix chat room, or send a message on Mastodon.

If you are unable to contribute but still want to help, after popular demand we have set up a Liberapay. Thank you so much to the two generous people that saw fit to send us some donations in the previous months :)

Thanks a lot for your interest and the consistent nice feedback I have gotten along the way. Have a nice day, everyone :)