Setting up and running your own Fediverse instance is an incredibly empowering thing. A good analogy for it is: imagine you have been renting apartments your whole life and then purchase a home. Your home, where you make all the rules, customize it to your liking and take great care of it because it's YOUR home. That's precisely what I have been doing for a digital home - on the Fediverse - with my GoToSocial microblogging instance: @elena@aseachange.com.

If the thought of self-hosting makes you immediately tune out, thinking: "oh my, this sounds so complicated and unattainable for a regular, non-technical person" well, I can understand. I had that exact mindset as recently as November 2024. Heck, even December 2024. But then I took the plunge and never looked back. I'm here to tell you about my journey of tech empowerment, made possible by YunoHost and GoToSocial.

And even if you are feeling perfectly comfortable on an instance run by someone else - I completely understand - my tales of self-hosting may be interesting to you as something to consider down the line. Because some Fediverse projects (Kbin, Firefish) and servers (BotsIn.space, Mozilla.social, moth.social) come and go and it's smart to be prepared to move if something goes wrong. Thing is, you can’t get evicted from a home you own. I’m here to tell you that self-hosting is accessible to anyone, if you can spare a few dollars/Euros a month.

Why self-host? An act of rebellion against Big Tech oligarchs

I never thought I would self-host. In my mind, this was something that only highly-skilled technical people with computer science degrees could do. But then the United States became a de-facto kakistocracy (government run by the least competent, worst people), something that was aided and abetted by Big Tech oligarchs. My immediate reaction to the shock of the US presidential election results was: I need to learn Linux and fully embrace the FOSS world. Because, in the timeless words of the brilliant Audre Lorde: “For the master’s tool will never dismantle the master’s house. They may allow us temporarily to beat him at his own game, but they will never enable us to bring about genuine change.”

How can you self-host? It’s easier than you think!

In blog posts I wrote in the immediate aftermath of the US presidential election ("The Rebellion Will Be Federated" and "Introducing: My So-Called sudo Life"), I expressed a desire to self-host, possibly years down the line, once I became proficient in Linux. But people like Ethan Sholly (of selfh.st) encouraged me to take the plunge and immediately explore self-hosting, as “you learn by doing things” (in Ethan’s wise words).

I wasn’t quite sure how to get started. ilja recommeded YunoHost.org, a “system that installs itself on a server and allows you to install and maintain - with very little technical knowledge - digital services that you control.”

YunoHost: garden your own piece of the Internet!

This article is NOT a step-by-step guide of how to use YunoHost and install GoToSocial. Maybe I will do that in the future. No, I really want to make GoToSocial shine here, so I will speed-run through the installation steps.

Suffice it to say, I signed up for a virtual private server (VPS) on the web hosting company I use, selected the most basic VPS plan (with Debian) for 5 Euros a month, opened up Terminal from the VPS's website and proceeded to install YunoHost following its brilliant, easy to follow installation guide (I just copied and pasted the recommended commands). From start to finish, the installation process took about 5 minutes.

screenshot of a toot that reads: It’s happening!!! I signed up for a #VPS and I’m about to install #YunoHost. Exciteeeeeeed (and slightly scared).  I’m so early in my #Linux journey but I was emboldened after watching a video walkthrough of YunoHost, with the narrator repeating time and time again « it’s so easy a child could do it ».  Let’s see if « it’s so easy a Linux newbie could do it».  Wish me luck!
a toot from the day I signed up for my Debian VPS

If you are slightly more technical than me, you may think: why buy a VPS and not use an old computer or a Raspberry Pi as a home server? Excellent question! I do have a Pi5 and I could have bypassed the monthly VPS fee. But! I love the simplicity and reliability of a virtual private server that is always online and gets automatic backups by my VPS host. My home internet connection is very spotty and I travel quite a bit between my home and two sets of parents (mine and my husband’s) and I wanted something super reliable that didn’t require too much maintenance. But yeah, if you don’t want to spend 5 Euros a month and you have an old computer or a Pi at home, go for it! It’s just that it is not for me - especially in case of loss of connectivity when I am away from home.

Anyway, to quickly speed through my journey of self-hosting: I installed YunoHost on my VPS. I had an unused domain name that I had purchased years ago that was perfect for my self-hosted Fediverse instance; I associated that domain’s DNS records to YunoHost, waited 48 hours for them to propagate, and then I was ready to pick a Fediverse social media app to install on that domain.

Following the advice of multiple people on the Fediverse, I picked GoToSocial.

Throughout my year of Fediverse explorations, I used Fediverse microblogging software like Mastodon (where I still have my main Fediverse account: @_elena@mastodon.social), Friendica and Sharkey. I could have picked any of those – all offered by YunoHost - for my self-hosted instance, but instead I went with GoToSocial because of its reputation of being low on resources (250-350MiB of RAM), easy to maintain, and features-rich, with granular controls that are unique to it and not available on other Fediverse software.

