Skip to main content

twtxt: Simple, Decentralized Microblogging with status.lol

Like the rest of the full omg.lol suite, I love status.lol. It's become my go-to place for quick thoughts, updates, and micro-posts around once a day. And there's also an easy-to-use API that I've used before. So, what if they could be part of the broader decentralized web?

That's when I decided to set up a twtxt feed that automatically syncs with my status.lol updates.

Now, before I begin getting into the technical details, you might be asking what twtxt even is in the first place? Good question. twtxt is a decentralised, minimalist microblogging service for hackers.

From their GitHub README:

So you want to get some thoughts out on the internet in a convenient and slick way while also following the gibberish of others? Instead of signing up at a closed and/or regulated microblogging platform, getting your status updates out with twtxt is as easy as putting them in a publicly accessible text file. The URL pointing to this file is your identity, your account. twtxt then tracks these text files, like a feedreader, and builds your unique timeline out of them, depending on which files you track. The format is simple, human readable, and integrates well with UNIX command line utilities.

tl;dr: twtxt is a CLI tool, as well as a format specification for self-hosted flat file based microblogging.

Syncing

Now, I post once on status.lol, and it automatically appears on social.lol where my IndieWeb friends follow me, my site, and twtxt.txt.

No extra work! There is no pesky cross-posting (the way I still cross-post with Buffer on other microblogging platforms, but that's something for another day).

Here is the process: at build time, Eleventy fetches my latest status updates from the omg.lol API and transforms each status from JSON to twtxt format. The timestamps are converted to ISO 8601 MST timezone, and the emoji and content are combined into a single message. All of this is then generated into the final /twtxt.txt file.

// In .eleventy.js
eleventyConfig.addGlobalData("statuslog", async () => {
  let json = await EleventyFetch(
    "https://api.omg.lol/address/brennan/statuses/",
    { duration: "1h", type: "json" }
  );
  
  return json.response.statuses.map(status => ({
    timestamp: new Date(parseInt(status.created) * 1000)
      .toISOString().replace(/\.\d{3}Z$/, '-07:00'),
    content: `${status.emoji || ''} ${status.content}`.trim(),
    created: status.created
  })).sort((a, b) => b.created - a.created);
});

Why?

The same reason why I do anything, to try to take over the world! to ensure my status updates, like the rest of my work, are not trapped in a singular digital ecosystem. They're plain text on my own domain and accessible to any client that can read a URL. People can follow me wherever they're most comfortable: Mastodon, twtxt clients, or RSS readers. I set the cache to last a day to try to make sure API calls are minimal.

The convenience of modern tools with the permanence and openness of classic protocols!

twtxt.txt Template

---
permalink: /twtxt.txt
eleventyExcludeFromCollections: true
---
# nick = brennan
# url = https://brennan.day/twtxt.txt
# avatar = https://brennan.day/assets/images/brennan.jpg
# description = Queer Métis author and FOSS web developer from Treaty 7 territory

{%- for status in statuslog %}
{{ status.timestamp }}	{{ status.content }}
{%- endfor %}

That's it. A header with metadata, then a loop through statuses. The TAB character between timestamp and content is what makes it valid twtxt format.

Now, when I post "🚧 Testing twtxt setup" on status.lol, it automatically appears in my twtxt feed as:

2026-01-21T10:30:00-07:00	🚧 Testing twtxt setup

Anyone can follow my feed by adding https://brennan.day/twtxt.txt to their twtxt client. No registration, no API keys, no JavaScript.

The IndieWeb Promise

This is what the IndieWeb is all about. Owning your content while still participating in broader communities. Having your cake and eating it too!

The setup took maybe an hour, and ensures my thoughts live on my own domain, in my own format, accessible to anyone who wants to read them.

Decentralized systems have a bad reputation of being confusing and overcomplicated, but the truth is that they usually operate on simple principles: respect your autonomy while connecting you to others.


Want to follow my twtxt feed? Add https://brennan.day/twtxt.txt to your client, or read it directly.

Interested in the technical details? Check out the twtxt protocol documentation and omg.lol API.


Webmentions

No webmentions yet. Be the first to send one!


Related Posts


Comments

To comment, please sign in with your website:

No comments yet. Be the first to share your thoughts!

↑ TOP