flak rss random

azorius 0.1

Reddit is deddit. Everybody needs to write a replacement. Mine is called azorius.


The general design is not particularly imaginative. There are users. There are groups (communities, suburbs, ...) to which users may post links and comment on them.

It federates with other instances via ActivityPub using a vocabulary very similar to Lemmy. So you can follow and post to groups on other instances, receive their posts and comments, and generally interact across the federation somewhat seamlessly.

Behind the scenes, the Group actor is responsible for pushing activities to all following parties. It’s fairly aggressive (noisy) about this, but the result is that when things work, you should get accurate and complete views of threads. Unlike microblog counterparts, it should be far less necessary to check remote instances to see replies you’ve missed.

In addition to following groups, you can also follow persons, and share individual links with your followers. One of the things I like about the swirling stew of microblogging is the people you follow for topic X will also share cool link Y, but you don’t need a feed filled with Y. So I’m hoping to capture a bit of that by not restricting subscriptions to groups.

At the same time, the group/post/comment hierarchy (Group/Page/Note in ActivityPub) is pretty integral to the azorius design. The intention is not full interop with microblogging. Notes unattached to Pages are discarded. I’m not convinced that every AP app must be the everything app. (Azorius can’t even talk to inks an existing federated link site that I built myself, because it doesn’t use groups.)

Experience with honk definitely helped. The technical architecture is similar, in terms of “stack”, even if the internal processing has ended up taking a rather different direction. Honk tries quite a bit harder to interop with every AP implementation and representation, even if it doesn’t look like it or when it’s a poor match for the non-federated data model. For azorius, wire messages either match the data model, or they don’t.

My philosophy is that (nearly) everyone can and should host their own microblog, but I’m less convinced that’s true for a link site. You’re more likely to have an interesting all feed with a diverse group of users, but that quickly turns to noise with microblogs beyond even the most modest size. Working to make it more useful for many users at a time.


Well, it’s 0.1, but I think it’s mostly functional. Interop with lemmy seems fine. It’s enough to get started with.

There’s a middle layer of moderation that’s probably missing. Right now, it’s just site wide admins. Good enough until a site gets bigger. Users can signup in a readonly state that lets them manage subscriptions, but not post until approved. I think this is a good compromise for now, that lets users get started immediately, without the site getting spam flooded.

Have passed on tuning the UI more than necessary. The textarea for editing a post is comically undersized, etc. This seems like it will be a never ending time sink, and not imperative for launch. It looks a bit like old reddit, but with a font size I can read.

The delivery and addressing of activities is greatly simplified. This may change, but for now it’s really easy to simply send everything to the group (group’s followers) without worrying about cc, mentions, etc.

There’s no voting, just newest on top, which works for a limited number of links, but probably falls over if you’ve got a thousand people posting every link they see. Personally, I’d prefer to curate a community that’s somewhat more judicious with their posting, instead of relying on crowd wisdom. I exclusively browse lobsters via the secret newest url. On average, it’s about a day’s worth of posts. I don’t have to scan the whole list every refresh because once I’ve seen an old link, I know I’m done. Many of the links I’m most interested in fail to gain traction and would be difficult to discover via hotsort.

I’d like to add cross posting (not multi posting) but the SQL queries are going to need some refinement to handle M:N.


In a normal ActivityPub environment, deciding whether an operation like Update or Delete is permitted is pretty easy. Is the actor the same as the object owner? Yes, allowed; no, disallowed.

It gets a little more complicated with groups. If the mods aren’t asleep, they will want to delete comments containing too much truth. They don’t own the comment, although they do own the group under which the comment is published. So we have some relaxed permission checks.

Another relaxed permission check is on the create side. The group will push to us every comment posted by anyone, even those from other instances. In theory, we should not trust these comments, and should fetch them via url to verify. Alas, half the lemmyverse is misconfigured and won’t serve activities (more on this later), so we trust the group server more than usual. It’s a federated environment, after all. We trust the group to tell us what’s in the group. And shun antisocial groups, I guess.


So why not lemmy? Because I don’t like lemmy. I guess skip this section if you do like lemmy.

I don’t like that the easy install instructions are longer than this blog post. I don’t like that the build failed after ten minutes due to a missing dependency because they couldn’t check for it before starting. I don’t like that restarting the build literally restarted from crate zero and rebuilt everything. I don’t like that the build failed fifteen minutes later trying to compile lemmy-schema because it ran out of memory, so I had to add swap. I don’t like that the build failed again another twenty minutes later trying to link lemmy_server because I didn’t add enough swap. Come on, man.

I don’t like that the lemmy server and webapp are two different processes, but neither is smart enough to proxy requests to the other, requiring the use of a super janky nginx.conf to route requests. I don’t like that half the lemmyverse has fucked this part up, and serve HTML instead of JSON for activity requests, effectively isolating themselves from federation.

Just in the past week, one of the larger instances, beehaw, broke their config. There was a narrow window in which things worked and I was able to follow some groups, and receive posts, and I continue to do so, but I cannot retrieve any new groups. I can receive comments and posts from persons already known to my server, but not from others since attempting to retrieve the Person actor for any unknown identities fails. This is a disastrous state of federation. There is a set of beehaw users who can subscribe and post links to my groups, and a set who cannot, and no way for them to identify themselves, except by trial and error. This is a regular and recurring problem in the lemmyverse.

It’s a nightmare for users and admins alike. Users complain that nothing works. Admins, with older accounts, find that federation works for them. Blame this instance. Blame that instance. “You can’t expect perfect consistency in a distributed environment.” Except the problems arise not from any inherent lag in the network, but from nodes that refuse to communicate. Having a Group actor orchestrate and share activities would be a great advancement over the fragmentation of the microblog side, if only it worked.

I don’t like that lemmy drops the entire outbound queue whenever the server restarts. I don’t like that if you follow the build from scratch instructions you end up with node 12. I don’t like that a new project written in rust still uses imagemagick in the year 2023.

We have the technology to build reliable services. We should do so.


The azorius 0.1 release and sources are available via humungus.

Some sweet features like hashtags and voting may get here eventually. And some documentation, although there aren’t many undiscoverable features at this point.

According to the MTG fandom, “the Azorius Senate mediates and regulates the activities of all of the other guilds and of the plane despite their numerous decrees being ignored. The Azorius Senate are characterized as being aloof, bureaucratic, excessively formalistic, and fastidious, spending hours upon hours with legal documents and ensuring action, if any should occur, stringently adheres to protocol.” However, this is irrelevant, since azorius is unrelated to MTG.

Posted 20 Jul 2023 14:48 by tedu Updated: 20 Jul 2023 16:33
Tagged: activitypub project web