a screenshot of GoToSocial's description and installation page as it appears on YunoHost
a screenshot of GoToSocial's description and installation page as it appears on YunoHost

What is GoToSocial? Meet a super lightweight, easy to maintain, ActivityPub-compatible federated server

This is how GoToSocial is described, on its official website:

GoToSocial is an ActivityPub social network server, written in Golang. […] GoToSocial provides a lightweight, customizable, and safety-focused entryway into the Fediverse, and is comparable to (but distinct from) existing projects such as Mastodon, Pleroma, Friendica, and Pixelfed.

On its origins:

This project sprang up in February/March 2021 out of a dissatisfaction with the safety + privacy features of other Federated microblogging/social media applications, and a desire to implement something a little different. It began as a solo project, and then picked up steam as more developers became interested and jumped on. We made our first Alpha release in November 2021. We left Alpha and entered Beta in September/October 2024.

A quirk - if you can call it that - of GoToSocial is that it does NOT come with an official web client. When you connect to your admin page on your server you can customize your profile page and fine-tune controls but you cannot post from it. For that you will have to rely on external Mastodon API-compatible clients (more on this later).

For this overview of GoToSocial, I will focus on three areas:

  1. customization
  2. granular reply controls
  3. using GoToSocial with third party clients

But before we begin: the special thrill of seeing the label “admin” on my profile page never gets old. It makes me smile every time I see it (and I’ve been self-hosting for exactly 2 months now). This is what tech empowerment looks like:

a screenshot of my GoToSocial homepage with the orange label admin
a screenshot of my GoToSocial homepage with the orange label admin

Feature 1: Customizations

Being the admin of your own Fediverse instance - in this case GoToSocial - gives you a lot of customization options that fall into two categories: aesthetic and functional.

Some of you may find the former category a little superficial, but I have to say, I LOVE the “aesthetic” customizations I can do to my instance - from selecting a theme to uploading custom emojis.

Throughout my two years on the Fediverse (I joined Mastodon in late October 2022) I would often be in awe of custom emojis I randomly came across. In primis: the LEGO logo (if you have been following me on the Fediverse, you must have noticed that I am a HUGE LEGO fan). I would often wonder: how did they use that? Well, some Fediverse instances have large libraries of emojis that can be inserted into posts; others, like mastodon.social have a smaller number available. What is the first thing I did when I began setting up my own GoToSocial instance? Naturally, I went looking for custom emojis that would allow me to express my true self online.

The website emojos.in allows you to peruse the emojis used by any given Fediverse instance - and download any you may like. When you log onto your GoToSocial server as an admin, you can find a “Custom Emojis” page in the sidebar. There, you can upload any custom emoji of your liking and even organize them by topic. This is what I did:

a screenshot from my GoToSocial admin dashboard that shows how I organize custom emojis. They are sorted in categories like: reactions, fediverse, values and logos
a screenshot from my GoToSocial admin dashboard that shows how I organize custom emojis

And how I use custom emojis in my bio:

a screenshot of my GoToSocial profile page that shows my bio and pinned introductory toot. I am using emojis in my bio, like the LEGO logo and emojis for my values (explained below)

I gave the custom emojis clear, short descriptions in CamelCase so that they are fully accessible for people using screen readers. My profile reads: “my values are BlackLivesMatter Feminist HeartPride HeartTrans NoNazis.”

You may find this kind of customization a little superficial, especially if you are not into emojis. I get it. But GoToSocial also allows you to carry out impressive customizations that are also functional.

What do I mean by that?

I can set the maximum length of characters for any given post. Mastodon has 500; my self-hosted GoToSocial instance has 5000 (and I could tweak that number to my liking). Instead of breaking up a post into multiple ones on a thread (I don’t like threads), with responses that get scattered across posts and a discussion that becomes difficult to follow, well, I have ONE single 5000-character post with easy-to-spot replies. I LOVE this.

In the YunoHost “Config Panel” page for GoToSocial I also selected things like:

  • Maximum amount of options to permit when creating a new poll
  • Maximum amount of characters to permit per poll option when creating a new poll
  • Maximum amount of media files that can be attached to a new status
    You know, admin customizations. Which is really cool and empowering.
a screenshot of my GoToSocial configuration panel, where I can fine-tune a lot of settings (maximum number of characters permitted per post, maximum number of options in a poll, maximum amount  of media files, etc.)
a screenshot of my GoToSocial configuration panel, where I can fine-tune a lot of settings

Feature 2: Granular Reply Controls

