Freedombone Blog

Freedom in the Cloud

Epicyon Shared Items Timeline

Fixed some bugs in the shared items system and have added an instance-wide shares timeline. This allows you to view and receive notifications for the latest things being shared on your instance.

Shared items is a Freecycle-style moneyless sharing system intended for the users of an instance. There is limited visibility of available shares other than to logged in users of the instance, so this follows the usual semi-opaque model. Outsiders will be able to get some idea of the kinds of things being shared, but not full access to the list, nor the ability to do arbitrary searches.

A button allows you to send a DM to the person sharing an item to make inquiries about it. Selecting the image shows you the full sized photo of the item.

Unlike a money based system of exchange there is no attempt to hide the social relationships which are involved behind a currency abstraction.

This functionality was inspired by the earlier Sharings plugin for GNU Social, made by a group called Las Indias.

All the banners we had flown for decades: distributed networks, free software, the globalization of the small… were producing a change in ways of producing wealth and knowledge in which the center was no longer in nations or in big businesses, but rather in small groups and communities that are empowered by a new knowledge commons
Shares timeline of Epicyon

Epicyon performance improvements

Things were getting too laggy and so this week I've been focusing upon getting timeline updates as quick as possible.

Previously the conversion from json formatted ActivityPub posts to html was done on demand. That is, whenever you select a timeline. But in some cases, such as Announce activities or posts where the actor needs to be downloaded, this can involve lookups which slow things down. So now the html is generated at the time when a post is received by the inbox and then cached. When you select a timeline the relevant cached html files are then merely looked up and delivered, without any additional overhead. This also reduces strain on the CPU since any lookups only need to be performed once.

I've also added indexes for timelines, and this improves performance a lot. Previously the index was just the directory listing in descending order of status number, but creating this listing when you have a lot of posts in the inbox directory can take time. Instead it's better to just make an index file which is prepended to whenever a new post arrives. when generating a timeline the system then only needs to read the first few index entries, and doesn't even need to load the entire index file into memory.

The combination of cached html and indexes now makes timeline delivery about as fast as it's likely to get. So the only limit is really just the speed of your server disk storage and how much internet bandwidth you have.

Epicyon Calendar

Going beyond the usual functionality of fediverse servers, calendars have now been added to Epicyon. This is part of the effort to add features useful for organizing social events.

When creating a new post you can now optionally add a date, time and place description. The information gets attached to the post as a tag, using the ActivityStreams Event and Place activities.

There is now a calendar icon which then shows the current month.

Events posted by people you follow will show up there, and selecting particular days then gives you a list of events. If you just want to create reminders for your own use then you can send a DM to yourself containing a calendar event.

Epicyon calendar

This makes organizing events very simple, and you can use message scopes to set up public or private events.

Users of Zot based networks will be yawning at this stage, because this sort of functionality has existed since Friendica, but as far as I know it's new within ActivityPub based systems.

Progress on Epicyon

There have been a lot of bug fixes and features added since 1.0. Now there is support for:

  • Audio and video attachments
  • Multiple languages
  • Themes
  • Timeline showing all replies to your posts
  • Better display on mobile screens
  • Avoiding repeated follow requests from the same person
  • Automatic tagging of music posts

There is also now a dedicated website, although there's not very much on it other than basic instructions.

Epicyon screenshot with the hacker theme

The previous meta refresh on the web interface has been removed and update of the timeline is now a manual button press. This makes the system a lot more suitable for mobile since it doesn't drain the battery. Having a moving timeline was also annoying.

Now only posts by clearly identifiable users appear. That is, URLs with paths that include /users/username or /profile/username. This helps to avoid situations where previously the posts of blocked users could sometimes appear.

There is experimental support for authenticated fetch, which will be in Mastodon version 3. It's off by default, but even if turned on it doesn't make a large difference to the security because if you're not authenticated and not an approved follower then you already only get a limited preview of public posts and follows, and not the entire social graph. This kind of arrangement should limit the usefulness of the data to marketers and surveillance capitalists.

