twtxt: Primitive Social Networking and unstoppable free speech platforms

Tagged: twtxt & decentralized & microblogging & social media

In exploring potential decentralized social media platforms, I recently discovered something called TWTXT: decentralised, minimalist microblogging service for hackers. That's right up this blog's alley! But how is twtxt even pronounced? I say "twi-text", and think of the protocol like an extremely reduced (minimalism!) Twitter implemented as textfiles (nostalgia!). And being a simple textfile is key. There's really no need for a server to process requests beyond serving static files. This does mean it's not a full featured social network though, and probably never can be.

There are many other microblogging platforms out there, Twitter (or maybe Weibo for the firewalled Chinese readers) is the obvious example. Twtxt is more micro than any of them. It's almost serverless (not Amazon's definition of serverless), needing no compute server to handle API calls (unlike WordPress or Drupal sites, for example). It's much more akin to a feed format like RSS/Atom, feed because new entries are simply appended to the end. You can post updates (tweet) by editing and appending to a plain text file, by hand, or via a simple client. You can follow others by adding their twtxt urls to your own config file (~/.config/twtxt/config). Thus there's no real bi-directional follower graphs. It's not possible to see when you're being followed or by whom, and there's also no way to block people. This is like adding an rss feed to your blog reader rather than creating a follow request in Mastodon or Twitter. But it's also really hard for Reply Guy to show up in your mentions because you have to subscribe to them first.

What it's not...

No, this is not a protocol like ActivityPub to connect identities on disparate servers into a larger communications network. Nor is it a protocol like Secure Scuttlebutt for handling the access control over shared data as well providing a serverless method of transmitting that data. Twtxt relies on existing protocols like simple HTTP but without any kind of authentication or identity, no sessions nor cookies. There are proposals to have a form of identity by putting it in the client's User Agent string which a twtxt server would then need to look for, parse, and save somewhere. We can see that this small feature alone breaks the otherwise server/compute-less paradigm of twtxt. Trying to shoehorn in other features like follow-verification or request, would also not be possible without then requiring a server. This goes for "mentions" (see Webmentions).

In its current primitive implementation it's completely possible to use with just vim or another awesome text editor, like vi. But, as a syntactic sugar, there is a command line client (twtxt) written in python which makes it easier to follow people, view a timeline of your followers' activities, and add your own tweets. The protocol is so dead simple that many people have implemented it in their favorite language and you can find many of them on GitHub.

The low-tech nature of it makes it possibly work together with archaic protocols like gopher or attempts to modernize it like gemini. But almost everyone is using it with regular old http. Very few people are using twtxt, and very few people are using gopher or gemini, and the intersection of these two tiny sets is vanishingly small but finite.

Most of us aren't used to running our own social networks. To run your twtxt account you'll need, at a minimum, a way to edit a text file, and a place to host the text file online. If you have some web space and a computer (or phone?) then you're covered. But you can also get GitHub to provide this all for you for free!

*Note: I get that GitHub is owned by Microsoft and morally encumbered for other reasons but this is free hosting for playing around.

  1. Get yourself a free GitHub account. There's no ref link.
  2. Create a repository to be your home page (it'll be like .github.io).
  3. Set it up as your GitHub Pages.
  4. Create a file in the repo called twtxt.txt (alternatively, put in in a subdirectory, use a different filename if you want).
  5. Add your first tweet as a line in the file (you can use the web editor in github.com) with text like: 2020-07-20T13:37:00+07:00 hello world

Now anyone can follow your account at .github.io/twtxt.txt. I put mine in a subdirectory and you can see it and follow it here: https://tomosaigon.github.io/twtxt/twtxt.txt

This demonstrates how simple and minimal twtxt is. You didn't need to get api keys, didn't need to sign up with a telephone number to get access to api keys, didn't need to prove your real name, didn't have to read any api docs, and didn't have to get an app from the Google/Apple app store in order to use this, and nobody could flag or delete your content or have your account banned. There's no moderator to complain to. No Twitter internal employee tools which a hacker could compromise to take over your account.

As long as you can place a text file online somewhere (like IPFS), you are now unstoppable. GitHub hosting isn't unstoppable but you aren't dependent on any one web host and indeed you could replicate your file across multiple hosts. So I created another host for a twtxt account for this blog at http://twtxt.saigonist.com/twtxt.txt. You can say what you want, and read what others want to say, and neither can force the other to do anything nor can they prevent it. This is all you need for a "free speech" microblogging platform and there's really nothing very special about creating such free speech platforms.

Quick start using other people's hosts

Alternatively, you can dive right in via a centralized web interface running on twtxt.xyz where you can preview peoples' timelines, and even create an account which will be hosted there (you can login via your GitHub account), and you won't need to set anything up. But the point of this is to have a decentralized microblogging network so we should resist the urge to centralize.


P.S. It's twtxt not twttxt or twxt.