Now I need the non-hacker friends 🥲
Now I need the non-hacker friends 🥲
> Twtxt was made for nerds, by nerds.
I'd like to change that. It's by nerds/hackers, for nerds/hackers and friends of these. It doesn't have to be hacky all the time, as you don't need to be a nerd to have a blog.
But, for that to happen, someone has to build the tools to improve UX.
> by design there really is no way to easily discovers others
Yeah, I agree, and although there are directories of email addresses, usually you don't want that, unless you are a 'public figure'.
I couldn't say that a microblogging is a "social network" by default, as a blog is not either. At the same time, people would expect to find new people and conversations, as you'd do in a forum.
I think of two features on top of the current spec:
- Clients showing a few posts of what your following are watching but you don't, so perhaps you find something interesting to follow next. Or that feature of "Your 'followings' are following these accounts/people". (Hard to explain in english, but I hope you get the idea)
- Sharing your .txt into some directory, saying "Hey, I have this twtxt URL, I want to be discovered". I'm thinking of something like the Federated tab on Mastodon.
> instead of adding the new twt at the end of the feed, do it at the beginning
The PHP client did that originally, although I didn't see a real benefit if you use... a client.
It could help if you read the .txt file through a browser or something. Also, not many clients are prepared to cut the request, and you can't rely on the file being organized that way, so finally we dropped that feature.
About 1, well, I think anyone has an email address and only about 5% use a Feed, so it makes sense to offer what most people use 🤔
A Sneaky Phish Just Grabbed my Mailchimp Mailing List
https://www.troyhunt.com/a-sneaky-phish-just-grabbed-my-mailchimp-mailing-list/
Joking aside, let's see how it works in the wild!
Is it working now?
I'd say again that perhaps the DMs could be stored in another .txt, but anyway I'd like to try it.
i18n-puzzles.com has been a blast, but I don't like having to think about puzzles on weekends. Like with exercise, doing it every day without rest doesn't sound healthy.
I'd rater have a weekly challenge, at most three.
I knew of twtxt in Gemini Antenna, so at least the 2017 spec might work on that protocol. I think the main issue with extensions is that they weren't designed with many URLs and protocols in mind.
Also I have to admit that the Gemini community significantly reduced in the last few years. I don't know how worth it is to add support for Gemini now.
https://eapl.me/rfc0001/
Help me to play with it a bit and report any vulnerability or bug. Also any idea is welcome.
Also, could you elaborate on how you envision migrating with a script? You mean that the client of the file owner could massively update URLs in old twts ?
https://docs.google.com/spreadsheets/d/1KOUqJ2rNl_jZ4KBVTsR-4QmG1zAdKNo7QXJS1uogQVo/edit?gid=0#gid=0
Feel free to propose another collaborative platform (for those without a G account), and also share your comments and analysis in the spreadsheet or in Gitea.
https://i18n-puzzles.com
At the moment of building the engine there weren't many Gemini URLs supporting twtxt 1.1 (with twtxt.dev extensions).
Also User-Agent won't work there, and many Gemini URLs are a mirror of the HTTP one, so I think is not strictly necessary.
my 2c
And of course it's about being part of a niche community which is (mostly) amazing, and nurturing. As there is almost no one writing in my native spanish, it has been an interesting challenge to share my thoughts in english, as well.
I couldn't say it's a 'social network' per se, I think it lack many engagement things usually associated with social networks, although it has a social part of igniting discussions, learnings and behavioral changes, which is the meaning of social for me.
"This will be managed by Registries." Are we talking about these registries?
https://twtxt.readthedocs.io/en/latest/user/registry.html
I worked for a german company and they gave away these calendars to our clients and team every year, but the model you can hang on the wall. Memory unlocked!
I can't find something similar here, but my wife gave this one last year, and I've been using it a bit. I'd say it's useful as you've shared.

