Atomic social networks


Nowadays, social networks seem to rule the internet — from big players, who wish to own the entire world, to smaller ones, who want nothing more than to give a slightly different experience for their users. “Shadow” social networks are everywhere, forming a web of dependency loops.

Gaming, ordering food, traveling, learning, running, etc. can all include connections to friends, a feed or a gamified social experience and we're unconscious of the majority of them — companies try to bind users to their platforms through their relations to other users, through memories left in infinitely absorbing feeds, through our basic human need to socialize. This has become a crucial part of our cyborg lives.

In the following paragraphs, you'll read about my approach which indicates what a social network can / should be. Later, in the section at the bottom of the page, you can read a quick note about my twtxt setup, as this made me think about social networks at all.


Some time ago I've stumbled upon a lovely project called twtxt, but as none of my internet peers were using it, I didn't spend time on the joining process. Recently, more and more posts appeared about the project in our lovely group's Mastodon feed and I've decided to set it up (see the bottom section for details about this). Its simplicity / user experience ratio made me curious about social networking as a feature and its use-cases.

On the project's website, twtxt is described as “a decentralised, minimalist microblogging service" (understand: a distributed Twitter, in the terminal). It is a group of files following a fixed format and made accessible through HTTP. The twtxt CLI tool only edits the file that contains your feed and fetches the files of those who you follow. This is done by using URLs pointing directly to those files on some server; there's no magic involved.

Example: as I prefer using the username kodedninja on the web, you could follow me via:

$ twtxt follow kodedninja

The next time you check your timeline, the "tweets" from the file located at that URL will also be included.

Using twtxt reminded me of the times spent on Rotonde and made me think about “what is a social network?” What makes something into a social network? And how can social networking enhance the experience of a platform and not destroy it? Or more precisely: where is the divide between (for example) a social network with code sharing and collaboration capabilities and a collaborative version control tool with social networking features.

What is a social network?

In late 2017 the same group as mentioned above was active on a self-built social network called Rotonde, initiated by Devine, which worked (roughly) in a similar way as twtxt, but with a web interface and with a few more features. I see Rotonde as a great example of something I would call a complete atomic social network. I'll break this down.

Rotonde was based on the Beaker Browser and its DatArchive API — here these two are seen as the channel. By using this API, Rotonde interconnected a set of JSON files, which contained every user's feed (posts) and some meta-information, following a common format.

  "name": "neauoire",
  "desc": "It's always night under the ultraviolet sun.",
  "port": [
  "feed": [
      "message": "Oh my goodness, I located a pretty {*evil*} bug.",
      "timestamp": 1508136223906,
      "editstamp": 1508136856680
  "dat": "dat://2f21e3c122ef0f2555d3a9....b0383f998a2d37c02c042d598485/"

Example of Rotonde's portal.json

I think these are the requirements of an atomic social network. A format understood and accepted by everyone in the network (which is a requirement of becoming a member) and a channel, through which information is delivered (all users should have the same access to the channel). It's incomplete because it lacks a feature: discoverability — users can only discover the yet unknown parts of the network using external sources, so their personal network can only grow by absorbing external information. This means that in an isolated environment (an environment limited by the edges of the network) a member could never find another member — these networks cannot sustain themselves on their own. In the case of Rotonde, through other users' following list you were able to discover new members (port field in the JSON), but twtxt feeds lack of this information.

To stay on the side of truthiness and reality, we must mention that social networks are always absorbing external information, so we might say, that discoverability shouldn't be a distinctive factor. What they do is nothing more than absorbing and showing information from one user to others. But I would like to ignore thinking about content here, as that is not a building block of the network itself. The characteristics of a network are those that are present at its beginning state. So, while in reality, you can discover other users in twtxt too, through the tweets and mentions of those who you follow, this functionality is not part of twtxt itself.

Depending on the kind of the channel, social networks can be _anonymous _or onymous. In the first one, members to own an identity within the network (as a consequence, if they want, they can own more than one identities). Examples could be a public wall onto which “users” write messages, a common postbox where they leave letters or even a public computer's filesystem. As users don't have an identity, they don't have a personal network either, meaning that everyone knows the entirety of the network and there's no need for discoverability. Whether we accept this and call these networks complete or not depends on some of their characteristics, such as: is it big and diverse enough, so that the members can “live a pleased life” (they get enough information out of the network that they keep willing to be parts of it)1 and the network can sustain itself?

Similarly, onymous networks are the ones, in which members have to own an identity and this can differ from a username, to a URL or a public hash key.

Within onymous networks, there's always a chance to discover the yet unknown, and by the constant growth of the personal networks, the global network experiences change and stays alive. Both here and in the paragraph discussing anonymous networks we accept, that the network started in an empty state and that new members are joining, so it's ever-expanding.

Onymous networks emphasize (and in some cases enable) user-to-user interactions and through these, user-to-user relations, whilst anonymous ones only enable user-to-group interactions.

So, to have a complete atomic social network, we need a format, an onymous channel and a way to discover the yet unknown parts of the global network (growing our personal network). And we should stop here. Or even before that.

Social networking (as a feature) doesn't always have to be complete — in many cases discoverability is neglectable.

I believe that all other social networking features of a product that do not prioritize and strengthen these three building blocks, are weakening the social experience and only increase the friction between users, groups and even between us and our selves on the internet.

I also believe that integrating atomic social networking experiences into products would have a positive impact on how people use / relate to their digital tools (and digital life) and it would show the real potential of personal computing augmented to everyday tasks, but this should never become more important than the original purpose of the platform / tool.

There are already a few examples of projects integrating social / collaboration features into their core idea, both small and big, and I hope more and more products (and experiments) will appear in the near future. But the most important thing is to be able to keep social networking only on a feature level, and not as an identity.

Note: I like to think about physical places here, such as libraries or parks, where your main goal isn't necessarily to socialize, but it is still an action involving social interactions and meeting like-minded people or to projects like:

  • Castlemaking and playing games together 2
  • Are.naspace for collaborative research
  • Reading Supplywriting / thinking together 2
  • Werkbanksomewhere between physical and digital (maybe a physical

twtxt, DAT & Hallway — a real-time twtxt setup

The thing is: you need to host your twtxt.txt file somewhere. I didn't want to use twtxt directly on a web-server, or to use GitHub to host the file and commit every time I “tweet” something, so I asked my good friend, DAT, to come and help.

I made a fresh directory and set up a background service that seeds this via the dat CLI (I'm using pm2 to run services on my machine). Then I installed the twtxt CLI tool and used the quickstart option to set it up, and point it to a file in the newly created directory. I like the $ twtxt command, because it's handy, although many times I edit the file manually with micro.

The last thing was to add the DAT archive to the seeding list on my Hashbase instance running in a DO Droplet and voilà, I got a twtxt feed that's updated in real-time and still usable while offline.

I also use the Hallway to follow what my Merveilles friends are “tweeting” and to discover new people. If we combine all these: twtxt, DAT and The Hallway, we arrive at something very similar, but more open, to what Rotonde used to be and that, if you ask me, is a very good and unique thing that we should all care about!

1: Equivalent with: other members put enough information into the network
2: Seems like @jim is pretty good at building experiences like this

This post was cross-published from Reading Supply.