This is the first of a two-article sequence on ActivityPub groups. Part 1 covers ActivityStreams definitions, Mastodon API integration, and the client rendering logic. Part 2 will follow with a deep dive into the code behind populating the reply tree. Here we will briefly go through what a "group" Actor is in theory and how this maps to entities returned by APIs, what UX decisions were made to render posts published by a group and, when moving to the list to the detail screen, how conversations are displayed.

reshared this

Starting from September 30, 2026 the "Android Developer Verification" initiative is going to be rolled out: this means each app must be linked to a verified developer identity, otherwise users will have to face the Advanced Sideloading Flow. While there are well-understandable safety reasons for that, on the other hand, this may endanger platforms like F-Droid, designed around privacy and user freedom. In today's article we'll go though what is going to change, the community reactions and how we'll adapt to this change.

reshared this

When working on a new technology like KMP and CMP, sometimes you run into sharp edges. One of them was Compose Multiplatform previews, requiring either tons of compromises or a setup nighmare. Sometimes, especially when only Developer Experience is involved, it is better to wait until the technology matures. In this article I'll explain how Preview changed with Compose Multiplatform 1.10.0 and how finally adopting them helped me cleanup and improve code.

reshared this

Working on open-source apps and balance maintenance, experimentation and feature requests in one's spare time is not always an easy task. If people start pointing fingers and judge by the way social posts (rather than code) are written, we have a problem. In today's article I discuss why I keep working on side projects, how tasks are priorities and why some choices were reverted over time rather than just pile new features one on top of the other.

The Fediverse is built on the promise of decentralized communication. However, when users from different instances federate, they often encounter a barrier that code alone can not fix: language. Some platforms are designed to integrate with external translation providers, but this has downsides for instance admins (cost and/or maintenance overhead). In this article we'll discuss how managing translation on clients may help distribute costs and let users configure their favorite service.

Beyond contentDescription, this article explores some techniques to improve accessibility in Compose Multiplatform apps. Using Raccoon as a case study, it covers design ideas for better screen reader integration, ensuring content parity and preserving semantics integrity. It highlights that a11y is a collaborative effort: together we can make the Fediverse more inclusive and usable for everyone.

Gradle is the de facto standard build tool for KMP projects and for a reason: it is extremely powerful and highly flexible. However, if not configured correctly, it may result in suboptimal build performance or its configuration may become hard to maintain over time. In this article we'll discuss what are the main issues I experienced and what solutions I adopted to mitigate them in Raccoon; namely its module structure and the convention plugins it uses.

Did you notice that in the latest beta versions, besides APKs to install on Android a .deb package has popped up to be installed on Debian-based Linux distros? This is not by chance: thanks to Kotlin Multiplatform's power, Raccoon has been ported to JVM and can now run as a desktop app. In this post I'll shortly describe how this came to be, from ideation to implementation; which were the main challenges I found in the migration process and what potential implications it has on the project and its users.