There’s more detail in this post, but this is one of a series of posts investigating the Free-as-in-Freedom social networks that are available, to see how they compare to the for-profit networks that exploit users. Each post is an overview of the system I have been and will be working with, along my general impressions.

Feel free to contribute your own findings as I go, either on the same networks or pointers to and descriptions of any networks I may have missed.


Note that I’ve added a specific socialshowdown tag to easily collect these posts, if you want to easily find the other posts in the series.

This time through, we have an entire social network designed to work without much of a data network.


A new discovery for me—only about two months ago—the twtxt network is a decentralized microblogging system that is built exclusively around accessing text files over HTTP.

You can probably figure out how most of the system works by looking at my feed, but let’s continue.

Getting Started

The first step is to install the Python package. Then run the Quickstart command.

sudo pip3 install twtxt
twtxt quickstart

Answer six questions and…that’s it. You’re ready to go, as long you’re comfortable working at the command line.

User Experience

Back in the ’90s, this would have been great, honestly. Today? It seems like it’s designed more for bots than for people. You have a few (non-administrative) commands to be issued from the terminal:

  • twtxt follow who: Follow another account.
  • twtxt following: List the accounts being followed.
  • twtxt timeline: Show posts from followed accounts.
  • twtxt tweet: Post a new message.
  • twtxt unfollow who: Unfollow an account you follow.
  • twtxt view who: Show posts from the specified account.

So, it’s not like there’s a handy app to just check on what’s happening.

Posts can apparently be formatted with something called “Porcelain,” but from experiments, it appears that this is not a markup language for posts. Instead, it’s an output format that puts each post on the timeline on a single line—you might recognize the format from git’s one-liner format—which is much less interesting, but probably extremely bot-friendly.

More to the point, experience-wise, you only see what you’re already looking for. So, for example, if you were to send me a twtxt message right now, I may never see it if I’m not following you. That’s far from ideal, obviously, since there’s no guarantee that we even know about any user who isn’t in the existing registries or if we stop checking the registries (or overlook one) before people show up.


As suggested above, you send a message with…

twtxt tweet "Hi, I'm on twtxt!"

This adds the post to your local file, twtxt.txt in your home folder by default. If you want it readable by other people, you need to copy that file somewhere accessible by an HTTP request.

For this, you’re basically on your own. I already rent this server, so I was able to copy the file to, but other people seem to use Gist and any similar repository system would probably be fine, as long as there’s an option to view the “raw” file; that becomes the link to the feed. Other than that, there are plenty of free web hosts floating around where you can probably upload a text file, though I wouldn’t necessarily trust them in the long term.

There are also “hooks” that can be added to the twtxt configuration file, to run before and/or after posting. For example, I currently use a post-tweet hook that calls a simple script that I wrote to upload my current feed to my server and then post to the registry (see below) to make sure it knows I’m still alive.

It looks like txtnish is a similar client with improved support for posting to a server, but I haven’t tried it.

Finding Other Users

There is some discoverability via registries (such as the official demo, but it took a while to figure out how to format the request (yes, even with the example) and because the security certificate has expired. What I needed for my account was…

curl -k -X POST\&nickname=jcolag

The url parameter needs to be URL-encoded and (on Linux) the ampersand needs to be escaped (\&). You can view the registry at

If users re-register at a registry (it seems like this is a rare thing, with only about a dozen users on the list, some of us multiple times due to typos), you can similarly see recent posts at, with searches also possible via the API.

As an alternative to the software registries, the We Are twtxt repository is a similar DIY announcement of users. I also see, which is a much nicer interface and quite a few users.

Mutable History

Here’s a concern for using this for serious work, though: Since every user’s outgoing feed is just a text file (timestamp and post text, delimited by a tab), there is no real permanence or data security. For example, I could plausibly create a fictional history of using twtxt in 1776, if I wanted to, even though twtxt’s initial commit wasn’t until February 2016. Or if I want to claim that I correctly predicted certain events in advance, I can manually fill those posts in after the fact; like they say, a true marksman can call his target after the shot. Similarly, if someone had access to my server, they could replace that file with anything they pleased.

So, maybe don’t rely on the network for anything official where an audit trail might be important.


I can only find direct evidence of maybe a couple dozen users, most of which haven’t been active in well over a year. The We Are twtxt lists include about sixty allegedly active users (most not active recently), about fifteen bots, and one dead feed.

Unlike Scuttlebutt, there doesn’t seem to be a whole lot of real interaction, just a few users that occasionally talk to each other but mostly just post their own updates if anything.

Even the official twtxt news account, which you have the option of subscribing to during the Quickstart process, hasn’t been updated since January 2017.

It’s sort of a ghost town, but it’s only four years old and doesn’t seem to have anybody talking about it, yet, so that makes some sense.

That said, I don’t see any bad actors and, if you run across anybody who’s a problem, unfollowing them means that they don’t exist to you and new users may never see them.

Verdict 🤷

Honestly, I don’t know. There’s a lot of potential, here, in that the network is extremely lightweight—everything is just text files grabbed over HTTP(S) or any other protocol—and that nature makes it easy to prevent bad actors from wasting anybody’s time. So, I want to like it. But without a critical mass of users creating and looking for interesting material (or just creating a community) and with an uninspiring experience, I suspect that this is fated to end up as just some old text files on servers that nobody remembers were there.

That said, I’ll at least be mirroring blog update posts, will try to get in the habit of using it for a while, and maybe try to kick out a simple desktop client that can create an experience that doesn’t require quite so much effort on the part of the user. After all, we have the registries and we have the central list so it should be possible to have software know who’s an active poster and keep them at hand. And if it collects that information, it wouldn’t be hard to show the user people trying to communicate with them.

We’ll see.

Credits: The header image is untitled letters by an unknown photographer from PxHere, made available under the CC0 1.0 Universal Public Domain Dedication.