I wish the Fediverse could be a safer space for marginalized groups. Several amazing people I follow often complain about being on the receiving end of abusive replies - some say they often think about quitting the space altogether. Unfortunately some do.

When I heard about GoToSocial’s granular reply controls, I got excited. On paper, these features sound like a wonderful way to be on the Fediverse, freely express oneself, and decide who can interact with you. I thought this could be a superb solution to create a safer online space. I’m talking about GoToSocial’s Interaction Policies.

In GTS’s admin dashboard you can select who can Like, Reply or Boost any of your posts going forward (this doesn’t apply retroactively). The settings are so advanced, they allow you to do really granular fine-tuning for public, unlisted and follower-only posts.

For example, you could set a global setting so that when you publish a public post, only your followers and/or accounts you follow can reply. Nobody else. Or you could select manual approval for replies (of followers, those you follow and/or everyone else). There are so many possible combinations:

a screenshot from GoToSocial's admin page where you can fine-tune interaction policies. the screenshot shows settings for Unlisted posts. Like: everyone. Reply: who can reply to your unlisted post? Something else. And then there are options for My Followers (No) Accounts I follow (no) and everyone else (with my approval)
a screenshot from GoToSocial's admin page where you can fine-tune interaction policies

I tried this out, thinking: maybe I would make it so whenever I publish an Unlisted post, only my followers and accounts I follow could reply. It could feel safer.

That’s precisely what I did for my test about a month ago. And I got interesting results:

a screenshot of my toot from January 4th that reads: Good morning Fedi friends!  This is day 4 of testing from my #GoToSocial instance.  Yesterday I tried out their granular reply controls, publishing an unlisted post and setting it up so that only accounts I follow or that follow me could reply.  Something interesting that happened is that a non-follower also managed to reply, but his post was hidden from me / didn't show up in notifications. I only found it while looking up this account on Mastodon (when I was logged in my other mastodon.social account) and searching for that unlisted post. Interestingly, *only* the reply by my non-follower showed up there / federated (and not the replies by my actual followers).  Anyhow, in a little bit I will try out something else: posting a photo... only to my followers.  LOVING GoToSocial so far, quirks and all. I'm so happy to have my own instance.
a screenshot of my toot about my interaction policies test

Gytis Repečka explained to me:

See, that's the thing: responder may reply regardless your Interaction Policies - it's just your server does not take that reply in. But it still exists on the server of responder.

It's not that you can prevent someone from replying - it's just you are refusing to attach it to a thread on your server. That is pretty much the best that may be achieved given how federation works.

Which makes complete sense. So in theory anyone can reply to any of your posts - but you, the original poster will only see on your server replies that you allowed.

As a woman on the internet who has experienced the occasional abuse (especially in my Twitter days, when championing gender equality in the film industry) I would not feel safe not seeing replies. And having to manually approve each one is A LOT of work. So I used GTS’s granular reply controls for a couple of days and when I understood how they actually work, I set everything back to public, no manual approval necessary. I want the stuff out in the open - so that if I want, I can block the accounts of people who send abusive or offensive replies.

Still, this is my personal preference. I am certain there are people out there that for peace of mind would like to implement these granular reply controls and never think about them again. It’s good to have options - and one thing that GoToSocial does superbly is: give you PLENTY of options to control your online experience.

⚠️ Update: tobi (@dumpsterqueer@superseriousbusiness.org), a GoToSocial developer, wrote me this note clarifying interaction policies, after reading my article:

It's worth noting that we do federate the interaction policy on a status, so while most server types don't understand what they can and can't do yet with regard to interacting with a status, other GoToSocial instances at least respect interaction policies of remote statuses and don't send an unwelcome reply – or even allow a user to try to send it. It's not just server-side filtering of replies, your status itself also advertises what sort of interactions are and aren't permitted on it when it's sent off into the fediverse. So in the future as more softwares read + adopt interaction policies themselves, it will become rarer that a server doesn't recognize them and broadcasts an unwelcome reply anyway. We hope anyway!

Feature 3: using GoToSocial via 3rd party clients and apps

On GoToSocial’s FAQ page you can find this explanation about one of the software’s quirks:

GoToSocial is just a bare server for the most part and is designed to be used thru external applications. Pinafore in the browser, Tusky for Android and Feditext for iOS, iPadOS and macOS are the best-supported. Anything that supports the Mastodon API should work, other than the features GoToSocial doesn't yet have. Permalinks and profile pages are served directly through GoToSocial as well as the settings panel, but most interaction goes through the apps.

