In other words, why didnāt you all do the same that @movq@www.uninformativ.de did, and setup a completely different feed for this?
Iāve just released version 1.0 of twtxt.el (the Emacs client), the stable and final version with the current extensions. Iāll let the community maintain it, if there are interested in using it. I will also be open to fix small bugs.
I donāt know if this twt is a goodbye or a see you later. Maybe I will never come back, or maybe I will post a new twt this afternoon. But itās always important to be grateful. Thanks to @prologic@twtxt.net @movq@www.uninformativ.de @eapl.me@eapl.me @bender@twtxt.net @aelaraji@aelaraji.com @arne@uplegger.eu @david@collantes.us @lyse@lyse.isobeef.org @doesnm@doesnm.p.psf.lt @xuu@txt.sour.is @sorenpeter@darch.dk for everything you have taught me. Iāve learned a lot about #twtxt, HTTP and working in community. It has been a fantastic adventure!
What will become of me? I have created a twtxt fork called Texudus (https://texudus.readthedocs.io/). I want to continue learning on my own without the legacy limitations or technologies that implement twtxt. Itās not a replacement for any technology, itās just my own little lab. I have also made a fork of my own client and will be focusing on it for a while. I donāt expect anyone to use it, but feedback is always welcome.
Best regards to everyone.
#twtxt #emacs #twtxt-el #texudus
@lyse@lyse.isobeef.org Kind of, but on the other hand: This twt right here refers to 3rvya6q
and your feed, but your feed certainly does not include that particular twt (it comes from my feed).
But my proposal probably isnāt very helpful, either. We have this flat conversation model, so ⦠this twt right here, what should it refer to? Your twt? My root twt? I donāt know.
@prologic@twtxt.net Donāt include this just yet. I need to think about this some more (or drop the idea).
7
to 12
and use the first 12
characters of the base32 encoded blake2b hash. This will solve two problems, the fact that all hashes today either end in q
or a
(oops) š
And increasing the Twt Hash size will ensure that we never run into the chance of collision for ions to come. Chances of a 50% collision with 64 bits / 12 characters is roughly ~12.44B Twts. That ought to be enough! -- I also propose that we modify all our clients and make this change from the 1st July 2025, which will be Yarn.social's 5th birthday and 5 years since I started this whole project and endeavour! š± #Twtxt #Update
that said, and reading to @sorenpeter@darch.dk and @andros@twtxt.andros.dev I have new thoughts. I assume that this wonāt change anyoneās opinions or priorities, so it makes no harm sharing them.
Itās always tempting to use something that already exists (like X, Masto, Bsky, etc.) rather that building anything through effort and disagreement until reaching to something useful and valuable together. A āsocial serviceā is only useful if people is using it.
Iāll add that I havenāt lost interest on the āhackyā part of twtxt about developing tools, protocols, and extensions as a community. Itās the appealing part! Itās a nice hobby to have, shared with random people across the world.
But this is not the right way for me, and makes me feel that Iām unwelcome to propose something different (after watching replies to my previous twt). Feels like āIf you donāt agree, you are free to leave, weāll miss you.ā Naah, not cool. Iāve lived that many times before, and nowadays I donāt have enough spare time and energy for a hobby like that.
Letās see what happens next with the micro-community!
@prologic@twtxt.net Not sure Iād attach any if
clauses to this. My point is: Every time I see a hash, Iād like to have a hint as to where to find the corresponding twt.
@movq@www.uninformativ.de If weāre focusing on solving the āmissing rootsā problems. I would start to think about āclient recommendationsā. The first recommendation would be:
- Replying to a Twt that has no initial Subject must itself have a Subject of the form (hash; url).
This way itās a hint to fetching clients that follow B, but not A (in the case of no mentions) that the Subject/Root might (very likely) is in the feed url
.
If we must stick to hashes for threading, can we maybe make it mandatory to always include a reference to the original twt URL when writing replies?
Instead of
(<a href="https://yarn.girlonthemoon.xyz/search?q=%23123467">#123467</a>) hello foo bar
you would have
(<a href="https://yarn.girlonthemoon.xyz/search?q=%23123467">#123467</a> http://foo.com/tw.txt) hello foo bar
or maybe even:
(<a href="https://yarn.girlonthemoon.xyz/search?q=%23123467">#123467</a> 2025-04-30T12:30:31Z http://foo.com/tw.txt) hello foo bar
This would greatly help in reconstructing broken threads, since hashes are obviously unfortunately one-way tickets. The URL/timestamp would not be used for threading, just for discovery of feeds that you donāt already follow.
I donāt insist on including the timestamp, but having some idea which feed weāre talking about would help a lot.
7
to 12
and use the first 12
characters of the base32 encoded blake2b hash. This will solve two problems, the fact that all hashes today either end in q
or a
(oops) š
And increasing the Twt Hash size will ensure that we never run into the chance of collision for ions to come. Chances of a 50% collision with 64 bits / 12 characters is roughly ~12.44B Twts. That ought to be enough! -- I also propose that we modify all our clients and make this change from the 1st July 2025, which will be Yarn.social's 5th birthday and 5 years since I started this whole project and endeavour! š± #Twtxt #Update
July 1st. 63 days from now to implement a backward-incompatible change, apparently not open to other ideas like replacing blake with SHA, or discussing implementation challenges for other languages and platforms.
Finally just closing #18, #19 and #20 without starting a proper discussion and ignoring a āmicro consensusā feels⦠not right.
I donāt know what to think rather than letting it rest (May will be busy here) and focus on other stuff in the future.
Finally I propose that we increase the Twt Hash length from 7
to 12
and use the first 12
characters of the base32 encoded blake2b hash. This will solve two problems, the fact that all hashes today either end in q
or a
(oops) š
And increasing the Twt Hash size will ensure that we never run into the chance of collision for ions to come. Chances of a 50% collision with 64 bits / 12 characters is roughly ~12.44B Twts. That ought to be enough! ā I also propose that we modify all our clients and make this change from the 1st July 2025, which will be Yarn.socialās 5th birthday and 5 years since I started this whole project and endeavour! š± #Twtxt #Update
And speaking of Twtxt (See: #xushlda, feeds should be treated as append-only. Your client(s) should be appending Twts to the bottom of the file. Edits should never modify the timestamp of the Twt being edited, nor should a Twt that was edited by deleted, unless you actually intended to delete it (but thatās more complicated as itās very hard to control or tell clients what to do in a truely decentralised ecosystem for the deletion case). #Twtxt #Client #Recommendations
Just like we donāt write emails by hand anymore (See: #a3adoka), we donāt manually write Twts or update our twtxt.txt
feeds. Instead, we use modern Twtxt clients that conform to the specifications at Twtxt.dev for a seamless, automated experience. #Twtxt #Twt #UserExperience
@bender@twtxt.net Hehe good sleuthing 𤣠I swear it was an edit āļø Haha š yarnd
now āseesā both every single time, where-as before it would just obliterate the old Twt, but remain in archive. Now you get to see both š
Not sure if thatās a good thing or not, but it certainly makes it much clearer how to write ācode logicā for detecting edits and doing something more UX(y) about āem š¤
I have a great idea for fixing the US economy. Get rid of all the nuclear weapons š¤£
$ bat https://twtxt.net/twt/edgwjcq | jq '.subject'
"(#yarnd)"
hahahahaha 𤣠Does your client allow you to do this or what? š¤
@aelaraji@aelaraji.com I replied to this twtxt with https://twtxt.net/twt/yqrdx4q, and it created its own, totally unconnected.
Related Twt
@bender@twtxt.net allow me to try and explain over several Twtsā¦
@bender@twtxt.net Wild. The twts look garbled. Like The Thing.
Iām thinking of building a hardened peering protocol for Yarn.socialās yarnd
: pods establish cryptographic identities, exchange signed /info
and /twt
payloads with signature verification, ensuring authenticity, integrity, and spoof-proof identity validation across the distributed network.
dm-only.txt
feeds. š
by commenting out DMs are you giving up on simplicity? See the Metadata extension holding the data inside comments, as the client doesnāt need to show it inside the timeline.
I donāt think that commenting out DMs as we are doing for metadata is giving up on simplicity (itās a feature already), and it helps to hide unwanted DMs to clients that will take months to add itās support to something named⦠an extension.
For some other extensions in https://twtxt.dev/extensions.html (for example the reply-to hash #abcdfeg
or the mention @ < example http://example.org/twtxt.txt >
) is not a big deal. The twt is still understandable in plain text.
For DM, itās only interesting for you if you are the recipient, otherwise you see an scrambled message like 1234567890abcdef=
. Even if you see it, youāll need some decryption to read it. Iāve said before that DMs shouldnāt be in the same section that the timeline as itās confusing.
So my point stands, and as Iāve said before, we are discussing it as a community, so letās see what other maintainers add to the convo.
@andros@twtxt.andros.dev Haha 𤣠Weāve explored this idea in the past and we decided that itās actually a good idea to have an āappend-onlyā feed for various reasons. Weāve also explored the idea of using Range
requests, but opted instead to just archive/rotate our feeds periodically š
There really isnāt much point in having a feed in reverse chronological order, except (maybe?) so a human read view the new twts at the top of the file?! š¤£
Proposal: Change the order of twts in the feeds
https://git.mills.io/yarnsocial/twtxt.dev/issues/26
I drop the bomb and leave! š£ šāā”ļø
#twtxt
@bender@twtxt.net I use it. Itās not the feature I use the most in the fediverse, but I communicate this way with several friends. For example, itās the main way I talk to the original creator of the twtxt-el repository, the way people greet me for the first time or the way they notify me of some bugs in the software I maintain. I can even tell you that itās the main way I talk to some maintainers of the Emacs community. If there are any of you reading my words, speak up!
Why not have the same? There are things I want to say to @prologic@twtxt.net in private, why should I have to send him an email or private IRC? Or an public twt.
Of course, hereās a topic weāve already talked about: what is twtxt for you? For me it will always be a social network, in microblogging format, but an asynchronous way of communicating. And having a tool to control visibility is basic š
I look forward to hearing from you @eapl.me@eapl.me !
See:
<textarea id="text" name="text" placeholder="Hi! š Don't forget to post a Twt today!" rows="4" maxlength="576" required="true" aria-required="true"></textarea>
So, 576?
Hmmm thereās a bug somewhere in the way Iām ingesting archived feeds š¤
sqlite> select * from twts where content like 'The web is such garbage these days%';
hash = 37sjhla
feed_url = https://twtxt.net/user/prologic/twtxt.txt/1
content = The web is such garbage these days š Or is it the garbage search engines? š¤
created = 2024-11-14T01:53:46Z
created_dt = 2024-11-14 01:53:46
subject = #37sjhla
mentions = []
tags = []
links = []
sqlite>
Btw @andros@twtxt.andros.dev ; The automated feed you put together for Hacker News⦠Does it at any point rewrite parts of the feed as it goes along? š¤ Iāve had to unfollow it because Iāve found in practise it makes a twt, then seems to modify that same twt (observed by content manually) at least twice. This ends up becoming effectively an āEditā and essentially duplicate (looking) posts š¢
AS136907 HWCLOUDS-AS-AP HUAWEI CLOUDS
@prologic@twtxt.net This shi_ is as fun as it is frustrating! š the bot is poking at me from a different ASN now, Alibabaās.
- Short term solution: Iāve geo-locked my Timeline instance since Iām the only one using it (and I only do so for reading twts when Iām away from terminal).
- Long term: I took a look at your Caddy WAF but couldnāt figure things out on my own; until then, Iāll be poking at Caddy-Defender, maybe throw in a Crowdsec for lols⦠#FUN
Some A hole has been trying to pull every single Twtxt feed that existed/still exists since forever. How do I know? Welpā Theyāve been querying my Timeline⢠instance for all of it, every single twtxt file and twt Hash they can find. šš¤¦ It must have been going on for days and I have just noticed⦠+ itās all coming from the same ASN AS136907 HWCLOUDS-AS-AP HUAWEI CLOUDS
Thank you Huawei for the DDos you sons of Glitches!!!
@kat@yarn.girlonthemoon.xyz Itās more like a cache, it stores things like ātimestamp of the most recent twt weāve seen per feedā or ālast modification dateā (to be used with HTTPās if-modified-since
header). You can nuke these files at any time, it might just result in more traffic (e.g., always getting a full response instead of just āHTTP 304 nope, didnāt changeā).
@quark@ferengi.one Yes, I often write a couple of twts, donāt publish them, then sometimes notice a mistake and want to edit it. Youāre right, as soon as stuff is published, threads are going to break/fork by edits.
@quark@ferengi.one No editing old Twts that are the root of a thread with replies in the ecosystem. Just results in a fork. Unless the client has an implementation that does not store Twts keyed by Hash.
jenny really isnāt well equipped to handle edits of my own twts.
For example, in 2021, this change got introduced:
https://www.uninformativ.de/git/jenny/commit/6b5b25a542c2dd46c002ec5a422137275febc5a1.html
This means that jenny will always ignore my own edits unless I also manually edit its internal ājson databaseā. Annoying.
That change was requested by a user who had the habit of deleting twts or moving them to another mailbox or something. I think that person is long gone and I might revert that change. š¤
Ha! I stand corrected, didnāt scrolled long enough. Indeed, it should be added (you will need an account on Millsā Gitea), noted.
si4er3q
. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00
or -00:00
must be replaced by Z
.
@eaplme@eapl.me you wrote:
āThat PHP snippet could be merged into https://twtxt.dev/exts/twt-hash.htmlā
Why, though? AFAIK @andros@twtxt.andros.devās client is on Emacs, @lyse@lyse.isobeef.orgās is on Python (and Golang, for tt2
), @movq@www.uninformativ.deās is on Python, and @prologic@twtxt.netās is on Golang. All the client creator needs to know is in the documentation already, coding language agnostic.
si4er3q
. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00
or -00:00
must be replaced by Z
.
just a note that we are doing that on PHP: https://github.com/eapl-gemugami/twtxt-php/blob/master/docs/03-hash-extension.md#php-72
That PHP snippet could be merged into https://twtxt.dev/exts/twt-hash.html
@david@collantes.us @andros@twtxt.andros.dev The correct hash would be si4er3q
. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00
or -00:00
must be replaced by Z
.
(That said, thereās a bug in jenny as well. It only replaces +00:00
, not -00:00
. š¤”)
dm-only.txt
feeds. š
@bender@twtxt.net For example:
If you can see this twt in any feedā¦
xxxx-xx-xxTxx:xx:xxZ !<bender https://twtxt.net/user/bender/twtxt.txt> U2FsdGVkX1+QmwBNmk9Yu9jvazVRFPS2TGJRGle/BDDzFult6zCtxNhJrV0g+sx0EIKbjL2a9QpCT5C0Z2qWvw==
It is for you. Any other possibility must be ignore (hidden in your timeline).
If your client doesnāt have the posibility to decrypt the twt, hide all direct message. It is all :)
@andros@twtxt.andros.dev Curious where this root twt is?! 𤣠Apparently my pod doesnāt have it and I canāt find it anywhere. Itās suppose to be #l4doaxa
dm-only.txt
feeds. š
@bender@twtxt.net @aelaraji@aelaraji.com The client should ignore twts if itās not compatible or not addressed to me. itās a simple regex to add! Itās similar to Twt Hash Extension, should they be in another file? They are child messages, not flat twt. Not of course!
@xuu@txt.sour.is Seems to be fine here?
$ bat https://twtxt.net/twt/yfv5kfq | jq '.text'
"!<dm-echo https://dm-echo.andros.dev/twtxt.txt> U2FsdGVkX1+QmwBNmk9Yu9jvazVRFPS2TGJRGle/BDDzFult6zCtxNhJrV0g+sx0EIKbjL2a9QpCT5C0Z2qWvw=="
@bender@twtxt.net Sadly my earlier Twt back in ~2020 is now gone from at least this podās cache 𤣠ā It might still exist in other pods though? š¤ It does! https://txt.sour.is/twt/o6dsrga
Happy 1st Twtxt~iversary to me ⦠I guess. It feels like it was 5 years since my first twt š
Iām also thinking that some kind of tag might be needed to automatically hide twts from unknown extensions. For example our client doesnāt support DMs and always shows the !<nick url><encrypted_message>
syntax which is meaningless.
@bender@twtxt.net Yes! I deleted those repeated twts because it was poor execution by my client. They are currently not present in my feed.
Maybe it would be interesting to check if any twt has disappeared?
Oops, I think this pod (twtxt.net
) just sync ~1k missing root twts with god only knows which peers š¤¦āāļø I forgot a couple of important key things:
- Only coverage with a subset of peers
- Only converge with trusted peers
Fuck me 𤣠Ooops. Sorry!
@andros@twtxt.andros.dev can you see the screenshot on my first twtxt? Here: https://twtxt.net/twt/mrccg4q
Good quote: «Corrects in private and congratulates in public».
Orā¦: Ā«Corrects in direct message and congratulates in twtĀ» š
I was trying to optimize the SQL query used for the Compact FrontPage (anonymous view for Discovery when the Admin/Operator chooses āone twt per feedā).
@thecanine@twtxt.net Did you see my revelation earlier today? š¤
Hmm, Yarnd is duplicating the rendering of /twt/5jlfuua
. Thatās quite odd.
Anyway. this was a good use for search btw. I couldnāt find my Twt, so I just quickly searched for it, snap, bingo I found it in a snap! š«°