We also have a shared calendar in the kitchen for family events, and it's working great.
blog
comes from weblog, and microblogging could derivate from 'smaller weblog'. https://www.wikiwand.com/en/articles/MicrobloggingI'd differentiate it from sharing status updates as it was done with 'finger' or even a BBS. For example, being able to reply; create new threads and sharing them on a URL is something we could expect from 'Twitter', the most popular microbloging model (citation needed)
I like to discuss it, since conversations usually are improved if we sync on what we understand for the same words.
My first thought takes me to something like
secure-scuttlebutt
which it's painful to sync data using clients, and too slow compared to downloading a text file.Also I'd like for twtxt to avoid becoming an ActivityPub. Works well but it's uses too many resources IMO.
https://kingant.net/2025/02/mastodon-the-cost-of-running-my-own-server/
I'm defending being able to self-host your Web client (like you'd do with a Wordpress, twtxt is a micrologging, at the end), instead of federated instances, so in a first thought I'd say Registries have many disadvantages being the first one that someone has to maintain them active.
nanoblogging
would be a simple text (like the original twtxt spec, aimed for TUIs), and microblogging
(like Twitter was a few years ago), would be about sharing texts, images, videos, GIFs, links, and perhaps Markdown styling.Why? You have shorter messages than in a blog, but you may add almost anything you could do in a blog.
Buuut... who knows?
It remind me a bit of the Conclave movie where every part wanted to defend their vision and there is only a winner. If one wins the other loses. Like the political side of many leaders and volunteers representing a broad community. I don't think that's the case here. Most of us (in not all) should 'win'.
I can only add that isn't nice to listen that 'my idea and effort' is not what the rest of the people expect. I personally have a kind of issue with public rejection, but I also like to argue, discuss and even fight a bit. "A gem cannot be polished without friction, nor a man perfected without trials," they say.
This exercise and belonging to this community also brings me good feelings of smart people trying to solve a human and technical problem, which is insanely difficult to get 'right'.
I genuinely hope we can understand each other, and even with our different and respectful thoughts on the same thing, we might reach an agreement on what's the best for most people.
Good vibes to everyone!
Una opinión pragmática es que hay la libertad de no pagar, pero también esto nos debería llevar a que tenemos la libertad de SÍ reconocer los proyectos que nos dan valor, por medio de un donativo puntual o constante. Adaptarnos al contexto de lo que estamos ofreciendo.
Mi chava trabaja en Asociaciones Civiles (tipo OSALs/ONGs) y es un reto pedir donativos, por lo que es común pedir 'Cuotas de recuperación' pues ayudan a valorar más el servicio, y a que fluya el donativo. Creo que se puede hacer algo así en el código libre, apelando a diferentes motivadores en los usuarios.
From that PR #17 I think it was reverted? We could discuss about metadata later this month, as it seems that I'm the only person using it.
I've added a
[lang=en]
to this twt to see current yarn behaviour.
I've drafted a Request for Comments (RFC) to improve how threads work in twtxt:
https://git.mills.io/yarnsocial/twtxt.dev/issues/18
I’d love your feedback! Please share your thoughts on anything that could be better explained, check if the proposed dates work for everyone, and I invite you to join the discussion...
What about discussing it in https://git.mills.io/yarnsocial/twtxt.dev ?
The only con I see is that everyone would need to create an account there to participate.
The editing process needs a lot of consideration and compromises.
From one side, editing and deleting it's necessary IMO. People will do it anyway, and personally I like to edit my texts, so I'd put some effort on make it work.
Should we keep a history of edits? Should we hash every edit to avoid abuse? Should we mark internally a twt as deleted, but keeping the replies?
I think that's part of a more complete 'thread' extension, although I'd say it's worth to agree on something reflecting the real usage in the wild, along with what people usually do on other platforms.
About alice's hash, using SHA256, I get
96473b4f
or 96473B4F
for the last 8 characters. I'll add it as an implementation example.The idea of including it besides the follow URL is to avoid calculating it every time we load the file (assuming the client did that correctly), and helps to track replies across the file with a simple search.
Also, watching your example I'm thinking now that instead of
{url=96473B4F,id=1}
which is ambiguous of which URL we are referring to, it could be something like:{reply_to=[URL_HASH]_[TWT_ID]}
/ {reply_to=96473B4F_1}
That way, the 'full twt ID' could be
96473B4F_1
.
As in https://eapl.me/timeline/post/s7gv6zq
I changed my URL to experiment on this exact situation, and deleted the symlink on my server, so now tw.txt is the only way to get the file, although I could bring it back, what does everyone say?
About the idea of improving the "thread" extension, what if we set aside March 2025 to gather proposals and thoughts from everyone? We could then vote on them at the end of the month to see if the change and migration are worth it.
The voting could include client maintainers (and maybe even users too). That way, we get a good mix of perspectives before taking a decision in a decent timelapse.
What do you think? If this sounds good, we can start agreeing on this. Let me know your thoughts!
#<Alice https://example.com/twtxt.com#2024-12-18T14:18:26+01:00>
Hashes are not a problem on PHP, I dont know why it's slow to calculate them from your side, but I agree with your points.
BTW, did you have the chance to read my proposal on twtxt 2.0? I shared a few ideas about possible improvements to discuss:
https://text.eapl.mx/a-few-ideas-for-a-next-twtxt-version
https://text.eapl.mx/reply-to-lyse-about-twtxt
description = 🏗 Full-Stack developer (Mainly Python) ✍ Writer[...]
.txt
file:description = ðŸ—
Perhaps your nginx server is missing a
Content-Type: text/html; charset=utf-8
header?https://serverfault.com/a/975289
In
timeline
it looks OK however, I think it's relying on> The file must be encoded with UTF-8
of the original spec:
https://twtxt.readthedocs.io/en/latest/user/twtxtfile.html
http(s)://domain.tls
is not a valid resource, but http(s)://domain.tls/
is, as you can see here: https://stackoverflow.com/a/2581423I suppose that internally the wget/curl or whatever client you are using is redirecting it?

