Fediverse Servers

It’s that time of year where Mookie starts buying domain names and tests out Fediverse servers. These are some notes from my testing in a new format!

I have three servers running currently:

I’ll be writing about the three servers based on these factors with a rating from 1-4 (higher is better):

  • System Resources – How heavy is the software when it comes to system resources – CPU, RAM and storage.
  • Moving Parts – How many moving parts are there to the system – does it need a separate database server or any other supporting software?
  • Features – How feature rich is the server?
  • Lisa Melton Hugs – My way of measuring scalability based on how a server survives a post being boosted by the lovely Lisa Melton who is the de facto algorithm of the Fediverse.

My ratings are for a very specific use case: Single user instance. These are no reflection of any other use case.

Server System Resources Moving Parts Features Lisa Melton Hugs
Mastodon 2 2 4 4
GoToSocial 2 4 3 3
snac 2 4 4 1 1

Scores (for single user instance usage, higher is better):

  • Mastodon: 12
  • GoToSocial: 12
  • snac2: 10

Mastodon

System Resources

Mastodon is a full-fledged Fediverse server that is able to handle many thousands of users and it’s built to scale up. But, the floor for where it starts is quite high also. At the very minimum, I would recommend running a Mastodon server with 2GB of RAM and 20GB of storage. But a reasonable install would be on 4GB of RAM and at least 50GB of storage.

Storage grows because Mastodon downloads and caches all media that come with posts from remote servers. There are ways to cut down the storage usage (Settings -> Administration -> Serve Settings -> Content Retention), but that only helps with part of storage usage. Mastodon also stores a bunch more including remote user avatars, remote user headers and generated link preview cards. These require regular cleaning or they will chew up more storage than posts and their media attachments.

Moving Parts

Again, Mastodon is built to scale. It has many moving parts that can be run on different servers to spread out load. The two big parts are PostgreSQL and Redis.

Features

For better or worse, Mastodon is the yardstick that all other servers are measured against. Its API is the one that others aim to be compatible with.

Lisa Melton Hugs

On 4GB of RAM, Mastodon survives a boost from Lisa without breaking a sweat.

GoToSocial

System Resources

GoToSocial is a single golang executable that can run comfortably on 1GB of RAM (on Debian). Like Mastodon, GoToSocial does cache remote media (including avatars and headers) locally. The storage requirements are nearly the same as Mastodon, but GoToSocial’s media cleanup is much simpler.

Unlike Mastodon, GoToSocial currently has no way of pruning its database of old posts (local or remote), meaning the database will be ever growing until this feature arrives.

Moving Parts

There’s a single golang binary that uses sqlite for its database. PostgreSQL support is built-in and is optional for those who want to use it. For a single user instance sqlite works great.

Features

With GoToSocial v0.15.0 (currently it is RC1), the developers have added a big important feature: Account migration. This is important for two reasons. First, it allows users on a GoToSocial instance to migrate their account away. Second, it allows for users on GoToSocial instances to accept move requests – ie. if I am following someone on a different instance and they decide to migrate to a different instance, now their account migration process will be able to change my follow from their old user account to their new one.

There are a few missing features that I’d like to see in GoToSocial:

  • Post editing. I really miss being able to edit a post instead of deleting and reposting – since if someone has already interacted with the original post, all that is gone if I delete and edit.
  • Web UI. I know, it’s still alpha software (nearly entering beta with v0.15.0), but even a basic web UI would be nice. For now, I’m using either phanpy or elk to interacted with GoToSocial from my desktop. I use Mona for Mastodon on my iPhone and iPad. I want to use Ivory for iPhone and iPad, but even though they support the Mastodon API and GoToSocial supports the Mastodon API…Ivory refuses to connect to anything but Mastodon.

Lisa Melton Hugs

Unfortunately a boost from Lisa will cause GoToSocial to experience a rapid unscheduled disassembly.

Update after post went out: I was in touch with Tobi and was chatting about GoToSocial’s reaction to a Lisa Melton Hug. It should be able to sustain this stress. After chatting, it maybe that I’m running my GoToSocial instance on Oracle’s Free Tier. I would be interested in hearing from other GoToSocial instances about how your instances handle boosts from Fediverse users with massive followings.

Update after moving instance to a server with NVMe storage: I tested for a while and GoToSocial works great. I haven’t gotten a Lisa Melton boost yet, but I have gotten boosts with multiple thousands of followers and GoToSocial works. Lesson learned: Oracle Free Tier has slow crappy storage attached to its x64 instances that may cause issues.

snac2

System Resources

snac2 is written in portable C. It requires even less than GoToSocial – I’d be comfortable running it on a 512MB VPS. Unlike Mastodon and GoToSocial, snac2 does not cache anything locally. The only storage it uses is to store media that is posted by a user on the instance.

Moving Parts

snac2 is a single executable. It doesn’t use a database for storing data. Instead it uses files and hard links to store everything.

Features

Having used snac2 for a little, I’ve grown fond of its odd ball minimalistic web UI. It’s not the most intuitive, but it’s endearing.

snac2 has implemented a thing that I use regularly: Editing of posts. It is also good at fetching posts in a thread to give a fuller picture of what is being discussed. snac2 also has a plethora of ways to expire/purge posts. Automatic purging of remote posts can be set at the server-level. Automatic purging of personal posts can be set at the server and personal level.

There are a few missing features that I’d like to see in snac2:

  • The ability to unlike and unboost posts.
  • The ability to export a list of people I follow.
  • The ability to migrate to a different instance or process move notifications from those who are migrating.

The last bullet point is heavily weighted in the ratings above. Being able to move one’s followers or process a move notification is very important. This ability avoids lock in and also avoids following old accounts that have since migrated elsewhere.

Lisa Melton Hugs

Unfortunately a boost from Lisa caused snac2 to give of the ghost.