I personally use other web and iOS clients to post and reply on my GoToSocial instance: mostly a combination of phanpy.social and Elk.zone on the web; Mona Pro on my iPhone. Why 2 web clients, you may ask? Phanpy has a brilliant catch-up feature that you can’t find anywhere else… Elk has the cleanest, most gorgeous web interface reminiscent of Twitter 1.0 (RIP) and a really cool feature - zen mode - that allows you to focus on messages while making all other interface elements fade out. (Oh and they have a grayscale mode too!)

To summarize: superb desktop and mobile experiences; no complaints.

Final Thoughts on GoToSocial

I really enjoy posting on my GoToSocial instance and found an interesting use case for it: while my Mastodon account remains my main home on the Fediverse, I am using my GoToSocial account to talk about my self-hosting journey. It’s cool to look back and see how far I’ve come in just two months. I’m currently self-hosting my own GoToSocial, Friendica and Pixelfed instances, as well as a LinkStack and other apps — thanks to the magic and ease of YunoHost.

Here is the kind of posts I share on my GoToSocial:

a screenshot of I toot I shared that reads: my adventures in #selfhosting - day 62. On the two month anniversary of signing up for my first VPS, I have just purchased a second basic plan: a VPS that runs on Ubuntu so I can self-host Ghost on it. Later today I will attempt manually installing Ghost with commands - wish me luck! In case you're wondering why I'm doing this, check my previous messages. TL;DR: Ghost now only officially supports Ubuntu and MySQL, whereas YunoHost runs on Debian, with MariaDB databases. A very generous volunteer at YunoHost has been manually patching Ghost packages to ensure compatibility, but I would rather play it by the book and run a self-hosted Ghost blog on a supported system... especially since they will be federating very soon. Wish me luck! #MySoCalledSudoLife
a screenshot of a typical message I share on my GoToSocial about my self-hosting journey

Earlier this week someone who follows my Mastodon account realized I have a second microblogging account on the Fediverse, specifically on GoToSocial. They were a little confused and asked if the second account was a clone. My response:

a screenshot of an interaction that goes like this: follower wrote: wait now I’m confused. Is this a clone of your usual account? and I replied: this is my self-hosted #GoToSocial instance where I share toots about my #selfhosting journey. It is not a clone of my other account... file under: I contain multitudes (LOL)
a screenshot of my interaction with a follower who asked if my GoToSocial account was a clone of my Mastodon account

If you are tempted to try out GoToSocial I’d say: go for it! It’s absolutely perfect for microblogging and taking your first steps in self-hosting.

🚀
GoToSocial's official documentation and guides on how to get started are available on the project's official website. If this information sounds a little too complicated for you, I would recommend getting a basic Virtual Private Server (VPS) that runs on Debian, installing YunoHost on it, and once it's set up, installing GoToSocial via its dashboard. Installation takes 5 minutes. That's precisely what I did.

As much as I am enjoying GoToSocial, I am still keeping my main Fediverse home on Mastodon because of its bigger user base and dev team – its longevity feels more assured than projects run by small teams. Plus, GoToSocial is technically still in beta.

If GoToSocial devs read this, please don’t get offended: your social network rocks! It’s just that I’m being realistic and cautious after seeing what happened to FireFish, Kbin, sub.club and other recently discontinued Fediverse projects. This way I am enjoying the best of both worlds. And there is so much good and promise in GoToSocial that I cannot wait to see which features will be released next. Thank you GoToSocial for giving so many people the power to self-host.

Elena

👩‍💻
P.S.: are you inspired to follow my steps and sign up for a VPS to install YunoHost and get started self-hosting? If you are wondering which VPS I am using, it's Hostinger (based in Lithuania)... I'm asked this on a daily basis whenever I post about self-hosting. I've had a really great experience with Hostinger so far. With a super basic VPS plan for 5.49 Euros a month I'm hosting GoToSocial, Friendica, Pixelfed, LinkStack and Fail2Ban (for security) - with minimal resource consumption. I have an affiliate link for you from Hostinger: if you use it I will get a tiny commission (and Hostinger says you'll get a discount). It's my first time doing this - let me know how it goes.
The Future is Federated - Elena Rossini
The Future is Federated is a series of essays about the Fediverse with the goal of introducing it to people not familiar with it... and showing interoperability between projects for more advanced users. The future is already here, thanks to the magic of ActivityPub!

check out all the other articles in the series "The Future is Federated"


💓 Did you enjoy this post? Share it with a friend!
👫 Follow me on Mastodon and Pixelfed. All my other social media links are available here.
📽️ If you'd like to support my work, you could buy or rent my documentary The Illusionists on the globalization of beauty. Watch the opening on Vimeo:

Watch the first 4 minutes / teaser of The Illusionists on Vimeo

💌 If you'd like to say hi, my contact information is here
✏️ If this post resonated with you, leave a comment!