I notice that Mastodon is adding hashtag trends in version 3, but I have no plans to implement that in Epicyon. In my opinion trending or going viral are antithetical to the kinds of communities we ought to be trying to encourage. They're artificial incentives which tend to result in dysfunctional behavior and dubious economies, as seen on Twitter.

Going Audiovisual in ActivityPub

With some amount of wrangling, video and audio attachments now work in Epicyon.

screenshot showing embedded video clip

I've set the upper limit to 30M, which should be enough for short videos and podcasts. Supported formats are mp4,webm,ogv,mp3 and ogg.

One thing to keep in mind is that metadata isn't removed from these uploads, so if they contain any geolocation you might want to remove that manually beforehand. Whether metadata should be removed from media such as mp3 is debatable, since it might also be significantly useful. Perhaps that could be a configurable option.

Epicyon 1.0 release

Announcing the first release of Epicyon. This is an ActivityPub compliant server, supporting both S2S and C2S protocols and which can federate with Mastodon

Epicyon screenshots

All the basic functionality is in place, such as making posts, scopes including direct messages, blocking and filtering, content warnings and moderator functions. It's implemented in a manner similar to an email MTA with posts being stored as files in directories rather than within a database.

Why yet another ActivityPub server?

There are many ActivityPub servers out there but there are currently really only two which are suitable for general social networking rather than particular niches: Mastodon and Pleroma. Other systems like Friendica may federate with ActivityPub instances, but internally use their own protocol [correction - it does natively support ActivityPub among other protocols]. Most of the server code on Github or Gitlab is either very early stage development or abandonware, and it's expected that abandonments happened because the developers soon realized that it was a more involved task than the few available tutorials imply. Bigger than a weekend hackfest. Mastodon is ok but not well suited for running on low power hardware such as ARM boards. Pleroma is more suitable for self-hosting, but its limitations were becoming increasingly obvious when confronted with more serious levels of adversarial activity.

Also there were questions of depth versus breadth. Traditional social networking was about casual gossip and posting news links, but perhaps they could also be organizing tools to build communities with more depth and resilience to them. Beyond the state and the corporation, better ways to organize are needed if existing institutional intransigence is to be treated as damage and routed around.

Beyond ActivityPub

Some extra features have been implemented which go beyond the current ActivityPub spec. Shares is a system for exchange of physical items, similar to freecycle or bartering. The idea is one of local non-monetary exchange and the development of pooled resources between trusted mutuals.

Skills allow you to publicly indicate what skills you have. Combined with a search function this perhaps makes it a little easier to search around within a trusted group for people to form a team with the needed combination of skills. People can of course indicate skills which they don't possess, but the ordinary mediations of a social network (blocking, filtering, peer pressure, etc) should make it feasible to remove dishonest actors.

Moderation features

As the internet and social networking mature it has become apparent that the threat to good order is not anonymity or even pseudonymity but unmoderated spaces. Rather than enabling maximal freedom as intuition might suggest, unmoderated spaces instead create a pressure cooker of maximal tyranny in which bad actors can carry out a reign of terror. Neither corporations like Facebook nor government regulations can create healthy communities merely by decree. People have to learn to govern themselves within the online space.

Epicyon includes moderation functions whereby the admin can assign other people to act as moderators enforcing the terms of service, which can be customized as needed. Members can also report suspicious posts to the moderators.


Emoji are of course implemented using the OpenMoji icons. It's also easy to add new emoji to the list. Unlike some other social network interfaces there is also the ability to search for particular emoji rather than trawling through a gigantic list.

Some limitations

Currently attachments can only be images. There isn't yet support for video or audio, though that may come in later versions.

The Mastodon API is also not implemented and this means that you can't currently use Epicyon with Android apps such as Tusky. This also might be added in a later version.

The familiar timelines (local, federated, etc) which originated from StatusNet also aren't implemented. ActivityPub only defines inbox and outbox, just like email, and that model has been stuck to. This may be easier to understand for people new to the fediverse, since most people already have a mental model for the way that email works.

There is currently no push mechanism between the server and a web browser. Instead it performs a primitive meta refresh every few minutes. This is obviously not ideal for mobile, and may be improved upon in future.