Texudus
Texudus is a decentralized social network that runs on a plain text file over HTTP.
For example, you can create a file called texudus.txt with the following content:
# nick = Bob
# link = Website https://my-awesome-website.com
# avatar = https://my-awesome-website.com/avatar.jpg
# description = I'm a software developer and I love open source.
2024-12-12T12:00:00+01:00 Hello world! This is my first post on Texudus.
2025-02-03T23:05:00+01:00 Welcome to Texudus @<foo http://foo.org/texudus.txt>!
2025-02-07T16:00:00+01:00 #<2025-02-03T23:05:00+01:00> I forget to ask. Do you need help with Texudus @<foo http://foo.org/texudus.txt>?
2025-02-08T12:00:00+01:00 #<2025-01-21T05:05:00+01:00 http://boo.com/texudus.txt> I agree with you!
Then you can upload the file to a web server and share the URL with your friends.
You can publish posts, make replies, mention other users, send direct messages, make pulls or personalize your profile. All this without registration, without databases... Just you and your text file.
Texudus is heavily inspired by twtxt and the extensions developed by the Yarn community. It takes the best of both specifications, eliminates complex parts, and keeps the premise that social networking should be simple, accessible to both humans and machines, and manageable with UNIX command-line tools.
The values are:
- Simplicity: The specification is simple and easy to understand.
- Accessibility: The feed can be read by humans and machines.
- Decentralization: You are a node in the network.. The feed is hosted on a web server and can be accessed by anyone.
- Unix Philosophy: The feed is a plain text file that can be managed with UNIX command-line tools. You can use
curl,wget,cat,grep,sed, and any other tool you like to manage your feed.
Quickstart
1. Create a text file called texudus.txt
$ touch ~/texudus.txt
2. Edit the file and add your nickname
# nick = YourNick
3. Add your first post
The format is: [ISO_TIMESTAMP]\t[MESSAGE]. Each new post must be added to the end of the file.
You can use any text editor you like. For example, you can use vscode, vim, or emacs. Or a simple unix command:
echo -e "$(date -Im)\tHello world! This is my first post on Texudus." >> texudus.txt
The result will be:
# nick = YourNick
2025-04-28T12:00:00+01:00 Hello world! This is my first post on Texudus.
The datetime is the identifier of each post. It must be in ISO 8601 format. The time zone, +01:00, isn't optional.
The file must be encoded with UTF-8 and must use LF (\n) as line separators.
4. Upload the file to a web server.
You can use any web server, but make sure it supports plain text files. You can use GitHub Pages, Gitea, or any other service that allows you to host plain text files.
To consume and read other users' feeds, you can read them manually, use a script, or a client.
Comments
Every line that starts with a hash sign (#) is considered a comment. The comment ends at the end of the line.
# this is a comment
### # this one too
Mentions
Texudus allows you to mention other users in your posts. To do this, you can use the @ symbol followed by the user's nickname and the URL of their feed.
The format is: @<[nick] [url]>.
2025-05-01T12:00:00+01:00 @<Bob http://example.org/texudus.txt> welcome to Texudus!
You can mention users anywhere in the publication, or mention several people.
2025-05-01T12:00:00+01:00 Good morning @<Bob http://example.org/texudus.txt> @<Alice http://example.org/texudus.txt>! What are you doing today?
Replies and Threads
It is similar to mentioning, but you need to add the datetime of the post you are replying to. This is useful for creating conversations or discussions.
The format is: #<[timestamp] [url]> [post]. The URL is optional.
2025-05-01T12:00:00+01:00 #<2025-04-28T12:00:00+01:00 http://example.org/texudus.txt> I agree with you!
In case you want to replicate your own publication, leave only the datetime, without nick or url: #<[timestamp]>.
2025-05-01T12:00:00+01:00 #<2025-04-28T12:00:00+01:00> It is a good idea!
Multiline Posts
Since the Texudus file format requires that each post ends with a \n (newline) character, posts cannot contain any newline characters. To allow for multiline posts, the \u2028 Unicode character is used to indicate a line break. This allows for multiline posts without breaking the file format.
2025-05-01T12:00:00+01:00 Hello world!\u2028This is a multiline post.
Follow
You can follow other users by adding their feed URL to your feed. The format is: # follow = [nick] [url].
# follow = Bob http://example.org/texudus.txt
# follow = Alice http://example.org/texudus.txt
To read new posts, you will need a script or client that builds a timeline.
Metadata
Global
The global metadata is used to provide information about the feed. It is optional, but it can be useful for clients to display additional information about the feed.
However, if the line has the format # [field] = [value], it is considered a metadata field. The metadata fields are used to provide information about the feed and the author. The metadata fields are optional, but they can be useful for clients to display additional information about the feed.
# nick = Bob
# url = https://example.com/texudus.txt
# url = https://backup.example.com/texudus.txt
# avatar = https://example.com/avatar.jpg
# description = I'm a software developer and I love open source.
# emoji = 😀
# follow = jane https://jane.com/texudus.txt
# follow = lucy https://lucy.com/texudus.txt
# contact = mailto:my-email@example.com
# contact = xmpp://my@account.com
# contact = https://mastodon.social/@my-account
# public_key = 1234567890
# dm_url = https://example.com/dm.txt
| Field | Description | Multiple |
|---|---|---|
nick |
The nickname of the user. This is the name that will be displayed in posts. You cannot use spaces (e.g., Mega Bob is invalid). |
No |
url |
The URL of the feed. This is the URL that will be used to fetch the feed. You can specify multiple URLs, but only one will be used. | Yes |
avatar |
The URL of the avatar. This is the URL that will be used to display the avatar. | Yes |
description |
A short description of the user. This will be displayed in the profile. | No |
emoji |
An emoji representing the user. This will be displayed in the profile. | No |
follow |
A list of users to follow. This is the URL that will be used to fetch their feeds. You can specify multiple URLs. | Yes |
contact |
A list of contact information: Email, XMPP, Matrix, ActivityPub, etc. | Yes |
public_key |
The public key of the user. This is used for encryption and signing. | No |
dm_url |
The URL of the direct messages. This is the URL that will be used to fetch the direct messages. | No |
Post
The post metadata is used to provide information about the post. Too is optional.
The format is: {[key]=[value], ...}.
2025-05-01T12:00:00+01:00 {lang=en} Hello world! This is my first post on Texudus.
2025-05-01T12:00:00+01:00 {content_warning=spoiler} This is a spoiler!
2025-05-01T12:00:00+01:00 {client=texudus.el,version=1.0} This is a post from Texudus.el.
There aren't any restrictions on the keys or values. You can use any key or value you like. The only restriction is that the key must be a string and the value must be a string. Be creative!
Poll
Texudus allows you to create polls. The format is: ?<[question] | [option1] | [option2] ...>.
2025-05-01T12:00:00+01:00 ?<What is your favorite programming language? | Python | JavaScript | PHP | Emacs Lisp>
And you can vote to the poll with the option you choose. The format is: !<option timestamp url>. The URL is optional.
2025-05-01T12:00:00+01:00 !<1 2025-05-01T12:00:00+01:00 http://example.org/texudus.txt> I choose Python!
The option is the index of the option you choose, starting from 1. Python is option 1, JavaScript is option 2, and so on. You can vote as many times as you want, but only the last vote will be taken into poll.
You can without the URL when you are voting to your own poll.
2025-05-01T12:00:00+01:00 !<4 2025-05-01T12:00:00+01:00> I like Emacs Lisp too!
You can set a date for the end of poll. The format is: ?<[question] | [option1] | [option2] = [date]>.
2025-05-01T12:00:00+01:00 ?<Do you like Texudus? | Yes | No = 2025-05-03T12:00:00+01:00>
This poll will end on 2025-05-03T12:00:00+01:00. You can vote as many times as you want, but only the last vote before the end date will be taken into poll.
Direct Messages
You can send encrypts direct messages to other users. Check direct message for more information.
Discoverability
Because of the decentralised nature it is very difficult to discover new users. You have to think of it as a technology similar to an email or RSS feed. The natural flow to find new address, or urls or nodes, is because you have been given the address or because you have seen a link on a website. Texudus is the same. You have to share your address with your friends or on social media.
To take your first steps you can start interacting with a list of people who have been adding their feed to the Texudus feeds repository. You can also use the Texudus IRC channel to find new users.
FAQ
Can I use it as a simple substitute for RSS/Atom?
Yes, check this example:
# nick = Bob_feed
# url = https://blog.example.com/texudus.txt
# avatar = https://blog.example.com/avatar.jpg
# description = This is my feed.
2025-05-01T12:00:00+01:00 {title=My awesome title,lang=en,category=programming} This is my awesome article!
If you don't want to include content, add the metadata url.
2025-05-01T12:00:00+01:00 {title=My awesome title,url=https://blog.example.com/my-awesome-article,lang=en,category=programming}
You can find an example in my personal feed.
Can I use Markdown format?
Officially, no. Texudus uses a plain text format. You can use it, of course, but many people or clients will not be able to understand it. However, you can use Unicode characters or emojis.
Is there pagination?
Yes. You can use the header Content-Range with Content-Length to paginate the feed. I invite you to investigate the HTTP Range Requests documentation.
What is the best way to host my feed?
You can use any web server that supports plain text files. You can use GitHub Pages, Gitea, or any other service that allows you to host plain text files. You can also use a self-hosted solution like Nginx or Apache.
Can I use hashtags?
Yes, of course! You can use hashtags in your posts. Just add a # before the word. For example: Hi Texudus! #texudus #socialnetwork.
Can I add files like images or videos?
You can add images or videos by using the URL of the image or video. Just add the URL in your post.
2025-05-01T12:00:00+01:00 I travelled to Spain! https://example.com/static/me-in-spain.jpg
Check the header Content-Type to see if the file is an image or video.
Another option is to use metadata post.
2025-05-01T12:00:00+01:00 {image=https://example.com/static/me-in-spain.jpg} I travelled to Spain!
How often do I need to check the followes' feeds?
It depends on how you use it. Check the header Last-Modified to see if the feed has changed. If the feed has changed, you can fetch the new feed.
Can I modify a post after I publish it or delete it?
Yes, you can modify or delete a post after you publish it. Just edit the file and upload it again keeping the orignial timestamp unchange. (Otherwise you are making a new post and will break replies to your post). Clients will fetch the new file and update your profile.
Can I make a Texudus client in my favorite programming language?
I have been told it is impossible. But maybe you can prove me wrong.
Community
Texudus IRC channel: #texudus on irc.libera.chat
Repositories
- Publish your Texudus feed. It's optional but help you to be discoverable: https://codeberg.org/Texudus/feeds
- Issues: https://codeberg.org/Texudus/website/issues
Icon
You have two options to use the Texudus icon:
- Image: Original