@david@daiwei.me Also if you wouldn’t mind writing up an Issue for the image/upload problem too, that would be great 👍 I still haven’t solved it properly, but I’ll try to do so today. There’s also an issue uploading images via the yarnd API path from the Twtxt App too, which I can replicate with basically any photo from my iPhone’s Photo gallery hmm 🤔
Also a “Publish who I follow” toggle: writes # follow = + # following = N into your feed like yarnd does. Off by default (it is your social graph 🤔), and only on the GitHub/Gitea backends for now where the app owns the feed file. twtd next 🤞
Okay I’m fixing this in lextwt, yarnd and twtxt.app (takes a different path). Soon you’ll be able to write shit™ like (<this>) and it’ll get escaped and rendered correctly on the page. Basically you are really writing HTML here, but not intending to do so, Twtxt never supported HTML, and I don’t think it ever should. We extended the format to support basic Markdown, and I think that’s where it should end.
Probably time we wrote a Spec for this really.
@david@daiwei.me I see it now. Is this also a problem in the app too? Or just yarnd or both?
@david@daiwei.me The stuff in parens is lost on yarnd:
Does yarnd still support the old “threading”? Let’s see.
@balloon-fu-sen@tw.fus.f5.si Thank you for reaching out 👌 I had alraedy done so via Email too a few days back and she upgraded her Pod to yarnd/0.16.x 🎉
@kat@yarn.girlonthemoon.xyz Welcome back!!!! 🎉 Did you upgrade your yarnd? 🤔
+00:00 vs Z should be treated as equivalent UTC 🤦♂️ I'll take a look at the timestamp parsing in Yarnd 🧐
@prologic@twtxt.net For what it’s worth, the twt hash extension is specifically modeled after yarnd’s implementation with all the quirks coming from Go’s stdlib: https://twtxt.dev/exts/twt-hash.html#timestamp-format
“All timezones representing UTC must be formatted using the designated Zulu indicator Z rather than the numeric offsets +00:00 or -00:00. If the timestamp does not explicitly include any timezone information, it must be assumed to be in UTC.”
🥳 Finally! After nearly 4 years, yarnd v0.16.0 “Silver Sojourner” is out! 🚀 Twt Hash v2, SQLite FTS5 search, HTMX-powered UI, first-time setup wizard and literally hundreds of bug fixes 🐛
Release notes: https://git.mills.io/yarnsocial/yarn/releases/tag/0.16.0
Upgrading is fully automatic — the Twt Hash v2 migration re-fetches all feeds on first start, so expect the first cycle to be a bit heavier. Images on Docker Hub as prologic/yarnd:0.16.0 👌
cc @kat@yarn.girlonthemoon.xyz @abucci@anthony.buc.ci @shinyoukai@yume.laidback.moe @eldersnake@we.loveprivacy.club 🙏
👍 definitely using the Twtxt App as my daily-driver now for Twtxt/Yarn. Not using twtd however, as I just pair the app with my already existing yarnd powered profile on twtxt.net
Looks like twtxt.app on mobile emits +00:00 UTC timestamps instead of Z – Yarnd should handle both, but doesn’t 🤦♂️ On the list 🤞
@bender@twtxt.net @david@daiwei.me Good debugging session 👌 Sounds like the root cause is twtxt.app on mobile — +00:00 timestamps and quoted mentions. I’ll dig into Yarnd’s side of that 🧐
@bender@twtxt.net Yeah, Yarnd’s mention parser is pretty naive — if twtxt.app wraps the mention in quotes it probably strips them wrong. Worth fixing 🤔
+00:00 vs Z should be treated as equivalent UTC 🤦♂️ I’ll take a look at the timestamp parsing in Yarnd 🧐
@david@daiwei.me bender variable in. First thing I see on Yarnd is that my mention is broken. It was entered between quotes on twtxt.app. Yarnd has always had parsing problems, so I am not blaming twtxt.app this time.
@movq@www.uninformativ.de this is what I see on twtxt.app (all looks good there, though, but not here, on Yarnd):