The encryption part seems to work, if I decrypt it the message with OpenSSL.
I think it can help you for some key parts not well explained in OpenSSL documentation.
@andros reading your spec I wrote a few notes here: https://github.com/eapl-gemugami/twtxt-direct-message-php/blob/main/direct_message_spec.md
@arne I haven't check your repo yet, although you are using sodium, right?
I want to compare that I can read the encrypted message both from OpenSSL CLI and from the PHP OpenSSL library, following the spec.
# https://www.php.net/manual/en/function.openssl-pbkdf2.php
$password = $sharedKey;
$salt = openssl_random_pseudo_bytes(16); # What's the salt length ?
$keyLength = 20; # What's the key length here ?
$iterations = 100000;
$generatedKey = openssl_pbkdf2($password, $salt, $keyLength, $iterations, 'sha256');
echo bin2hex($generatedKey)."\n";
echo base64_encode($generatedKey)."\n";
$iv = openssl_random_pseudo_bytes(16); // AES-256-CBC requires 16-byte IV
$cipherText = openssl_encrypt($message, 'aes-256-cbc', $generatedKey, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $cipherText);
I was amazed experimenting with different combinations, for instance instead of 100, using 60 for a minute, 90 for 1:30, and stupid stuff like heating with 11, 22, 55 seconds and so, to make it quicker to type any time.
Although I like it more "twt", without the dot and with a t at the end
twtxt
, the microblogging for hackers and friends...> The biggest challenge of ActivityPub is that it's too technical to easily explain to regular people. Nobody is interested in a jargon-laden diatribe about servers and federation. When simple questions have overly complex answers, people tend to switch off.
https://activitypub.ghost.org/your-thoughts-on-onboarding/
For example here: gemini://text.eapl.mx/en-making-a-tic-tac-toe-variant and there https://text.eapl.mx/en-making-a-tic-tac-toe-variant
I agree that some topics require images to make it easier to explain.
You can type 3 and 0 for 30 seconds, 100 for a minute (shown as 1:00), or 200 for two minutes (2:00).
What would happen if you type 777 and Start?
A) Nothing
B) Self-destruction
C) Will run for 7 minutes and 77 seconds (boring!)
What about 7777 ?
Is it more an API (more oriented to developers), more oriented to UI/UX/Frontend? Perhaps both?
I'd go with prologic's advice of measuring and prioritizing. Perhaps you have a budget or at least something like "let's see how far can we reach in 6 months", and possibly you won't finish in the time you have (just guessing).
Something that has helped me was defining "Why do you we want to refactor this project?".
Could it be to make it compile on newer versions, or making it easier to grow and scale, or perhaps they are trying to sell that product to another company. Every reason has a different path, IMO.
Well, I've heard you have plenty of experience with Unit Testing and TDD. Perhaps designing a few tests before refactoring?
I've heard of Snapshot testing, but have never tried it: https://github.com/spatie/phpunit-snapshot-assertions
Also, what kind of refactor are you trying to do?
Perhaps, since Twitter in 2006 never implemented read flags, every derivative microblogging system never saw that as an expected feature. This is curious because Twitter started with SMS, where on our phones we can mark messages as read or unread.
I think it all comes from the difference between reading an email (directed to you) vs. reading public posts (like a blog or a 'wall,' where you don't mark posts as read). It's not necessary to mark it as 'read', you just jump over it.
Reading microblogging posts in an email program is not common, I think, and I haven't really used it, so I cannot say how it works, and whether it would be better for me or not.
However, I've used Thunderbird as a feed reader, and I understand the advantages when reading blog posts.
About read flags being simple, well... we just had a discussion this morning about how tracking read messages would require a lot of rethinking for clients such as
timeline
where no state is stored. Even considering some kind of 'notification of unread messages or mentions' is not expected for those minimalist client, so it's an interesting compromise to think about.
https://tilde.town/~dzwdz/blog/feeds.html
I've polished the CSS style a bit, you can try it here: https://eapl.me/treed/
If OpenSSL were a GUI

https://wordswithrobots.isotropic.us
2 players Codenames vs (or along) gpt-4o-mini
I prefer a forum for that 😊
Obviously if you've worked on something similar, you already know it, he
Anyone could check, "are there any messages for my address?" and you get a whole list of timestamps and encrypted stuff.
Inside the encrypted message is a signature from the sender. That way you 'could' block spam.
Only the owner of the private key could see who sent what, and so...
And even with that my concussion was that users expectations for a private IM might be far away from my experiment.
[0]
). A syntax like the following could help to know what public key you used to encrypt the message, and which private key the client should use to decrypt it:
!<nick url> <encrypted_message> <public_key_hash_7_chars>
Also I'd remove support for storing the message as hex, only allowing base64 (more compact, aiming for a minimalistic spec, etc.)
[0]
https://www.brandonchecketts.com/archives/its-2023-you-should-be-using-an-ed25519-ssh-key-and-other-current-best-practices
https://github.com/eapl-gemugami/owl/blob/main/src/app/controller/ecies_demo.php
twtxt
(for now), although I see the community could be interested in.I'd suggest to enable the Discussion section in your Github repo to receive comments, as we did for
timeline
https://github.com/sorenpeter/timeline/discussions
I'd rather prefer to get it from the mentioned .txt nick metadata (could be cached for performance).
So my vote would to make it mandatory to follow
@<name url>
but only using that name/nick if the URL doesn't contain another nick.A main advantage is that when the destination URL changes the nick, it'll be automagically updated in the thread view (as happens with some other microblogging platforms, following the Jakob's Law)
prosoal
Is it a typo of Proposal right? =P (Genuinely asking)
Is that the scientific method?
I couldn't find anything related when I searched for it.
Why you shouldn't build your career around existential risk
https://guzey.com/existential-risk/
I'm looking forward to doing something in Django LiveView soon.
@nick@domain.tls
I think Webfinger is the way to go. It has enough information to know where to find that nick's URL.@prologic does that webfinger fork made by darch work OK with yarn as it is now? (I've never used it, so I'm researching about it)
https://darch.dk/.well-known/webfinger/
Wife and I agreed on hibernate until January, just visiting relatives but avoiding any kind of shopping. I tried buying something like 2 or 3 days ago and it's insane :o
Good luck! :)
My first thought was creating a subdomain with the name of the podcast
mordiscos.eapl.me
Then I watched that the software allows many podcasts in the same domain, so I had to pick a handle:
https://mordiscos.eapl.me/@podcast
So now I have
@podcast@mordiscos.eapl.me
when this one is 'more correct' @mordiscos@podcast.eapl.me
or it could even be @mordiscos.eapl.me
I wasn't aware of all that when I setup Castopod (documentation might improve a lot, IMO)
My point here is that it's something important to think from the start, otherwise is painful to change if it's already being used like that.
I agree on displaying a short
@nick
.We could hover on the nick to see the full detail which could be
@nick@domain.tls
or the full URLAlso it could be a display option in Preferences in case your account starts showing many collisions.
The disambiguation for collisions is the .txt URL and the nick inside it, right ?
@nick@nick (Masto/Yarn style)
vs
nick.eapl.me and eapl.me (Bsky style)
I see, for example, that
yarn
shows my account as eapl.me@eapl.me which looks 'weird' although it's not wrong since my domain and my nick are the same. Honestly I like more the Bsky approach as in https://bsky.app/profile/eapl.me for eapl.me, as when you look for https://eapl.me, it's my home page.Also, I didn't get it completely if you are also proposing a URL standard using subdomains, like https://nick.domain.tls. I only want to point out that these are more difficult to handle from shared hostings, so I'd prefer to also allow https://domain.tls/nick/
For example reading here: https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial
I wasn't considering some scenarios, like multiple accounts for a single domain (See 'How can I set and manage multiple subdomain handles?' in the link above)
Or perhaps you can use DNS TXT records?
Although I think that's a bit more complicated for some environments and users, I'd go with looking for a default
/tw*.txt
Troy Hunt: "Pwned", The Book, Is Now Available for Free
https://www.troyhunt.com/pwned-the-book-is-now-available-for-free/
#randomMemory I remember when I was starting to code, like 30 years ago, not understanding why my Basic file didn't run when I renamed it to .exe
And nowadays, I've seen a few Go apps in a single executable, so
twtxt.exe
could be a thing, he!
The older one will redirect to the new for a while (I'm not sure what would happen if you follow both URLs, I assume it's better to add the new one and remove the older)
Please update your following list to https://eapl.me/tw.txt !
I'm changing mine to tw.txt -> https://eapl.me/tw.txt
And the older twtxt.txt will be redirecting for a while
.txt
and .html
, perhaps .twt
, he!
If-Modified-Since
since it'll improve the refreshing process 🤔