It looks like I’m moving to Mastodon
5th November 2022
Elon Musk laid off about half of Twitter this morning. There are many terrible stories emerging about how this went down, but one that particularly struck me was that he laid off the entire accessibility team. For me this feels like a microcosm of the whole situation. Twitter’s priorities are no longer even remotely aligned with my own.
I’ve been using Twitter since November 2006—wow, that’s 16 years! I’ve accumulated 42,804 followers there. It’s been really good to me, and I’ve invested a lot of work generating content there to feed the machine.
I can’t see myself putting the same work in to help the world’s (current) richest man pay the billion dollar annual interest on the loans he took out to buy the place on a weird narcissistic whim.
So I’ve started to explore Mastodon—and so far it’s exceeding all of my expectations.
My new profile is at https://fedi.simonwillison.net/@simon—you can follow @simon@simonwillison.net
in your Mastodon client of choice.
Not ready to sign up for Mastodon? It turns out RSS support is baked in too—you can subscribe to https://fedi.simonwillison.net/@simon.rss in your feed reader (I really like NetNewsWire for macOS and iOS these days).
Why Mastodon?
The lesson I have learned from Twitter is that, even if a service you trust makes it past an IPO and becomes a public company, there’s always a risk that it can be bought by someone who very much doesn’t share your values.
Mastodon has been designed to avoid this from the start. It operates as a federated network of independent servers, each of which is run by a different person or organization with the ability to set their own rules and standards.
You can also host your own instance on your own domain.
My initial nudge to try this out was from Jacob and Andrew, who figured out how to do exactly that:
- The Fediverse, And Custom Domains—Andrew Godwin
- Setting up a personal Fediverse ID / Mastodon instance—Jacob Kaplan-Moss
Andrew and Jacob both opted to pay masto.host to run their instance for them. I’ve decided to do the same. It’s on my domain, which means if I ever want to run it myself I can do so without any visible disruption.
I’m paying $9/month. I find it darkly amusing that this is a dollar more than Elon has been planning to charge for users to keep their verified status on Twitter!
If you don’t want to use your own domain there are plenty of good free options, though I recommend reading Ash Furrow’s post about his shutdown of mastodon.technology to help understand how much of a commitment it is for the admins who run a free instance.
This post by @klillington@mastodon.ie
has some good links for getting started understanding the system. I particularly enjoyed Nikodemus’ Guide to Mastodon as it matched most closely the questions I had at first.
Initial impressions
Despite taking the second hardest route to joining Mastodon (the hardest route is spinning up a new server from scratch) it took me just less than an hour to get started. I wrote up a TIL describing what I did—more or less directly following the steps described by Andrew and Jacob.
I signed into my new account and started following people, by pasting in their full Mastodon names (mine is @simon@simonwillison.net
). I was initially surprised that this did nothing: your timeline won’t be populated until the people you follow have said something.
And then people started to toot, and my timeline slowly kicked into life.
And it was really, really pleasant.
My fear was that everyone on Mastodon would spend all of their time talking about Mastodon—especially given the current news. And sure, there’s some of that. (I’m obviously guilty here.)
But there’s lots of stuff that isn’t that. The 500 character limit gives people a bit more space, and replies work much like they do on Twitter. I followed a bunch of people, replied to a few things, posted some pelican photos and it all worked pretty much exactly as I hoped it would.
It’s also attracting very much the kind of people I want to hang out with. Mastodon is, unsurprisingly, entirely populated by nerds. But the variety of nerds is highly pleasing to me.
I’ve been checking in on the #introduction
hashtag and I’m seeing artists, academics, writers, historians. It’s not just programmers. The variety of interest areas on Twitter is the thing I’ll miss most about it, so seeing that start to become true on Mastodon too is a huge relief.
Considering how complicated a federated network is, the fact that it’s this smooth to use is really impressive. It helps that they’ve had six years to iron out the wrinkles—the network seems to be coping with the massive influx of new users over the past few days really well.
I’m also appreciating how much thought has been put into the design of the system. Quote tweeting isn’t supported, for reasons explained by Eugen Rochko in this 2018 post:
Another feature that has been requested almost since the start, and which I keep rejecting is quoting messages. Coming back to my disclaimer, of course it’s impossible to prevent people from sharing screenshots or linking to public resources, but quoting messages is immediately actionable. It makes it a lot easier for people to immediately engage with the quoted content… and it usually doesn’t lead to anything good. When people use quotes to reply to other people, conversations become performative power plays. “Heed, my followers, how I dunk on this fool!” When you use the reply function, your message is broadcast only to people who happen to follow you both. It means one person’s follower count doesn’t play a massive role in the conversation. A quote, on the other hand, very often invites the followers to join in on the conversation, and whoever has got more of them ends up having the upper hand and massively stressing out the other person.
Mastodon so far feels much more chilled out than Twitter. I get the impression this is by design. When there’s no profit motive to “maximize engagement” you can design features to optimize for a different set of goals.
And there’s an API
Unsurprisingly, Mastodon has a powerful API. It’s necessary for the system itself to work—those toots aren’t going to federate themselves!
Poking around with it is really fun.
First, a friendly note. @pamela@bsd.network wrote the following:
Hacky folks, please resist finding ways to scrape the fediverse, build archives, automate tools and connect to people via bot without their consent.
[...]
Whatever your thing is, make it 100% opt-in. Make it appropriate for a significantly more at-risk user than you are. Make sure it forgets things, purges info about servers it can’t contact, can’t operate in any sort of logged-in mode where consent is an issue.
We will straight up help advertise your cool thing if it respects users properly and takes the time to consider the safety and preferences of every person involved. There are a lot of fun, thoughtfully-designed toys! And there are a lot of people really tired of having to come and tell you off when you wanted to help, honestly. Help yourself and ask around before you flip on your cool new thing, let folks point out what you’re missing.
(Read the whole thing, it’s great.)
So far I’ve done a couple of things.
I built a Git scraper to track the list of peer instances that various servers have picked up. This feels like a reasonable piece of public information to track, and it’s a fun way to get a feel for how the network is growing.
I also figured out how to Export a Mastodon timeline to SQLite using the timelines API and my paginate-json and sqlite-utils CLI tools, so I could explore it in Datasette.
Running my own instance means I have no ethical qualms at all about hammering away at my own API endpoint as fast as I like!
I like to follow a lot of different people, and I don’t like to feel committed to reading everything that crosses my timeline—so I expect that the feature I’ll miss most from Twitter will be the algorithmic timeline! This is very much not in the spirit of Mastodon, which is firmly committed to a reverse chronological sort order.
But with access to the raw data I can start experimenting with alternative timeline solutions myself.
I’m somewhat intrigued by the idea of iterating on my own algorithmic timeline, to try and keep the variety of content high while hopefully ensuring I’m most likely to catch the highlights (whatever that means.)
Past experience building recommendation systems has taught me that one of the smartest seeming things you can do is pick the top 100 most interesting looking things based on very loose criteria and then apply random.shuffle()
to produce a final feed!
I have a hunch that this is going to be a lot of fun.
More recent articles
- Qwen2.5-Coder-32B is an LLM that can code well that runs on my Mac - 12th November 2024
- Visualizing local election results with Datasette, Observable and MapLibre GL - 9th November 2024
- Project: VERDAD - tracking misinformation in radio broadcasts using Gemini 1.5 - 7th November 2024