This one isn’t showing right on Yarnd (here):

And I don’t know why.
I’m starting to use the twtxt.app as my daily driver now as opposed to yarnd and my pod twtxt.met 🥳
@bender@twtxt.net Please create an issue for this too! Probably against twtd right? We should validate new fetchers and see if they are real clients or not. I think yarnd already does ybis quite well? 🧐
Hello everyone ! 👋 Behold I bring you (after many years) the launch of the Twtxt App 😅 – Ye, this is a Desktop and Mobile app built as a Progressive Web App (PWA) using a little framework (Swag) I put together iafter some experiments @xuu@txt.sour.is and I did in Go and HTMX and Service Workers.
The App is offline-first and supports installing to Desktop and Mobile (add to Home screen) and supports a number of publishing backends, including Yarn.social’s yarnd Pod, Github, Codeberg/Gitea, and a little tiny twtd Twtxt server (See: https://git.mills.io/yarnsocial/twtd).
Please try it out, no need for any account(s) or such, works with your existing feed(s) (as long as the publishing backends work well enough for you!). Please give me feedback! 🙏
Also, did you know the Twtxt Search Engine is back? 🎉
@balloonfu-sen@yarn.girlonthemoon.xyz Do you mind git pull && make build and updating your yarnd instance so it’s in-line with the new Hash v2 spec 🙏
@balloonfu-sen@yarn.girlonthemoon.xyz I think you need to update your yarnd instance 🙏
Seems to be good now 😅 As-is yarnd 🤣
Shit i need to update yarnd 😅
@balloonfu-sen@yarn.girlonthemoon.xyz Oh! You’re running Yarn.social’s yarnd? 😅 That’s why I was able to see your reply so quickly/easily ! Nice! And welcome! 🙏
That reminds me, I need to update yarnd too. I haven’t done so yet 😅 Been so bloody busy with work 🥵
@movq@www.uninformativ.de I really like your style of writing, btw. It’s much calmer and less aggressive then mine. :-) When I turned my bullet points into paragraphs, I got a bit mad in the process.
Sure, feel free to include anything you want. Regarding citing, this is where twtxt falls short in my opinion. Especially with feed rotation, classic links die quickly. Message hashes only help so much. Nobody outside the twtxt universe knows how to deal with them. So, not perfect for inclusion on a web page. Linking to a thread or message on some yarnd instance might be the more user-friendly option. But the disadvantage is that it’s “just” a mirror, not the primary or original source. In all reality, this could be considered splitting hairs, though.
I should have probably written a proper article. That would have given me time to review the result more carefully, too. ;-) Perhaps that’s something for the future. But honestly, I’m not sure if I really want to waste my time and energy on that subject. So many other fun or useless things come to mind right away that I could do instead. 8-)
So, yeah, do whatever feels best to you. I don’t mind being cited or linked, but I also don’t mind not to be cited or not to be linked to. :-D Not a helpful answer, I know. Sorry. ;-) But anyway, thanks for asking, mate! I do appreciate it.
To finish my thought, linking to my frontpage is probably also useless, since I deliberatly do not have a table of contents there. In fact, my entire frontpage is rather silly.
@lyse@lyse.isobeef.org yes, yarnd has a few parser (?) issues that were never resolved. If only a powerful token predictor could fix it, once and for all… 😅
@yarn_police@twtxt.net Looks like the rendering in yarnd is off. The second subject (prisoner error!) was robbed, its link text got stolen.
@klaxzy@klaxzy.net yarnd/*
Replies aren’t actually broken, I just… need to add myself to the follow list?! That’s quite counter-intuitive and (IIRC) not mentioned in the docs. But… It seems to be working now, which is nice (I still don’t know how webmentions and webfinger works, so can’t speak about this so far)
yarnd (what runs here at twtxt.net) actually does this automatically by default. I think it’s just an implementation detail to be honest. There’s nothing about this in the specs over at https://twtxt.dev
@bender@twtxt.net Fixed 🤣 Nobody was following that feed 😅 yarnd had no reason to “pull” it in.
Btw, @shinyoukai@neko.laidback.moe, that’s a super cool logo on your yarnd. I like it a lot!
It just doesn’t look aligned properly:
Could be a yarnd issue, though, it might not expect a logo this large. Just wildguessing, no idea.The YAML forbidden knowledge of yarnd
I have to say. A well designed Hypermedia Driven Web Application such as yarnd‘ using HTMX is just as good, i'd not better, than one written in React.
Alright, this yarnd installation has been properly fixed.
Obviously yarnd 🙋♂️
@arne@uplegger.eu @lukas@lukasthiel.de In fact, Yarn.social’s yarnd client implementation actually uses (or did, still kinda does today) PicoCSS 🤟 It was/is a good CSS library! 👍
@lyse@lyse.isobeef.org @bender@twtxt.net that’s also what Yarn.social’s logo is, and just happens to be the yarnd default. Hmmm figured times for a change? 🤔
technically I can put the Bridge verificaiton code in my feed’s metadata so no-one really ever sees or notices it 🤔 Maybe I’ll add a first-class button/field thingy in yarnd so users can “register their feed” straight from their pod? 🤔
Hmmm, looks like my twt hash algorithm implementation calculates incorrect values. Might be the tilde in the URL that throws something off. :-? At least yarnd and jenny agree on a different hash.
Hmmm all these tilde.club feeds have no # nick and is messing with yarnd’s behavior 😅
@zvava@twtxt.net yarnd fetches the feeds roughly every ten minutes:
grep twtxt.net www/logs/twtxt.log | cut -d ' ' -f1 | tail -n 20
2025-10-04T07:00:45+02:00
2025-10-04T07:10:26+02:00
2025-10-04T07:22:43+02:00
2025-10-04T07:30:45+02:00
2025-10-04T07:40:48+02:00
2025-10-04T07:52:59+02:00
2025-10-04T08:00:07+02:00
2025-10-04T08:13:33+02:00
2025-10-04T08:23:13+02:00
2025-10-04T08:31:22+02:00
2025-10-04T08:41:29+02:00
2025-10-04T08:53:25+02:00
2025-10-04T09:03:31+02:00
2025-10-04T09:11:42+02:00
2025-10-04T09:23:11+02:00
2025-10-04T09:29:49+02:00
2025-10-04T09:36:17+02:00
2025-10-04T09:46:33+02:00
2025-10-04T09:58:40+02:00
2025-10-04T10:06:54+02:00
I suspect that the timing was just right. Or wrong, depending on how you’re looking at it. ;-)
@prologic@twtxt.net I can’t upload a screenshot (tried, but Yarnd simple “ate” my reply). See https://zsblog.mills.io/posts/hello-zs-blog.html. Is has no date/time on it.
@zvava@twtxt.net And yes yarnd does have a well documented API and two clients (CLI and unmaintained Flutter App)
Wanting to add, this isn’t a twtxt client. It is Yarnd on steroids! 😂
@zvava@twtxt.net The first version of what is now yarnd was built over a weekend 😀
yarnd (what runs twtxt.net). I'd change this to something that's more supproted like PNG, JPEG, etc.
@eric@itsericwoodward.com Name change is no worries! 😉 Interesting/funnily enough my client yarnd seems to have picked it up automatically which is nice (I’ve historically always had a few bugs to iron out there 🤣)
@itsericwoodward@itsericwoodward.com Also just a heads up, GIF(s) aren’t supproted as an Avatar type on yarnd (what runs twtxt.net). I’d change this to something that’s more supproted like PNG, JPEG, etc.
yarnd supports webmentions??? that’s awesome!
@nghialele@nghia.im it’s great to see another Yarnd pod in the wild. Welcome!
Z for UTC +00:00- is that allowed in your specs?
Regarding url = I would suggest to only allow one and the maybe add url_old = or url_alt = !?
I'm still not a fan of a DM feature, even thou it helps that i have now been split out into a separate feed file. Instead if would suggest a contact = field for where people can put an email or other id/link for an established chat protocol like signal or matrix.
@sorenpeter@darch.dk you wrote:
“This might even be backward compatible with older (pre-yarn) clients.”
Yarnd is as backwards compatible with older clients as this. I dare to say, even more so. 😅
Going to try and few up a few more UX bugs today with yarnd.
I wonder if this twtxt will kick Yarnd into working again. There is only one way to find out, right?
git checkout main && git pull && make build. Few bug fixes 😄
@prologic@twtxt.net done! hey i got a question, you got any clue why my feeds aren’t updating? maybe it has to do with the new cache flag but i messed with that a bit and didn’t notice a difference. basically it’s like i have to manually restart yarnd to see new posts it’s really weird lol
After yarnd v0.16 is released and the next round of specification updates are done and dusted, who wants me to have another crack at building Twtxt and activity pub integration support?
i don’t think it’s normal to have to restart my yarnd instance every time i wanna see new posts right
tt2 from @lyse and Twtxtory from @javivf?
@prologic@twtxt.net I have:
- jenny
- buckket’s original (patched, or not)
- tt/tt2
- Timeline
- Twtxtory
- Yarnd
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
I will be adding the code in for yarnd very soon™ for this change, with a if the date is >= 2025-07-01 then compute_new_hashes else compute_old_hashes
@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 🤔
Interesting edit observed by the new yarnd powering this pod twtxt.net 🧐
Today I added support for Let’s Encrypt to eris via DNS-01 challenge. Updated the gcore libdns package I wrote for Caddy, Maddy and now Eris. Add support for yarn’s cache to support # type = bot and optionally # retention = N so that feeds like @tiktok@feeds.twtxt.net work like they did before, and… Updated some internal metrics in yarnd to be IMO “better”, with queue depth, queue time and last processing time for feeds.
@prologic@twtxt.net well, this fork will work. I an fork this one with jenny, not so with Yarnd.
$ bat https://twtxt.net/twt/edgwjcq | jq '.subject'
"(#yarnd)"
hahahahaha 🤣 Does your client allow you to do this or what? 🤔
Bahahahaha 🤣
@bmallred@staystrong.run Hehe, @bender@twtxt.net is gonna be upset with you for “making up a thread/subject” 🤣
Interesting factoid… By inspecting my “followers” list every now and again, I can tell who uses a client like jenny, tt or any other client where fetches are driven by user interactions of invoking the app. What do we call this type of client? Hmmm 🤔 Then I can tell who uses yarnd because they are “seen” more frequently 🤣
First draft of yarnd 0.16 release notes. 📝 – Probably needs some tweaking and fixing, but it’s sounding alright so far 👌 #yarnd
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.
@eapl.me@eapl.me I wouldn’t call it natural, it is the way Bluesky decided to handle handles (not meaning to make a pun, or anything). There is no other way, but that.
The bottomline is, there are agreed upon “standards”, right? From example, on Yarnd you show as “eapl.me”, from “eapl.me”. A kind of weird redundancy because on twtxt, ever since I started using it, one will expect to see a “nick” (equivalent to a person’s first name), from “a domain” (like a surname).
There is nothing holding back someone from giving themselves the nick:
thisismyawesomenickforwhichiwillbeknownforeverandeveritsgreatisntit
But, do we really want that? 😅
@kat@yarn.girlonthemoon.xyz OMG! You used the video capabilities of yarnd 🤣 Nice! 😊
@abucci@anthony.buc.ci two things. Conduwuit, a Matrix server written in Rust, is no longer going to be developed. The other is, I didn’t mean to tag you, but because Yarnd was broken it happened. Apologies.
@prologic@twtxt.net why not blanket closing everything older than, say, 3 months? Yarnd is quite a different beast today, right? Let’s start over!
@bender@twtxt.net You said:
as long as those working on clients can reach an agreement on how to move forward. That has proven, though, to be a pickle in the past.
I think this is because we probably need to start thinking about three different aspects to the ecosystem and document them out:
- Specifications (as they are now)
- Server recommendations (e.g: Timeline, yarnd, etc)
- Client recommendations (e.g: jenny, tt, tt2, twet, etc)
@lyse@lyse.isobeef.org oh, and thanks for the bigger photo! I like how it lovely fill the twtxt in Yarnd. Woot!
yarnd UI/UX experience (for those that use it) and as "client" features (not spec changes). The two ideas are quite simple:
All these remind me of the “blog” ability once existed in Yarnd. I hate to be the party pooper, but little to non interest from me. LOL. I am up to increase the length of a twtxt, though. It is rather limiting right now.
yarnd UI/UX experience (for those that use it) and as "client" features (not spec changes). The two ideas are quite simple:
The nice thing here is that any Ui/UX rendering for a “good user experience” is similar to what yarnd does for Youtube/Spotify/whatever embedding. Plus anyone can participate, even if they don’t really have a client that understand it, it’s just text with some “syntax” afterall.
(#6kkpdda) The nice thing here is that any Ui/UX rendering for a “good user experience” is similar to what yarnd does for Youtube/Spotify/what …
The nice thing here is that any Ui/UX rendering for a “good user experience” is similar to what yarnd does for Youtube/Spotify/whatever embedding. Plus anyone can participate, even if they don’t really have a client that understand it, it’s just text with some “syntax” afterall. ⌘ Read more
💡 I had this crazy idea (or is it?) last night while thinking about Twtxt and Yarn.social 😅 There are two things I think that could be really useful additions to the yarnd UI/UX experience (for those that use it) and as “client” features (not spec changes). The two ideas are quite simple:
- Voting – a way to cast, collect a vote on a decision, topic or opinion.
- RSVP – a way to “rsvp” to a virtual (pr physical) event.
Both would use “plain text” on top of the way we already use Twtxt today and clients would render an appropriate UI/UX.
💡 I had this crazy idea (or is it?) last night while thinking about Twtxt and Yarn.social 😅 There are two things I think that could …
💡 I had this crazy idea ( or is it?) last night while thinking about Twtxt and Yarn.social 😅 There are two things I think that could be really useful additions to the yarnd UI/UX experience ( for those that use it) and as “client” features ( not spec changes). The two ideas are quite simple:
Voting – a way to cast, collect a vote on a decision, topic or opinion.
RSVP – a way to “ … ⌘ Read more
@movq@www.uninformativ.de wouldn’t editing your own twtxts cause the same issue Yarnd (or any other client) has, which is breaking any replies to it? Under which conditions would this work the best? When copying the twtxt.txt file asynchronously? In my case I copy the twtxt.txt file to its web root right away, but I figure I could not do that, which would give me a set period of time to edit without worries.
@andros@twtxt.andros.dev I don’t see any “fighting” here. This is just good experimentation. Unfortunately there hasn’t really been enough time or effort by other “client authors” yet, me especially as I’ve been super busy with ya’ know my “day job” that pays the bills and refactoring yarnd to use a new and shiny and much better SqliteCache 🤣 – I certainly don’t think your efforts are wasted at all. I would however like @doesnm.p.psf.lt@doesnm.p.psf.lt encourage you to look at the work we’ve done as a community (which was also driven out of the Yarn.social / Twtxt community years back).
(#2zhuzoa) @andros@andros I don’t see any “fighting” here. This is just good experimentation. Unfortunately there hasn’t really been e …
@andros @twtxt.andros.dev I don’t see any “fighting” here. This is just good experimentation. Unfortunately there hasn’t really been enough time or effort by other “client authors” yet, me especially as I’ve been super busy with ya’ know my “day job” that pays the bills and refactoring yarnd to use a new and shiny and … ⌘ Read more
@bender@twtxt.net You will be pleased to know that yarnd now only consumes ~60-80MB of memory depending on load 🤣 And bugger all CPU 😅
@bender@twtxt.net You will be pleased to know that yarnd now only consumes ~60-80MB of memory depending on load 🤣 And bugger all CPU 😅
@bender @twtxt.net You will be pleased to know that yarnd now only consumes ~60-80MB of memory depending on load 🤣 And bugger all CPU 😅 ⌘ Read more
Hmm, Yarnd is duplicating the rendering of /twt/5jlfuua. That’s quite odd.
./yarnc debug <your feed url>:
I’m so confused. None of this code has changed in yarnd at all. Hmmm 🤔
(#4uctaca) I’m so confused. None of this code has changed in yarnd at all. Hmmm 🤔
I’m so confused. None of this code has changed in yarnd at all. Hmmm 🤔 ⌘ Read more
I’m thinking you may have edited. Lemme check actually… yarnd (on this branch) will now restore every version, and maybe I might have introduced a bit of a weird behavior there. One moment…
(#2znenta) I’m thinking you may have edited. Lemme check actually… yarnd (on this branch) will now restore every version, and maybe I _m …
I’m thinking you may have edited. Lemme check actually… yarnd ( on this branch) will now restore every version, and maybe I might have introduced a bit of a weird behavior there. One moment… ⌘ Read more
@prologic@twtxt.net Spring cleanup! That’s one way to encourage people to self-host their feeds. :-D
Since I’m only interested in the url metadata field for hashing, I do not keep any comments or metadata for that matter, just the messages themselves. The last time I fetched was probably some time yesterday evening (UTC+2). I cannot tell exactly, because the recorded last fetch timestamp has been overridden with today’s by now.
I dumped my new SQLite cache into: https://lyse.isobeef.org/tmp/backup.tar.gz This time maybe even correctly, if you’re lucky. I’m not entirely sure. It took me a few attempts (date and time were separated by space instead of T at first, I normalized offsets +00:00 to Z as yarnd does and converted newlines back to U+2028). At least now the simple cross check with the Twtxt Feed Validator does not yield any problems.
Just saw this user agent popping up:
yarnd/ERSION@OMMIT go1.23.4 (+https://.../twtxt.txt; @username)
ERSION? OMMIT? 😅
(#w4mnpkq) @xuu@xuu Actually… I’m working on a new Sqlite backend/cache for yarnd 🤣 I might revive yarns (_the crawler / search …
@xuu @txt.sour.is Actually… I’m working on a new Sqlite backend/cache for yarnd 🤣 I might revive yarns ( the crawler / search engine) one day 🤞 ⌘ Read more
(#zrsxk3a) @bender@bender I never implemented it actually. That’s why we have the # refresh = metadata field for those that yell loudly en …
@bender @twtxt.net I never implemented it actually. That’s why we have the # refresh = metadata field for those that yell loudly enough can add to their feeds. Otherwise yarnd uses WebSub between pods and is fairly dumb. I could never find an “intelligent” way to back-off without hurting freshness. ⌘ Read more
@doesnm@doesnm.p.psf.lt haha its not coming back. he talked of a stand alone thing like feeds. but not in yarnd
@doesnm@doesnm.p.psf.lt haha its not coming back. he talked of a stand alone thing like feeds. but not in yarnd
@eapl.me@eapl.me Interesting! Two points stood right out to me:
Why the hell are e-mail newsletters considered a valid option in the first place? Just offer an Atom feed and be done with it! Especially for a blog of this very type. This doesn’t even involve a third party service. Although, in addition he also links to Feedburner, what the fuck!? No e-mail address or the like is needed and subject to being disclosed.
When these spam mailers want to prevent resubscribing, then for fuck’s sake, why don’t they use a hash of the e-mail address (I saw that in yarnd) for that purpose? Storing the e-mail address in clear text after unsubscribing is illegal in my book.
@movq@www.uninformativ.de let’s host yarnd! Or maybe wait until @prologic@twtxt.net return activitypub support which deleted in this commit

